Neu in WebGPU (Chrome 115)

François Beaufort
François Beaufort

Unterstützte WGSL-Spracherweiterungen

Das wgslLanguageFeatures-Element des GPU-Objekts enthält die Namen der unterstützten WGSL-Spracherweiterungen. Unterstützte WGSL-Spracherweiterungen werden automatisch aktiviert. Sie müssen also keine explizite Anfrage stellen. Diese Liste ist derzeit leer, aber in Zukunft werden viele Einträge erwartet (z. B. do-while loops). Weitere Informationen finden Sie unter issue 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, 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-Befehlszeilen-Flags ausführen. Siehe Problem dawn:1705.

Standardmäßig diskrete GPU bei Netzstrom verwenden

Wenn auf macOS-Geräten mit zwei GPUs requestAdapter() ohne die Option powerPreference aufgerufen wird, wird die diskrete GPU zurückgegeben, wenn das Gerät des Nutzers an eine Stromquelle angeschlossen ist. Andernfalls wird die integrierte GPU zurückgegeben. Siehe Änderung 4499307.

Entwicklererfahrung verbessern

Neue Entwicklertools-Warnungen

Wenn der Schlüssel depth in einem GPUExtend3DDict verwendet wird, wird in der Entwicklertools-Konsole eine Warnung angezeigt, da der richtige Schlüssel depthOrArrayLayers ist. Weitere Informationen finden Sie unter chromium:1440900.

Eine Warnung wird auch ausgegeben, wenn eine GPUBlendComponent sowohl explizite als auch Standardmitglieder enthält. Siehe Problem dawn:1785.

Auch wenn das Senden und Zeichnen mit der Größe 0 gültig ist, werden Entwickler durch eine Warnung dazu aufgefordert, sie nach Möglichkeit zu vermeiden. Weitere Informationen

Bessere Fehlermeldungen

Wenn Sie GPUCommandEncoder verwenden, nachdem finish() bereits aufgerufen wurde, wird jetzt eine verbesserte Fehlermeldung angezeigt. Siehe Problem dawn:1736.

Beim Einreichen von Befehlspuffern mit zerstörten Objekten sind die Labels der Befehlspuffer, die in submit() verwendet wurden, jetzt in der Fehlermeldung sichtbar. Siehe Problem dawn:1747.

Der ungültige Teil des Tiefen-/Stencil-Zustands wird jetzt in der Fehlermeldung angegeben, wenn depthStencil validiert wird. Siehe Problem dawn:1735.

In der Fehlermeldung für den Validierungsfehler minBindingSize werden jetzt die Gruppe und die Nummer der Bindung, die die Validierung nicht bestanden hat, sowie der Puffer angegeben. Siehe Problem dawn:1604.

Die von der Methode mapAsync() für ein GPUBuffer-Objekt zurückgegebenen Fehlermeldungen wurden verbessert, um Entwicklern beim Debuggen zu helfen. Ein Beispiel finden Sie unten.

// 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-Debugging-Tools

Mit dem use_user_defined_labels_in_backend-Schalter für die Fehlerbehebung können Sie Objektlabels an das Backend weiterleiten, damit sie in plattformspezifischen Debugging-Tools wie RenderDoc, PIX oder Instruments angezeigt werden. Wenn Sie ihn für die Fehlerbehebung aktivieren, wird jetzt eine bessere Fehlerbehebung auf macOS ermöglicht. Weitere Informationen finden Sie unter issue dawn:1784.

Screenshot der Instruments-App unter macOS mit benutzerdefinierten Labels aus WebGPU.
Benutzerdefinierte Labels in der Instruments App unter macOS.

HLSL protokollieren, wenn die Kompilierung fehlschlägt

Mit dem dump_shaders-Schalter für das Debugging können Sie Eingabe-WGSL-Shader und übersetzte Back-End-Shader protokollieren. Wenn Sie die Option ab sofort für das Debugging aktivieren, wird der HLSL-Code ausgegeben, wenn die Kompilierung fehlschlägt. Weitere Informationen finden Sie unter Problem dawn:1681.

Dawn-Updates

Vertex-Puffer entfernen

Wenn Sie nullptr anstelle von wgpu::Buffer an SetVertexBuffer() auf wgpu::RenderPassEncoder oder wgpu::RenderBundleEncoder übergeben, können Sie einen zuvor festgelegten Vertex-Puffer in einem bestimmten Slot aufheben. 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, mit denen Renderpass-Vorgänge im Kachelspeicher bleiben. So wird VRAM-Traffic vermieden und möglicherweise auch die VRAM-Zuweisung für die Texturen, wenn Sie die wgpu::TextureUsage::TransientAttachment-Nutzung festlegen. Diese Funktion wird nur für Metal und Vulkan unterstützt. Weitere Informationen finden Sie unter issue dawn: 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.

Erstellen ohne depot_tools

Mit einer neuen DAWN_FETCH_DEPENDENCIES-CMake-Option können Sie Dawn-Abhängigkeiten mithilfe eines Python-Skripts abrufen, das DEPS-Dateien liest. So ist es nicht mehr erforderlich, dass alle Projekte, die von Dawn abhängen, depot_tools installieren. Siehe Änderung 131750.

Neuigkeiten zu WebGPU

Eine Liste aller Themen, die in der Reihe What's New in WebGPU behandelt wurden.

Chrome 149–150

Chrome 147–148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

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