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-Befehlszeilenflags 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 Wechselstromquelle angeschlossen ist. Andernfalls wird die integrierte GPU zurückgegeben. Änderung 4499307

Entwicklererfahrung verbessern

Neue Warnungen in den Entwicklertools

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. 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 Dispatches und Draws mit der Größe 0 gültig sind, werden Entwickler durch eine Warnung dazu aufgefordert, sie nach Möglichkeit zu vermeiden. Siehe Problem dawn:1786.

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. Weitere Informationen finden Sie unter 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 das Debugging können Sie Objektlabels an das Backend weiterleiten, damit sie in plattformspezifischen Debugging-Tools wie RenderDoc, PIX oder Instruments angezeigt werden. Ab sofort ist das Debugging unter macOS einfacher, wenn Sie es für das Debugging aktivieren. Siehe Problem dawn:1784.

Screenshot der Instruments-App unter macOS mit benutzerdefinierten Labels aus WebGPU.
Nutzerdefinierte 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 nicht festgelegt

Wenn Sie nullptr anstelle von wgpu::Buffer an SetVertexBuffer() für 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 Render-Pass-Vorgänge im Kachelspeicher verbleiben können. 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. Siehe Problem 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.

Neues zu WebGPU

Eine Liste mit allen Themen, die in der Reihe Neu in WebGPU behandelt wurden.

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