Wat is er nieuw in WebGPU (Chrome 126)

François Beaufort
François Beaufort

Verhoog de maxTextureArrayLayers-limiet

De maximaal toegestane waarde voor de diepte of het aantal lagen van een 2D-textuur is standaard 256. Het is nu mogelijk om maximaal 2048 aan te vragen met behulp van de maxTextureArrayLayers- limiet, indien ondersteund. Zie het volgende voorbeeld en nummer 42241514 .

const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxTextureArrayLayers < 30) {
  // When the desired limit isn't supported, take action to either fall back to
  // a code path that does not require the higher limit or notify the user that
  // their device does not meet minimum requirements.
}

// Request highest limit of max texture array layers attributes.
const device = await adapter.requestDevice({
  requiredLimits: { maxTextureArrayLayers: 2048 }
});

Bufferuploadoptimalisatie voor Vulkan-backend

Er is nu een snel pad beschikbaar bij het aanroepen van de writeBuffer() -methode van de GPUQueue voor Vulkan-backend. De gegevens kunnen nu rechtstreeks naar de bestemmingsbuffer worden geschreven, waardoor een extra kopie en synchronisatie niet meer nodig is. Deze optimalisatie vermindert het geheugenverkeer dat nodig is om gegevens naar de GPU te uploaden.

De snelle padoptimalisatie vereist dat het geheugen van de buffer zichtbaar is voor de host en dat er geen GPU-bewerkingen in behandeling zijn. Zie uitgave 42242084 .

Verbeteringen in de compilatietijd van Shader

Het Chrome-team verbetert de efficiëntie van Tint , de compiler van de WebGPU-shadertaal. Tint wijzigt momenteel de abstracte syntaxisboom (AST) van de shadercode meerdere keren voordat machinecode wordt gegenereerd, een proces dat op sommige platforms veel hulpbronnen vergt. Om dit te optimaliseren wordt een nieuwe tussenweergave (IR) geïntroduceerd, samen met opnieuw ontworpen backends die hiervan gebruik maken. Deze wijziging is bedoeld om de shader-compilatie te versnellen.

Het maken van een renderpijplijn omvat het converteren van WGSL naar SPIR-V met de Tint-compiler en vervolgens naar ISA met de Driver-compiler.
Render pijplijncreatie in ChromeOS.

Deze verbeteringen, die al toegankelijk zijn op Android, worden geleidelijk uitgebreid naar ChromeOS-apparaten die WebGPU ondersteunen met de Vulkan-backend. Zie uitgave 42250751 .

Ingezonden opdrachtbuffers moeten uniek zijn

Elke GPUCommandBuffer die met de methode submit() naar de GPUQueue wordt verzonden, moet uniek zijn, anders wordt er een validatiefout gegenereerd. Dit was een specificatiefout . Zie uitgave 42241492 .

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const commandEncoder = device.createCommandEncoder();
const commandBuffer = commandEncoder.finish();

device.queue.submit([commandBuffer, commandBuffer]);
// ⚠️ Validation fails because command buffers are not unique.

Dawn-updates

De C++-wrapper webgpu_cpp.h heeft nu alleen headers, wat het gebruik ervan vereenvoudigt en een eenvoudigere integratie met alternatieve C++-wrappers mogelijk maakt. Zie uitgave 40195122 .

De webgpu.h C API legt niet langer het idee van Swapchain-objecten bloot. Deze wijziging moet nauw aansluiten bij de JavaScript-API. De interne configuratie wordt nu uitgevoerd via de Configure() methode van het nieuwe wgpu::Surface object, dat onderhevig is aan toekomstige wijzigingen. Bekijk een voorbeeld in de documentatie Een app bouwen met WebGPU . Zie uitgave 42241264 .

Bekijk de uitgebreide lijst met commits .

Wat is er nieuw in WebGPU

Een lijst met alles wat aan bod komt in de What's New in WebGPU -serie.

Chroom 130

Chroom 129

Chroom 128

Chroom 127

Chroom 126

Chroom 125

Chroom 124

Chroom 123

Chroom 122

Chroom 121

Chroom 120

Chroom 119

Chroom 118

Chroom 117

Chroom 116

Chroom 115

Chroom 114

Chroom 113