Veröffentlicht: 26. Mai 2025
Texturanzeige für die Bindung von „externalTexture“ verwenden
Beim Erstellen einer GPUBindGroup kann jetzt anstelle einer GPUExternalTexture-Bindung eine kompatible GPUTextureView (2D, einzelne Unterressource) verwendet werden.
Dadurch wird die Shaderlogik in Videoeffekt-Pipelines vereinfacht, in denen sowohl GPUExternalTexture (für das Quellvideo) als auch GPUTextureView (für die Zwischenverarbeitung) verarbeitet werden müssen. Außerdem müssen Shader nicht mehr dynamisch kompiliert werden, je nachdem, woher die Textur stammt. Weitere Informationen finden Sie unter Intent to Ship: WebGPU: GPUTextureView for externalTexture binding.
const texture = myDevice.createTexture({
size: [42, 42],
format: navigator.gpu.getPreferredCanvasFormat(),
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
const code = `
@group(0) @binding(0) var texture : texture_external;
@group(0) @binding(1) var<storage, read_write> buffer: vec2u;
@compute @workgroup_size(1) fn main() {
buffer = textureDimensions(texture);
}`;
const pipeline = myDevice.createComputePipeline({
layout: "auto",
compute: { module: myDevice.createShaderModule({ code }) },
});
const bindGroup = myDevice.createBindGroup({
layout: pipeline.getBindGroupLayout(0),
entries: [
{ binding: 0, resource: texture.createView() }, // Use texture view for an externalTexture binding
{ binding: 1, resource: { buffer: myBuffer } },
],
});
Zwischenspeicher werden ohne Angabe von Offset und Größe kopiert
Mit einer neuen Überladung der GPUCommandEncoder-Methode können Entwickler bei Verwendung von copyBufferToBuffer()
Offset- und Größenparameter weglassen, um das Kopieren ganzer Buffers zu vereinfachen. Weitere Informationen finden Sie unter Intent to Ship: WebGPU: copyBufferToBuffer overload.
const size = 42;
const srcBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const dstBuffer = myDevice.createBuffer({
size,
usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});
// Copy entire buffer.
myCommandEncoder.copyBufferToBuffer(srcBuffer, dstBuffer);
// This is the same as the following.
// myCommandEncoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, size);
WGSL workgroupUniformLoad mit Verweis auf atomisch
Für Entwickler wurde in WGSL eine neue workgroupUniformLoad(ptr)
-Überladung hinzugefügt. Der Wert, auf den ptr
verweist, wird atomar geladen und an alle Aufrufe in der Arbeitsgruppe zurückgegeben. Dabei ist ptr
ein Pointer-to-Atomic innerhalb einer Arbeitsgruppenvariablen. Siehe Problem 408241039.
@group(0) @binding(0) var<storage, read_write> buffer : array<u32, 1>;
var<workgroup> wgvar : atomic<u32>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_index) lid: u32) {
if (lid == 0) {
atomicStore(&(wgvar), 42u);
}
buffer[lid] = workgroupUniformLoad(&wgvar);
}
GPUAdapterInfo-Attribut „powerPreference“
Das nicht standardmäßige Stringattribut „powerPreference
GPUAdapterInfo“ ist jetzt verfügbar, wenn der Nutzer die Option „WebGPU-Entwicklerfunktionen“ unter chrome://flags/#enable-webgpu-developer-features
aktiviert hat. Wenn unterstützt, kann der Wert „powerPreference
“ entweder „"low-power"
“ oder „"high-performance"
“ sein, je nachdem, welcher Wert für „GPUPowerPreference“ in GPURequestAdapterOptions verwendet wurde. Siehe CL 6438860.
function checkPowerPreferenceForGpuDevice(device) {
const powerPreference = device.adapterInfo.powerPreference;
if (powerPreference === "high-performance") {
// High-performance GPU detected. Enabling enhanced graphics settings.
} else if (powerPreference === "low-power") {
// Low-power GPU detected. Optimizing for battery life.
}
}
Entfernen des Attributs „compatibilityMode“ von GPURequestAdapterOptions
Das experimentelle Attribut „GPURequestAdapterOptions“ compatibilityMode
wurde zugunsten des standardisierten Attributs featureLevel
entfernt, das in Chrome 133 hinzugefügt wurde. Siehe Problem 366151404.
Dawn-Updates
Entwickler können WebGPU-Projekte in Sprachen wie C++ erstellen und mit webgpu.h sowohl auf WebAssembly als auch auf bestimmte Plattformen abzielen. Die neue Version von Dawn „emdawnwebgpu“ („Emscripten Dawn WebGPU“) implementiert die neueste standardisierte webgpu.h über die Browser-API.
Emdawnwebgpu ist ein (gewarteter) Fork der (jetzt nicht mehr gewarteten) integrierten Bindungen von Emscripten (USE_WEBGPU
). Alle neuen Entwicklungen werden in emdawnwebgpu durchgeführt und die integrierten Bindungen von Emscripten werden entfernt, sobald Entwickler zu emdawnwebgpu wechseln. Der C-Header von Emdawnwebgpu ähnelt dem von Dawn sehr, während die integrierten Bindungen deutlich veraltet sind.
Lade emdawnwebgpu von der GitHub-Release-Seite von Dawn herunter und lies dir die README.md des Pakets durch, um mehr über die Verwendung zu erfahren. Die Quelldateien finden Sie im Dawn-Repository.
Eine vollständige Anleitung finden Sie in der aktualisierten Dokumentation Eine App mit WebGPU erstellen.
Dies sind nur einige der wichtigsten Highlights. Eine vollständige Liste der Commits finden Sie hier.
Das ist neu bei WebGPU
Eine Liste aller Themen, die in der Reihe Was ist neu in WebGPU? behandelt wurden.
Chrome 138
- Kurzform für die Verwendung von „buffer“ als Bindungsressource
- Änderungen an den Größenanforderungen für bei der Erstellung zugeordnete Puffer
- Architekturbericht für aktuelle GPUs
- Einstellung des GPUAdapter-Attributs „isFallbackAdapter“
- Dawn-Updates
Chrome 137
- Texturansicht für die Bindung von „externalTexture“ verwenden
- Buffers kopieren, ohne Offset und Größe anzugeben
- WGSL workgroupUniformLoad using pointer to atomic
- Attribut „powerPreference“ von „GPUAdapterInfo“
- Entfernen des Attributs „compatibilityMode“ von GPURequestAdapterOptions
- Dawn-Updates
Chrome 136
- Attribut „isFallbackAdapter“ von „GPUAdapterInfo“
- Verbesserungen bei der Shader-Kompilierungszeit unter D3D12
- Leinwandbilder speichern und kopieren
- Einschränkungen im Kompatibilitätsmodus für die Analyse der Anzeigenwirkung
- Dawn-Updates
Chrome 135
- Erstellen eines Pipeline-Layouts mit Null-Bindegruppenlayout zulassen
- Viewports dürfen über die Grenzen der Rendering-Ziele hinausragen
- Einfacherer Zugriff auf den experimentellen Kompatibilitätsmodus unter Android
- Entfernen des Limits „maxInterStageShaderComponents“
- Dawn-Updates
Chrome 134
- Arbeitslasten für maschinelles Lernen mit Untergruppen verbessern
- Unterstützung für mit dem „Flüssigfilter“ filterbare Texturtypen als mischbar entfernen
- Dawn-Updates
Chrome 133
- Zusätzliche Vertexformate vom Typ unorm8x4-bgra und 1-Komponente
- Unbekannte Limits mit einem nicht definierten Wert anfordern
- Änderungen an den Regeln für die Ausrichtung von WGSL
- Leistungssteigerungen bei WGSL mit Discard
- VideoFrame-Anzeigegröße für externe Texturen verwenden
- Mit copyExternalImageToTexture Bilder mit nicht standardmäßigen Ausrichtungen verarbeiten
- Entwicklerfreundlichkeit verbessern
- Kompatibilitätsmodus mit „featureLevel“ aktivieren
- Bereinigung experimenteller Funktionen für Untergruppen
- Einstellung des Limits „maxInterStageShaderComponents“
- Dawn-Updates
Chrome 132
- Nutzung der Texturansicht
- 32-Bit-Gleitkommatextur-Mischverfahren
- Attribut „adapterInfo“ von „GPUDevice“
- Bei der Konfiguration des Canvas-Kontexts mit einem ungültigen Format wird ein JavaScript-Fehler geworfen
- Einschränkungen für Filter-Sampler bei Texturen
- Erweiterte Tests mit Untergruppen
- Entwicklerfreundlichkeit verbessern
- Experimentelle Unterstützung für 16-Bit-normalisierte Texturformate
- Dawn-Updates
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
- Dawn-Updates
Chrome 130
- Zusammenführen von zwei Quellen
- Verbesserungen bei der Shader-Kompilierungszeit unter Metal
- Einstellung der GPUAdapter-Methode „requestAdapterInfo()“
- Dawn-Updates
Chrome 129
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
- Dawn-Updates
Chrome 127
- Experimentelle Unterstützung für OpenGL ES auf Android-Geräten
- Attribut „GPUAdapter info“
- Verbesserungen bei der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen beim Befehls-Encoder
- Dawn-Updates
Chrome 126
- Maximale Anzahl von Texture-Array-Ebenen erhöhen
- Optimierung des Pufferuploads für das Vulkan-Backend
- Verbesserte Shader-Kompilierungszeiten
- Eingereichte Befehlspuffere müssen eindeutig sein.
- Dawn-Updates
Chrome 125
Chrome 124
- Lese- und Lese-/Schreibspeichertextur
- Unterstützung für Dienst- und freigegebene Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Dawn-Updates
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
- Dawn-Updates
Chrome 122
- Reichweite mit Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Limit für maxVertexAttributes erhöhen
- Dawn-Updates
Chrome 121
- Unterstützung von WebGPU auf Android
- 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 Farbraum für „GPUExternalTexture“
- Informationen zu Speicherheaps
- Dawn-Updates
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
- Dawn-Updates
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für Lese-/Schreib- und schreibgeschützte Speichertextur
- Dawn-Updates
Chrome 117
- Vertex-Buffer zurücksetzen
- Bindungsgruppe aufheben
- Fehler bei der Erstellung einer asynchronen Pipeline bei verlorenem Gerät ignorieren
- Aktualisierungen beim Erstellen von SPIR-V-Shadermodulen
- Entwicklerfreundlichkeit verbessern
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Dawn-Updates
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
- Dawn-Updates
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
- Dawn-Updates
Chrome 114
- JavaScript optimieren
- Bei nicht konfiguriertem Canvas wird bei getCurrentTexture() ein InvalidStateError geworfen
- WGSL-Updates
- Dawn-Updates