Schreibgeschützte Speichertexturen
Der Speichertexturbindungstyp ermöglicht es Shadern, aus Speichertexturen zu lesen, ohne die TEXTURE_BINDING
-Nutzung hinzuzufügen, und gemischte Lese- und Schreibvorgänge für bestimmte Formate durchzuführen. Wenn die WGSL-Spracherweiterung "readonly_and_readwrite_storage_textures"
in navigator.gpu.wgslLanguageFeatures
vorhanden ist, können Sie beim Erstellen eines Layouts für eine Bindungsgruppe jetzt den GPUStorageTexture
-Zugriff auf "read-write"
oder "read-only"
festlegen. Bisher war dies auf "write-only"
beschränkt.
Anschließend kann Ihr WGSL-Shadercode den Zugriffs-Qualifier 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 die Zugriffe auf Texturspeicher in einer Arbeitsgruppe zu synchronisieren.
Es wird empfohlen, eine requires-Anweisung zu verwenden, um die potenzielle Nicht-Portabilität mit requires readonly_and_readwrite_storage_textures;
am Anfang deines WGSL-Shader-Codes zu signalisieren. Sieh dir 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.
Unterstützung für Service Worker und Shared Worker
Mit WebGPU in Chrome wird der Support für Web-Worker jetzt noch weiterentwickelt. Jetzt werden sowohl Service-Worker als auch gemeinsam genutzte Worker unterstützt. Mit Service Workern können Sie Hintergrundaufgaben und Offlinefunktionen verbessern sowie freigegebene Worker für eine effiziente Ressourcenfreigabe über mehrere Skripts hinweg verwenden. Siehe issue chromium:41494731.
Sehen Sie sich das Beispiel mit der Chrome-Erweiterung und die Chrome-Erweiterung WebLLM an, um zu erfahren, wie Sie WebGPU in einem Erweiterungs-Service-Worker verwenden.
<ph type="x-smartling-placeholder">Neue Attribute für Adapterinformationen
Nicht standardmäßige Attribute für d3dShaderModel
- und vkDriverVersion
-Adapterinformationen sind jetzt beim Aufrufen von requestAdapterInfo()
verfügbar, wenn der Nutzer die WebGPU-Entwicklerfunktionen aktiviert hat Flagge unter chrome://flags/#enable-webgpu-developer-features
. Wenn unterstützt:
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 issue dawn:1254.vkDriverVersion
ist die vom Anbieter angegebene Versionsnummer des Vulkan-Treibers. Weitere Informationen finden Sie in der Dokumentation und im Artikel „chromium:327457605“.
Fehlerkorrekturen
Wenn Sie mit layout: "auto"
zwei Pipelines mit übereinstimmenden Bindungsgruppen erstellen, dann mit der ersten Pipeline eine Bindgroup erstellen und diese in der zweiten Pipeline verwenden, wird jetzt der Fehler GPUValidationError ausgelöst. Dies war ein Implementierungsfehler, der jetzt mit korrekten Tests behoben wurde. Siehe issue dawn:2402.
Updates zur Morgendämmerung
In der Dawn API wird der mit wgpuDeviceSetUncapturedErrorCallback
festgelegte nicht erfasste Fehler-Callback jetzt nach dem Verlust des GPU-Geräts nicht aufgerufen. Durch diese Korrektur wird Dawn an die JavaScript API-Spezifikation und die Blink-Implementierung angeglichen. Siehe issue dawn:2459.
Hier werden nur einige der wichtigsten Vorteile behandelt. Vollständige Liste der Commits
Das ist neu bei WebGPU
Eine Liste aller behandelten Themen der Reihe What's New in WebGPU.
Chrome 128
- Tests mit Untergruppen
- Einstellung der Tiefenverzerrung für Linien und Punkte verwerfen
- Entwicklertools-Warnung für nicht erfassten Fehler ausblenden, wenn „preventDefault“ festgelegt ist
- WGSL-interpolierte Stichprobenerhebung
- Updates zur Morgendämmerung
Chrome 127
- Experimentelle Unterstützung von OpenGL ES unter Android
- GPUAdapter-Infoattribut
- Verbesserungen der WebAssembly-Interoperabilität
- Verbesserte Fehler des Befehls-Encoders
- Updates zur Morgendämmerung
Chrome 126
- Limit für maxTextureArrayLayers erhöhen
- Optimierung des Zwischenspeicheruploads für das Vulkan-Backend
- Schnellere Kompilierungszeiten
- Gesendete Befehlspuffer müssen eindeutig sein
- Updates zur Morgendämmerung
Chrome 125
Chrome 124
- Schreibgeschützte Speichertexturen
- Unterstützung für Service Worker und Shared Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Updates zur Morgendämmerung
Chrome 123
- Unterstützung der integrierten DP4a-Funktionen in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- „Zucker“-Syntax für die Dereferenzierung von zusammengesetzten Daten in WGSL
- Separater schreibgeschützter Status für Schablonen- und Tiefenaspekte
- Updates zur Morgendämmerung
Chrome 122
- Reichweite mit dem Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- maxVertexAttributes-Limit erhöhen
- Updates zur Morgendämmerung
Chrome 121
- Unterstützung von WebGPU unter Android
- DXC anstelle von FXC für die Shader-Kompilierung unter Windows verwenden
- Zeitstempelabfragen in Rechen- und Renderingdurchläufen
- Standardeinstiegspunkte für Shader-Module
- Unterstützung von „display-p3“ als GPUExternalTexture-Farbraum
- Informationen zu Arbeitsspeicher-Heaps
- Updates zur Morgendämmerung
Chrome 120
- Unterstützung von 16-Bit-Gleitkommawerten in WGSL
- Gehe an deine Grenzen
- Änderungen am Status der Tiefenschablonen
- Aktualisierung der Adapterinformationen
- Zeitstempelquantisierung von Abfragen
- Frühjahrsputz
Chrome 119
- Filterbare 32-Bit-Float-Texturen
- unorm10-10-10-2 Vertexformat
- rgb10a2uint-Texturformat
- Updates zur Morgendämmerung
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für nicht schreibgeschützte und schreibgeschützte Speichertexturen
- Updates zur Morgendämmerung
Chrome 117
- Vertex-Zwischenspeicher aufheben
- Bindungsgruppe aufheben
- Fehler bei der asynchronen Pipelineerstellung stummschalten, wenn Gerät verloren geht
- Aktualisierungen beim Erstellen von SPIR-V-Shadermodulen
- Entwicklererfahrung verbessern
- Caching-Pipelines mit automatisch generiertem Layout
- Updates zur Morgendämmerung
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe ruckelfrei, wenn
importExternalTexture()
aufgerufen wird - Konformität mit Spezifikationen
- Entwicklererfahrung verbessern
- Updates zur Morgendämmerung
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Separate GPU standardmäßig im Netzbetrieb nutzen
- Entwicklererfahrung verbessern
- Updates zur Morgendämmerung
Chrome 114
- JavaScript-Code optimieren
- getCurrentTexture() bei nicht konfiguriertem Canvas löst InvalidStateError aus
- Wichtige Informationen von WGSL
- Updates zur Morgendämmerung