Nur-Lese- und Lese-/Schreib-Speichertextur
Mit diesem Bindungstyp können Shader aus Speichertextur lesen, ohne die TEXTURE_BINDING
-Nutzung hinzuzufügen, und bei bestimmten Formaten gemischte Lese- und Schreibvorgänge ausführen. Wenn die "readonly_and_readwrite_storage_textures"
WGSL-Spracherweiterung in navigator.gpu.wgslLanguageFeatures
vorhanden ist, können Sie beim Erstellen eines Bindungsgruppenlayouts den GPUStorageTexture
-Zugriff jetzt auf "read-write"
oder "read-only"
festlegen. Bisher war dies auf "write-only"
beschränkt.
Anschließend können Sie in Ihrem WGSL-Shadercode den Zugriffsqualifizierer read_write
und read
für Speichertextur verwenden. Die integrierten Funktionen textureLoad()
und textureStore()
verhalten sich entsprechend und es gibt eine neue integrierte Funktion textureBarrier()
, mit der sich Texturspeicherzugriffe in einer Arbeitsgruppe synchronisieren lassen.
Es wird empfohlen, eine Anweisung zum Erforderlichen zu verwenden, um das Potenzial für die Nicht-Portierbarkeit mit requires readonly_and_readwrite_storage_textures;
oben im WGSL-Shadercode anzugeben. Siehe das folgende Beispiel und issue dawn:1972.
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- und Shared Workers
WebGPU in Chrome bietet jetzt sowohl Serviceworker als auch Shared Worker. Sie können Dienst-Worker verwenden, um Hintergrundaufgaben und Offlinefunktionen zu verbessern, und freigegebene Worker für eine effiziente Ressourcenfreigabe zwischen Scripts. Siehe Problem chromium:41494731.
Im Beispiel für eine Chrome-Erweiterung und in der Chrome-Erweiterung WebLLM erfahren Sie, wie Sie WebGPU in einem Erweiterungs-Dienstworker verwenden.
Neue Attribute für Adapterinformationen
Nicht standardmäßige d3dShaderModel
- und vkDriverVersion
-Adapter-Informationsattribute sind jetzt beim Aufruf von requestAdapterInfo()
verfügbar, wenn der Nutzer das Flag „WebGPU-Entwicklerfunktionen“ unter chrome://flags/#enable-webgpu-developer-features
aktiviert hat. Wenn unterstützt:
d3dShaderModel
ist die maximal unterstützte D3D-Shadermodellnummer. Der Wert 62 gibt beispielsweise an, dass der aktuelle Treiber HLSL SM 6.2 unterstützt. Weitere Informationen finden Sie in der Dokumentation und im Problembericht dawn:1254.vkDriverVersion
ist die vom Anbieter angegebene Versionsnummer des Vulkan-Treibers. Weitere Informationen finden Sie in der Dokumentation und im Problem chromium:327457605.
Fehlerkorrekturen
Wenn Sie mit layout: "auto"
zwei Pipelines mit übereinstimmenden Bindgruppen erstellen, dann eine Bindgruppe mit der ersten Pipeline erstellen und diese für die zweite Pipeline verwenden, wird jetzt eine GPUValidationError ausgegeben. Das war ein Implementierungsfehler, der jetzt durch entsprechende Tests behoben wurde. Siehe Problem dawn:2402.
Dawn-Updates
In der Dawn API wird der mit wgpuDeviceSetUncapturedErrorCallback
festgelegte Rückruf für nicht erfasste Fehler jetzt nicht mehr aufgerufen, nachdem das GPU-Gerät verloren gegangen ist. Durch diese Korrektur wird Dawn an die JavaScript API-Spezifikation und die Blink-Implementierung angepasst. Siehe Problem dawn:2459.
Dies sind nur einige der wichtigsten Highlights. Eine vollständige Liste der Commits
Das ist neu bei WebGPU
Eine Liste aller Themen, die in der Reihe Was ist neu in WebGPU behandelt wurden.
Chrome 131
- Entfernungen in WGSL zuschneiden
- GPUCanvasContext getConfiguration()
- Punkt- und Linienprimitive dürfen keine Tiefenverzerrung haben.
- Integrierte Funktionen für inklusiven Scan für Untergruppen
- Experimentelle Unterstützung für indirekte Multi-Draw-Anweisungen
- Shader-Modul-Kompilierungsoption „strict math“
- GPUAdapter-Methode „requestAdapterInfo()“ entfernen
- Updates zu Dawn
Chrome 130
- Zusammenführen von zwei Quellen
- Verbesserte Shader-Kompilierungszeiten unter Metal
- Einstellung der GPUAdapter-Methode „requestAdapterInfo()“
- Updates zu Dawn
Chrome 129
- HDR-Unterstützung mit Canvas-Tone-Mapping-Modus
- Erweiterter Support für Untergruppen
- Updates zu Dawn
Chrome 128
- Mit Untergruppen experimentieren
- Einstellung der Tiefenverzerrung für Linien und Punkte wird eingestellt
- Nicht erfasste Fehlerwarnung in den Entwicklertools bei preventDefault ausblenden
- WGSL interpoliert zuerst die Stichprobe und
- Updates zu Dawn
Chrome 127
- Experimentelle Unterstützung für OpenGL ES auf Android-Geräten
- Attribut „info“ von „GPUAdapter“
- Verbesserungen bei der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen beim Befehls-Encoder
- Updates zu Dawn
Chrome 126
- Limit für „maxTextureArrayLayers“ erhöht
- Optimierung des Pufferuploads für das Vulkan-Backend
- Verbesserte Shader-Kompilierungszeiten
- Eingereichte Befehlspuffere müssen eindeutig sein.
- Updates zu Dawn
Chrome 125
Chrome 124
- Lese- und Lese-/Schreibspeichertextur
- Unterstützung für Dienst- und freigegebene Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Updates zu Dawn
Chrome 123
- Unterstützung für integrierte DP4a-Funktionen in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- Syntax-Optimierung für die Dereferenzierung von Kompositen in WGSL
- Separater schreibgeschützter Status für Stencil- und Tiefenansichten
- Updates zu Dawn
Chrome 122
- Reichweite mit Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Limit für maxVertexAttributes erhöhen
- Updates zu Dawn
Chrome 121
- Unterstützung von WebGPU auf Android-Geräten
- DXC anstelle von FXC für die Shaderkompilierung unter Windows verwenden
- Zeitstempelabfragen in Compute- und Rendering-Passes
- Standardeinstiegspunkte in Shadermodule
- Unterstützung von display-p3 als GPUExternalTexture-Farbraum
- Informationen zu Speicherheaps
- Updates zu Dawn
Chrome 120
- Unterstützung von 16‑Bit-Gleitkommawerten in WGSL
- Grenzen überschreiten
- Änderungen am Tiefen-/Schatten-Status
- Aktualisierte Informationen zu Adaptern
- Quantisierung von Zeitstempelabfragen
- Funktionen für den Frühjahrsputz
Chrome 119
- Filterbare 32-Bit-Gleitkommatextur
- unorm10-10-10-2-Vertex-Format
- rgb10a2uint-Texturformat
- Updates zu Dawn
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für Lese-/Schreib- und schreibgeschützte Speichertextur
- Updates zu Dawn
Chrome 117
- Vertex-Buffer zurücksetzen
- Bindungsgruppe aufheben
- Fehler bei der Erstellung einer asynchronen Pipeline bei verlorenem Gerät ignorieren
- Änderungen beim Erstellen von SPIR-V-Shadermodulen
- Entwicklerfreundlichkeit verbessern
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Updates zu Dawn
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe bei Aufruf von
importExternalTexture()
flüssig halten - Einhaltung der Spezifikation
- Entwicklerfreundlichkeit verbessern
- Updates zu Dawn
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Unterstützung für diskrete GPU standardmäßig bei Wechselstromversorgung
- Entwicklerfreundlichkeit verbessern
- Updates zu Dawn
Chrome 114
- JavaScript optimieren
- Bei nicht konfiguriertem Canvas wird bei getCurrentTexture() ein InvalidStateError geworfen
- WGSL-Updates
- Updates zu Dawn