Schreibgeschützte und nicht schreibgeschützte Speichertexturen
Mit dem Bindungstyp der Speichertextur können Shader Daten aus Speichertexturen lesen, ohne die TEXTURE_BINDING
-Nutzung hinzuzufügen, und gemischte Lese- und Schreibvorgänge bei bestimmten Formaten ausführen. Wenn die WGSL-Spracherweiterung "readonly_and_readwrite_storage_textures"
in navigator.gpu.wgslLanguageFeatures
vorhanden ist, können Sie beim Erstellen eines Bindegruppenlayouts jetzt den GPUStorageTexture
-Zugriff auf "read-write"
oder "read-only"
festlegen. Bisher war dies auf "write-only"
beschränkt.
Anschließend kann der WGSL-Shader-Code den Zugriffsqualifizierer read_write
und read
für Speichertexturen verwenden. Die integrierten Funktionen textureLoad()
und textureStore()
verhalten sich entsprechend und eine neue integrierte textureBarrier()
-Funktion ist verfügbar, um Zugriffe auf Texturspeicher in einer Arbeitsgruppe zu synchronisieren.
Es empfiehlt sich, eine requires-Anweisung zu verwenden, um das Potenzial für Nichtportabilität mit requires readonly_and_readwrite_storage_textures;
am Anfang des WGSL-Shader-Codes zu signalisieren. Sehen Sie sich das folgende Beispiel und issue dawn:1972 an.
if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
throw new Error("Read-only and read-write storage textures are not available");
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const bindGroupLayout = device.createBindGroupLayout({
entries: [{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
storageTexture: {
access: "read-write", // <-- New!
format: "r32uint",
},
}],
});
const shaderModule = device.createShaderModule({ code: `
requires readonly_and_readwrite_storage_textures;
@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.
Support für Service Worker und Shared Worker
WebGPU in Chrome bietet Support für Web Worker auf einer ganz neuen Ebene, sodass sowohl Service Worker als auch gemeinsam genutzte Worker unterstützt werden. Mit Service Workern können Sie Hintergrundaufgaben und Offlinefunktionen optimieren. Mit gemeinsam genutzten Workern lassen sich Ressourcen effizient skriptübergreifend freigeben. Siehe Problem „chromium:41494731“.
Sehen Sie sich das Beispiel für die Chrome-Erweiterung und die WebLLM-Chrome-Erweiterung an, um zu erfahren, wie Sie WebGPU in einem Erweiterungsdienst-Worker verwenden.
Neue Attribute für Adapterinformationen
Nicht standardmäßige d3dShaderModel
- und vkDriverVersion
-Adapterinformationsattribute sind jetzt beim Aufrufen von requestAdapterInfo()
verfügbar, wenn der Nutzer die Flag „WebGPU Developer Features“ bei chrome://flags/#enable-webgpu-developer-features
aktiviert hat. Bei Unterstützung:
d3dShaderModel
ist die maximal unterstützte D3D-Shader-Modellnummer. Der Wert 62 gibt beispielsweise an, dass der aktuelle Treiber HLSL SM 6.2 unterstützt. Weitere Informationen finden Sie in der Dokumentation und unter Problem dawn:1254.Die
vkDriverVersion
ist die vom Anbieter angegebene Versionsnummer des Vulkan-Treibers. Weitere Informationen finden Sie in der Dokumentation und unter Problem „chromium:327457605“.
Fehlerkorrekturen
Wenn Sie mit layout: "auto"
zwei Pipelines mit übereinstimmenden Bindegruppen erstellen, mit der ersten Pipeline eine Bindungsgruppe erstellen und diese in der zweiten Pipeline verwenden, wird jetzt ein GPUValidationError ausgelöst. Das Zulassen war ein Implementierungsfehler, der jetzt mit korrekten Tests behoben wurde. Weitere Informationen finden Sie unter Problem dawn:2402.
Updates zum Morgengrauen
In der Dawn API wird der nicht erfasste Fehler-Callback, der mit wgpuDeviceSetUncapturedErrorCallback
festgelegt ist, jetzt nicht mehr aufgerufen, nachdem das GPU-Gerät verloren gegangen ist. Durch diese Korrektur stimmt Dawn mit der JavaScript API-Spezifikation und der Blink-Implementierung überein. Weitere Informationen finden Sie unter Problem dawn:2459.
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