Neu in WebGPU (Chrome 115)

François Beaufort
François Beaufort

Unterstützte WGSL-Spracherweiterungen

Das Mitglied wgslLanguageFeatures des Objekts GPU enthält die Namen der unterstützten WGSL-Spracherweiterungen. Unterstützte WGSL-Spracherweiterungen werden automatisch aktiviert und müssen daher nicht extra angefordert werden. Diese Liste ist derzeit leer, aber Sie werden in Zukunft viele davon erwarten (z. B. do-while loops). Siehe 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, eine WebGPU-Unterstützung für Direct3D 11 hinzuzufügen. Sie können jetzt lokal damit experimentieren. Führen Sie dazu Chrome unter Windows mit den Befehlszeilen-Flags --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 aus. Siehe issue dawn:1705.

Getrennte GPU standardmäßig im Netzbetrieb nutzen

Wenn requestAdapter() auf macOS-Geräten mit Dual-GPU ohne die 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.

Entwicklererfahrung verbessern

Neue Entwicklertools-Warnungen

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

Es wird auch eine Warnung ausgegeben, wenn eine GPUBlendComponent sowohl explizite als auch standardmäßige Mitglieder enthält. Siehe issue dawn:1785.

Auch wenn Weiterleitungen und Zeichnungen mit Nullgröße gültig sind, werden Entwickler durch eine Warnung aufgefordert, solche Aktionen nach Möglichkeit zu vermeiden. Siehe issue dawn:1786.

Bessere Fehlermeldungen

Eine verbesserte Fehlermeldung wird angezeigt, wenn ein GPUCommandEncoder verwendet wird, wenn finish() bereits aufgerufen wurde. Siehe issue dawn:1736.

Beim Senden von Befehlspuffern mit gelöschten Objekten werden die Labels der Befehlspuffer, die in submit() verwendet wurden, jetzt in der Fehlermeldung angezeigt. Siehe issue dawn:1747.

Der ungültige Teil des Tiefenschablonstatus wird jetzt bei der Validierung von depthStencil in der Fehlermeldung angegeben. Siehe issue 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 von der Methode mapAsync() für ein GPUBuffer-Objekt zurückgegebenen Fehlermeldungen wurden verbessert, um Entwicklern bei der Fehlerbehebung zu helfen. Unten sehen Sie ein Beispiel und das Problem 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 Ein/Aus-Schaltfläche für die Fehlerbehebung von use_user_defined_labels_in_backend können Sie Objektlabels an das Back-End weiterleiten, damit sie in plattformspezifischen Debugging-Tools wie RenderDoc, PIX oder Instruments sichtbar sind. Ab sofort bietet macOS eine bessere Fehlerbehebung, wenn Sie es für die Fehlerbehebung aktivieren. Siehe issue dawn:1784

<ph type="x-smartling-placeholder">
</ph> Screenshot der App „Instruments“ unter macOS mit benutzerdefinierten Labels von WebGPU. <ph type="x-smartling-placeholder">
</ph> Benutzerdefinierte Labels in der App „Instrumente“ unter macOS.

HLSL protokollieren, wenn die Kompilierung fehlschlägt

Mit der Ein/Aus-Schaltfläche für die Fehlerbehebung von dump_shaders können Sie WGSL-Eingabe-Shader und übersetzte Back-End-Shader protokollieren. Wenn Sie ihn für das Debuggen aktivieren, wird die HLSL ab sofort ausgegeben, wenn die Kompilierung fehlschlägt. Siehe issue dawn:1681

Updates zur Morgendämmerung

Vertex-Zwischenspeicher aufheben

Wenn Sie nullptr anstelle eines wgpu::Buffer an SetVertexBuffer() auf wgpu::RenderPassEncoder oder wgpu::RenderBundleEncoder übergeben, können Sie einen zuvor festgelegten Vertex-Zwischenspeicher in einem bestimmten Slot aufheben. Siehe issue 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 Renderingpassvorgängen im Kachelspeicher ermöglichen, um VRAM-Datenverkehr zu vermeiden und möglicherweise die VRAM-Zuweisung für die Texturen zu vermeiden, 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 erstellt

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 behandelten Themen der Reihe What's New in WebGPU.

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