Neu in WebGPU (Chrome 115)

François Beaufort
François Beaufort

Unterstützte WGSL-Spracherweiterungen

Im Mitglied wgslLanguageFeatures des Objekts GPU sind die Namen der unterstützten WGSL-Spracherweiterungen aufgeführt. Unterstützte WGSL-Spracherweiterungen werden automatisch aktiviert. Sie müssen sie also nicht explizit anfordern. Diese Liste ist derzeit leer, aber es werden in Zukunft viele hinzukommen (z. B. do-while loops). Weitere Informationen finden Sie unter Problem dawn:1777.

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

Experimentelle Unterstützung für Direct3D 11

Das Chromium-Team arbeitet daran, eine WebGPU-Unterstützung für Direct3D 11 hinzuzufügen. Sie können die Funktion jetzt lokal testen, indem Sie Chrome unter Windows mit den --enable-unsafe-webgpu --use-webgpu-adapter=d3d11-Befehlszeilenoptionen ausführen. Siehe issue dawn:1705.

Getrennte GPU standardmäßig im Netzbetrieb nutzen

Wenn auf macOS-Geräten mit zwei GPUs requestAdapter() ohne Option powerPreference aufgerufen wird, wird die diskrete GPU zurückgegeben, wenn das Gerät des Nutzers an das Stromnetz angeschlossen ist. Andernfalls wird die integrierte GPU zurückgegeben. Weitere Informationen finden Sie unter 4499307 ändern.

Entwicklerfreundlichkeit verbessern

Neue Entwicklertools-Warnungen

Wenn der Schlüssel depth in einem GPUExtend3DDict verwendet wird, wird in der DevTools-Konsole eine Warnung angezeigt, da der richtige Schlüssel depthOrArrayLayers ist. Siehe Problem chromium:1440900.

Eine Warnung wird auch ausgegeben, wenn eine GPUBlendComponent eine Mischung aus expliziten und standardmäßigen Mitgliedern enthält. Siehe Problem dawn:1785.

Auch wenn Übermittlungen und Zeichnungen mit einer Größe von null gültig sind, werden Entwickler mit einer Warnung dazu aufgefordert, sie nach Möglichkeit zu vermeiden. Siehe Problem dawn:1786.

Bessere Fehlermeldungen

Bei der Verwendung einer GPUCommandEncoder wird jetzt eine verbesserte Fehlermeldung angezeigt, wenn finish() bereits aufgerufen wurde. Siehe issue dawn:1736.

Wenn Befehlspuffere mit zerstörten Objekten gesendet werden, sind die Labels der Befehlspuffere, die in submit() verwendet wurden, jetzt in der Fehlermeldung zu sehen. Siehe Problem dawn:1747.

Der ungültige Teil des Tiefenebenen-Status wird jetzt in der Fehlermeldung bei der Validierung von depthStencil angegeben. Siehe Problem dawn:1735.

In der minBindingSize-Validierungsfehlermeldung werden jetzt die Gruppe und die Nummer der Bindung, die die Validierung nicht bestanden hat, sowie der Zwischenspeicher gemeldet. Siehe issue dawn:1604.

Die Fehlermeldungen, die von der Methode mapAsync() für ein GPUBuffer-Objekt zurückgegeben werden, wurden verbessert, um Entwicklern beim Debuggen zu helfen. Unten sehen Sie ein Beispiel. Weitere Informationen finden Sie im Issue chromium:1431622.

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

Labels in macOS-Debuggingtools

Mit der use_user_defined_labels_in_backend-Schaltfläche für die Debug-Funktion können Sie Objektlabels an das Backend weiterleiten, damit sie in platformspezifischen Debugging-Tools wie RenderDoc, PIX oder Instruments angezeigt werden. Ab sofort bietet macOS eine bessere Fehlerbehebung, wenn Sie es für die Fehlerbehebung aktivieren. Siehe Problem dawn:1784

Screenshot der App „Instruments“ unter macOS mit benutzerdefinierten Labels von WebGPU.
Benutzerdefinierte Labels in der App „Instrumente“ unter macOS.

HLSL protokollieren, wenn die Kompilierung fehlschlägt

Mit der dump_shaders-Debug-Schaltfläche können Sie WGSL-Eingabeshader und übersetzte Back-End-Shader protokollieren. Wenn Sie die Option jetzt für das Debugging aktivieren, wird HLSL gedumpt, wenn die Kompilierung fehlschlägt. Siehe Problem dawn:1681

Dawn-Updates

Vertex-Puffer zurücksetzen

Wenn Sie nullptr anstelle von wgpu::Buffer an SetVertexBuffer() auf wgpu::RenderPassEncoder oder wgpu::RenderBundleEncoder übergeben, können Sie einen zuvor festgelegten Vertex-Buffer in einem bestimmten Slot zurücksetzen. Siehe Problem dawn:1675.

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

Vorübergehende Anhänge

Sie können Anhänge erstellen, die es ermöglichen, dass Renderpass-Vorgänge im Tiled-Speicher verbleiben. Dadurch wird VRAM-Traffic vermieden und möglicherweise auch die VRAM-Zuweisung für die Texturen, indem Sie die wgpu::TextureUsage::TransientAttachment-Nutzung festlegen. Diese Funktion wird nur für Metal und Vulkan unterstützt. Siehe Issue Morgen: 1695.

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

Gebäude ohne depot_tools

Mit der neuen CMake-Option DAWN_FETCH_DEPENDENCIES können Sie Dawn-Abhängigkeiten mithilfe eines Python-Skripts abrufen, das DEPS-Dateien liest. Sie müssen nicht mehr depot_tools für alle davon abhängigen Projekte installieren. Siehe Änderung 131750.

Das ist neu bei WebGPU

Eine Liste aller Themen, die in der Reihe Was ist neu in WebGPU? behandelt wurden.

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113