Veröffentlicht: 26. Mai 2025
Texturansicht für die Bindung von „externalTexture“ verwenden
Eine kompatible GPUTextureView (2D, einzelne Unterressource) kann jetzt anstelle einer GPUExternalTexture-Bindung verwendet werden, wenn eine GPUBindGroup erstellt wird.
Dadurch wird die Shader-Logik in Videobearbeitungspipelines vereinfacht, in denen sowohl GPUExternalTexture (für Quellvideo) als auch GPUTextureView (für die Zwischenverarbeitung) verarbeitet werden müssen. Außerdem ist es nicht mehr erforderlich, Shader dynamisch zu kompilieren, 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 } },
],
});
Puffer ohne Angabe von Offsets und Größe kopieren
Mit einer neuen Überladung der GPUCommandEncoder-Methode können Entwickler Offsets und Größenparameter weglassen, wenn sie copyBufferToBuffer() verwenden, um das Kopieren ganzer Puffer 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 Zeiger auf „atomic“
Für Entwickler wurde eine neue workgroupUniformLoad(ptr)-Überladung in WGSL hinzugefügt. Sie lädt den Wert, auf den ptr verweist, atomar und gibt ihn an alle Aufrufe in der Arbeitsgruppe zurück. Dabei ist ptr ein Zeiger auf „atomic“ innerhalb einer Arbeitsgruppenvariablen. Weitere Informationen finden Sie unter 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);
}
Attribut „powerPreference“ von GPUAdapterInfo
Das nicht standardmäßige String-Attribut powerPreference von GPUAdapterInfo ist jetzt verfügbar, wenn der Nutzer das Flag „WebGPU Developer Features“ unter chrome://flags/#enable-webgpu-developer-features aktiviert hat. Wenn es unterstützt wird, kann der powerPreference Wert entweder "low-power" oder "high-performance" sein, je nachdem, welcher GPUPowerPreference-Wert in GPURequestAdapterOptions verwendet wurde. Weitere Informationen finden Sie unter 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.
}
}
Attribut „compatibilityMode“ von GPURequestAdapterOptions entfernen
Das experimentelle Attribut GPURequestAdapterOptions compatibilityMode wurde zugunsten des standardisierten Attributs featureLevel entfernt, das in Chrome 133 hinzugefügt wurde. Weitere Informationen finden Sie unter Problem 366151404.
Dawn-Updates
Entwickler können WebGPU-Projekte in Sprachen wie C++ erstellen und mit webgpu.h sowohl WebAssembly als auch bestimmte Plattformen ansprechen. Die neu veröffentlichte Version „emdawnwebgpu“ („Emscripten Dawn WebGPU“) von Dawn implementiert die neueste standardisierte Version von webgpu.h über die Browser-API.
Emdawnwebgpu ist ein (gewarteter) Fork der (nicht mehr gewarteten) integrierten Bindungen von Emscripten (USE_WEBGPU). Alle neuen Entwicklungen werden in emdawnwebgpu vorgenommen. Die integrierten Bindungen von Emscripten werden entfernt, wenn Entwickler zu emdawnwebgpu wechseln. Der C-Header von emdawnwebgpu ähnelt dem von Dawn sehr, während die integrierten Bindungen deutlich veraltet sind.
Laden Sie emdawnwebgpu von der GitHub-Releases-Seite von Dawn herunter und lesen Sie die README.md-Datei des Pakets, um Informationen zur Verwendung zu erhalten. Die Quelldateien finden Sie im Dawn-Repository.
Eine vollständige Anleitung finden Sie in der aktualisierten Dokumentation App mit WebGPU erstellen.
Hier werden nur einige der wichtigsten Neuerungen behandelt. Eine vollständige Liste der Commits finden Sie hier.
Neuerungen in WebGPU
Eine Liste aller Themen, die in der Reihe „Neuerungen in WebGPU“ behandelt wurden.
Chrome 147–148
Chrome 146
- Unterstützung des WebGPU-Kompatibilitätsmodus unter OpenGL ES 3.1
- Temporäre Anhänge
- WGSL-Erweiterung „texture_and_sampler_let“
- Dawn-Updates
Chrome 145
- WGSL-Erweiterung „subgroup_uniformity“
- Experimentelle synchrone Pufferzuordnung in Workern
- Dawn-Updates
Chrome 144
- WGSL-Erweiterung „subgroup_id“
- WGSL-Erweiterung „uniform_buffer_standard_layout“
- WebGPU unter Linux
- Schnellere writeBuffer- und writeTexture-Funktionen
- Dawn-Updates
Chrome 143
- Texturkomponenten-Swizzle
- Entfernung der schreibgeschützten Speichertexturverwendung von bgra8unorm
- Dawn-Updates
Chrome 142
Chrome 141
- Tint IR abgeschlossen
- Analyse des Ganzzahlbereichs im WGSL-Compiler
- SPIR-V 1.4-Update für das Vulkan-Backend
- Dawn-Updates
Chrome 140
- Geräteanfragen verbrauchen Adapter
- Kurzform für die Verwendung von Texturen, wenn eine Texturansicht verwendet wird
- WGSL textureSampleLevel unterstützt 1D-Texturen
- Einstellung der schreibgeschützten Speichertexturverwendung von bgra8unorm
- Entfernung des GPUAdapter-Attributs „isFallbackAdapter“
- Dawn-Updates
Chrome 139
- Unterstützung von 3D-Texturen für komprimierte BC- und ASTC-Formate
- Neue Funktion „core-features-and-limits“
- Ursprungstest für den WebGPU-Kompatibilitätsmodus
- Dawn-Updates
Chrome 138
- Kurzform für die Verwendung von Puffern als Bindungsressource
- Änderungen der Größenanforderungen für Puffer, die bei der Erstellung zugeordnet werden
- Architekturbericht für aktuelle GPUs
- Einstellung des GPUAdapter-Attributs „isFallbackAdapter“
- Dawn-Updates
Chrome 137
- Texturansicht für die Bindung von „externalTexture“ verwenden
- Puffer ohne Angabe von Offsets und Größe kopieren
- WGSL workgroupUniformLoad mit Zeiger auf „atomic“
- Attribut „powerPreference“ von GPUAdapterInfo
- Attribut „compatibilityMode“ von GPURequestAdapterOptions entfernen
- Dawn-Updates
Chrome 136
- Attribut „isFallbackAdapter“ von GPUAdapterInfo
- Verbesserungen der Shader-Kompilierungszeit unter D3D12
- Canvas-Bilder speichern und kopieren
- Einschränkungen des Kompatibilitätsmodus aufheben
- Dawn-Updates
Chrome 135
- Erstellung von Pipeline-Layouts mit Null-Bindungsgruppen-Layout zulassen
- Ansichtsfenster können über die Grenzen der Renderziele hinausgehen
- Einfacherer Zugriff auf den experimentellen Kompatibilitätsmodus unter Android
- Entfernung des Limits „maxInterStageShaderComponents“
- Dawn-Updates
Chrome 134
- Verbesserung von Arbeitslasten für maschinelles Lernen mit Untergruppen
- Entfernung der Unterstützung für filterbare Texturtypen vom Typ „float“ als mischbar
- Dawn-Updates
Chrome 133
- Zusätzliche unorm8x4-bgra- und 1-Komponenten-Vertex-Formate
- Anforderung unbekannter Limits mit undefiniertem Wert zulassen
- Änderungen der WGSL-Ausrichtungsregeln
- WGSL-Leistungssteigerungen mit „discard“
- Verwendung von „displaySize“ von VideoFrame für externe Texturen
- Verarbeitung von Bildern mit nicht standardmäßigen Ausrichtungen mit „copyExternalImageToTexture“
- Verbesserung der Entwicklerfreundlichkeit
- Aktivierung des Kompatibilitätsmodus mit „featureLevel“
- Bereinigung experimenteller Untergruppenfunktionen
- Einstellung des Limits „maxInterStageShaderComponents“
- Dawn-Updates
Chrome 132
- Verwendung von Texturansichten
- Mischen von 32-Bit-Gleitkommatexturen
- Attribut „adapterInfo“ von GPUDevice
- Konfiguration des Canvas-Kontexts mit ungültigem Format löst JavaScript-Fehler aus
- Einschränkungen für Filter-Sampler für Texturen
- Erweiterte Experimente mit Untergruppen
- Verbesserung der Entwicklerfreundlichkeit
- Experimentelle Unterstützung für normalisierte 16-Bit-Texturformate
- Dawn-Updates
Chrome 131
- Entfernungen in WGSL begrenzen
- GPUCanvasContext.getConfiguration()
- Punkt- und Linienprimitive dürfen keine Tiefenverzerrung haben
- Inklusive Scan-Funktionen für Untergruppen
- Experimentelle Unterstützung für „multi-draw indirect“
- Option „strict math“ für die Kompilierung von Shader-Modulen
- Entfernung von GPUAdapter.requestAdapterInfo()
- Dawn-Updates
Chrome 130
- Mischen mit zwei Quellen
- Verbesserungen der Shader-Kompilierungszeit unter Metal
- Einstellung von GPUAdapter.requestAdapterInfo()
- Dawn-Updates
Chrome 129
- HDR-Unterstützung mit dem Canvas-Tone Mapping-Modus
- Erweiterte Unterstützung für Untergruppen
- Dawn-Updates
Chrome 128
- Experimente mit Untergruppen
- Einstellung der Tiefenverzerrung für Linien und Punkte
- Ausblenden der Entwicklertools-Warnung für nicht erfasste Fehler, wenn „preventDefault“ verwendet wird
- WGSL-Interpolation zuerst und dann Sampling
- Dawn-Updates
Chrome 127
- Experimentelle Unterstützung für OpenGL ES unter Android
- Attribut „info“ von GPUAdapter
- Verbesserungen der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen für Befehlscodierer
- Dawn-Updates
Chrome 126
- Erhöhung des Limits „maxTextureArrayLayers“
- Optimierung des Puffer-Uploads für das Vulkan-Backend
- Verbesserungen der Shader-Kompilierungszeit
- Übermittelte Befehlspuffer müssen eindeutig sein
- Dawn-Updates
Chrome 125
Chrome 124
- Schreibgeschützte und Lese-/Schreib-Speichertexturen
- Unterstützung für Service Worker und Shared 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-Zucker für die Dereferenzierung von Composites in WGSL
- Separater schreibgeschützter Status für Schablonen- und Tiefenaspekte
- Dawn-Updates
Chrome 122
- Reichweite mit Kompatibilitätsmodus erweitern (Funktion in Entwicklung)
- Erhöhung des Limits „maxVertexAttributes“
- Dawn-Updates
Chrome 121
- Unterstützung von WebGPU unter Android
- Verwendung von DXC anstelle von FXC für die Shader-Kompilierung unter Windows
- Zeitstempelabfragen in Compute- und Render-Passes
- Standardmäßige Einstiegspunkte für Shader-Module
- Unterstützung von „display-p3“ als GPUExternalTexture-Farbraum
- Informationen zu Arbeitsspeicher-Heaps
- Dawn-Updates
Chrome 120
- Unterstützung für 16-Bit-Gleitkommawerte in WGSL
- Limits erweitern
- Änderungen am Tiefen- und Schablonenzustand
- Updates zu Adapterinformationen
- Quantisierung von Zeitstempelabfragen
- Bereinigung von Funktionen
Chrome 119
- Filterbare 32-Bit-Gleitkommatexturen
- Vertex-Format „unorm10-10-10-2“
- Texturformat „rgb10a2uint“
- Dawn-Updates
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture() - Experimentelle Unterstützung für Lese-/Schreib- und schreibgeschützte Speichertexturen
- Dawn-Updates
Chrome 117
- Vertex-Puffer aufheben
- Bindungsgruppe aufheben
- Fehler bei der asynchronen Pipeline-Erstellung unterdrücken, wenn das Gerät verloren geht
- Updates für die Erstellung von SPIR-V-Shader-Modulen
- Verbesserung der Entwicklerfreundlichkeit
- Caching von Pipelines mit automatisch generiertem Layout
- Dawn-Updates
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter zurückgegeben wird
requestDevice() - Reibungslose Videowiedergabe, wenn
importExternalTexture()aufgerufen wird - Spezifikationskonformität
- Verbesserung der Entwicklerfreundlichkeit
- Dawn-Updates
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Standardmäßig diskrete GPU bei Netzstrom
- Verbesserung der Entwicklerfreundlichkeit
- Dawn-Updates
Chrome 114
- JavaScript optimieren
- getCurrentTexture() für nicht konfigurierte Canvas-Elemente löst InvalidStateError aus
- WGSL-Updates
- Dawn-Updates