Unterstützung von HTMLImageElement und ImageData in copyExternalImageToTexture()
Mit der Methode copyExternalImageToTexture()
für GPUQueue
können Sie einen Snapshot eines Quellbilds, Videos oder Canvas in ein bestimmtes GPUTexture
kopieren. Sie können jetzt Objekte vom Typ HTMLImageElement
und ImageData
als Quelle übergeben. Sehen Sie sich das folgende Beispiel an und lesen Sie das Problem „chromium:1471372“.
// Fetch and decode image.
const source = document.createElement("img");
source.src = "my-image.png";
await source.decode();
// Create destination texture.
const size = [source.width, source.height];
const texture = myDevice.createTexture({
size,
format: "rgba8unorm",
usage:
GPUTextureUsage.COPY_DST |
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING,
});
// Copies a snapshot taken from the source image into a texture.
myDevice.queue.copyExternalImageToTexture({ source }, { texture }, size);
Experimentelle Unterstützung für schreibgeschützte und schreibgeschützte Speichertexturen
Mit dem Bindungstyp der Speichertextur können Sie Texturlesevorgänge ohne Sampling ausführen und an beliebigen Positionen in Shadern speichern. Wenn die Funktion "chromium-experimental-read-write-storage-texture"
in einer GPUAdapter
verfügbar ist, können Sie jetzt mit dieser Funktion eine GPUDevice
anfordern und den GPUStorageTexture
-Zugriff entweder auf "read-write"
oder "read-only"
festlegen, wenn Sie ein Layout für eine Bindungsgruppe erstellen. Bisher war dies auf "write-only"
beschränkt.
Um dies zu nutzen, musst du die Erweiterung in deinem WGSL-Code explizit mit enable chromium_experimental_read_write_storage_texture
aktivieren. Wenn diese Option aktiviert ist, können Sie die Zugriffsqualifizierer read_write
und read
für Speichertexturen verwenden. Die integrierten Funktionen textureLoad()
und textureStore()
verhalten sich entsprechend. Zum Synchronisieren von Zugriffen auf Texturspeicher in einer Arbeitsgruppe ist eine neue integrierte Funktion textureBarrier()
verfügbar. Sehen Sie sich das folgende Beispiel und issue dawn:1972 an.
Die Funktion befindet sich noch in der Testphase und kann sich noch ändern. Während der Standardisierung von Chrome kannst du Chrome mit dem Flag --enable-dawn-features=allow_unsafe_apis
ausführen, um Chrome zur Verfügung zu stellen.
const feature = "chromium-experimental-read-write-storage-texture";
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has(feature)) {
throw new Error("Read-write storage texture support is not available");
}
// Explicitly request read-write storage texture support.
const device = await adapter.requestDevice({
requiredFeatures: [feature],
});
const bindGroupLayout = device.createBindGroupLayout({
entries: [{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
storageTexture: {
access: "read-write", // <-- New!
format: "r32uint",
},
}],
});
const shaderModule = device.createShaderModule({ code: `
enable chromium_experimental_read_write_storage_texture;
@group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_id) local_id: vec3u) {
var data = textureLoad(tex, vec2i(local_id.xy));
data.x *= 2;
textureStore(tex, vec2i(local_id.xy), data);
}`,
});
// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.
Updates zum Morgengrauen
Aus Konsistenzgründen hat die C API webgpu.h die folgenden Felder umbenannt: requiredFeaturesCount
in requiredFeatureCount
, pipelineStatisticsCount
in pipelineStatisticCount
und colorFormatsCount
in colorFormatCount
. Weitere Informationen finden Sie unter Problem dawn:146040.
Mit einem neuen DawnInfo
-Programm (ähnlich wie vulkaninfo) kannst du Ein-/Aus-Schaltflächen, Adapter, Adapterfunktionen und Adapterlimits auflisten. Er ist bei Sonnenaufgang samples
verfügbar. Hier sehen Sie die Ausgabe unten, die der Übersichtlichkeit halber stark geschnitten wurde. Weitere Informationen finden Sie unter change dawn:149020.
./out/Debug/DawnInfo
Toggles
=======
Name: allow_unsafe_apis
Suppresses validation errors on API entry points or parameter combinations
that aren't considered secure yet.
http://crbug.com/1138528
[…]
Adapter
=======
VendorID: 0x106B
Vendor: apple
Architecture: common-3
DeviceID: 0x0000
Name: Apple M1 Pro
Driver description: Metal driver on macOS Version 13.5.1 (Build 22G90)
Adapter Type: discrete GPU
Backend Type: Metal
Power: <undefined>
Features
========
* depth_clip_control
Disable depth clipping of primitives to the clip volume
https://bugs.chromium.org/p/dawn/issues/detail?id=1178
[…]
Adapter Limits
==============
maxTextureDimension1D: 16,384
maxTextureDimension2D: 16,384
[…]
Dies sind nur einige der wichtigsten Punkte. Hier finden Sie eine vollständige Liste der Commits.
Neu bei WebGPU
Hier finden Sie eine Liste aller Inhalte, die in der Reihe What's New in WebGPU behandelt wurden.
Chrome 125
Chrome 124
- Schreibgeschützte und nicht schreibgeschützte Speichertexturen
- Unterstützung für Service Worker und Shared Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Updates zum Morgengrauen
Chrome 123
- Unterstützung von integrierten Funktionen in DP4a in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- Syntax für die Dereferenzierung von zusammengesetzten Elementen in WGSL
- Separater schreibgeschützter Status für Schablonen- und Tiefenaspekte
- Updates zum Morgengrauen
Chrome 122
- Reichweite mit Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Limit für „maxVertexAttributes“ erhöhen
- Updates zum Morgengrauen
Chrome 121
- Unterstützung von WebGPU unter Android
- Für die Shader-Kompilierung unter Windows DXC statt FXC verwenden
- Zeitstempelabfragen in Rechen- und Renderingdurchläufen
- Standardeinstiegspunkte für Shader-Module
- display-p3 als GPUExternalTexture-Farbraum unterstützen
- Informationen zum Arbeitsspeicher-Heaps
- Updates zum Morgengrauen
Chrome 120
- Unterstützung von 16-Bit-Gleitkommawerten in WGSL
- Gehe an die Grenzen
- Änderungen am Status der Tiefenschablone
- Aktualisierungen der Adapterinformationen
- Quantisierung von Zeitstempelabfragen
- Frühjahrsputz-Funktionen
Chrome 119
- Filterbare 32-Bit-Float-Texturen
- Vertex-Format „unorm10-10-10-2“
- rgb10a2uint Texturformat
- Updates zum Morgengrauen
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für nicht schreibgeschützte und schreibgeschützte Speichertexturen
- Updates zum Morgengrauen
Chrome 117
- Nicht festgelegter Vertex-Zwischenspeicher
- Bindungsgruppe aufheben
- Fehler aufgrund asynchroner Pipelineerstellung bei Verlust des Geräts stummschalten
- Updates zur Erstellung von SPIR-V-Shader-Modulen
- Entwicklererfahrung verbessern
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Updates zum Morgengrauen
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät vom GPUAdapter
requestDevice()
zurückgegeben - Für eine flüssige Videowiedergabe bei
importExternalTexture()
-Aufrufen sorgen - Spezifikationskonformität
- Entwicklererfahrung verbessern
- Updates zum Morgengrauen
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Diskrete GPU standardmäßig mit Netzstrom betreiben
- Entwicklererfahrung verbessern
- Updates zum Morgengrauen
Chrome 114
- JavaScript optimieren
- getCurrentTexture() auf nicht konfiguriertem Canvas wirft InvalidStateError
- Updates zu WGSL
- Updates zum Morgengrauen