Wat is er nieuw in WebGPU (Chrome 115)

François Beaufort
François Beaufort

Ondersteunde WGSL-taalextensies

Het lid wgslLanguageFeatures van het GPU object bevat een lijst met de namen van ondersteunde WGSL -taalextensies . Ondersteunde WGSL-taalextensies zijn automatisch ingeschakeld, dus u hoeft er niet expliciet een aan te vragen. Deze lijst is momenteel leeg, maar u kunt er in de toekomst veel meer verwachten (bijvoorbeeld do-while loops ). Zie issue dawn:1777 .

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

Experimentele ondersteuning voor Direct3D 11

Het Chromium-team werkt aan het toevoegen van WebGPU-ondersteuning voor Direct3D 11. Je kunt er nu lokaal mee experimenteren door Chrome op Windows uit te voeren met de opdrachtregelopties --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 . Zie issue dawn:1705 .

De aparte grafische kaart wordt standaard ingeschakeld bij gebruik van netstroom.

Op macOS-apparaten met twee GPU's wordt, als requestAdapter() wordt aangeroepen zonder een powerPreference optie, de discrete GPU geretourneerd wanneer het apparaat van de gebruiker is aangesloten op netstroom. Anders wordt de geïntegreerde GPU geretourneerd. Zie wijziging 4499307 .

Verbetering van de ontwikkelaarservaring

Nieuwe DevTools-waarschuwingen

Als de sleutel depth wordt gebruikt in een GPUExtend3DDict wordt er een waarschuwing weergegeven in de DevTools-console, omdat de juiste sleutel depthOrArrayLayers is. Zie probleem chromium:1440900 .

Er wordt ook een waarschuwing gegeven als een GPUBlendComponent een mix van expliciete en standaardleden bevat. Zie issue dawn:1785 .

Hoewel het verzenden en tekenen van objecten van nul grootte geldig is, moedigt een waarschuwing ontwikkelaars aan om dit waar mogelijk te vermijden. Zie issue dawn:1786 .

Betere foutmeldingen

Er wordt nu een verbeterde foutmelding weergegeven bij gebruik van een GPUCommandEncoder als finish() al is aangeroepen. Zie issue dawn:1736 .

Bij het verzenden van commandobuffers met vernietigde objecten zijn de labels van de commandobuffers die in submit() zijn gebruikt nu zichtbaar in het foutbericht. Zie issue dawn:1747 .

Het ongeldige deel van de dieptestencilstatus wordt nu in het foutbericht vermeld bij het valideren depthStencil . Zie issue dawn:1735 .

Het validatiefoutbericht minBindingSize geeft nu de groep en het nummer weer van de binding die de validatie niet heeft doorstaan, evenals de buffer. Zie issue dawn:1604 .

De foutmeldingen die de mapAsync() -methode op een GPUBuffer object retourneert, zijn verbeterd om ontwikkelaars te helpen bij het debuggen. Zie onderstaand voorbeeld en 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-debugtools

Met de debug-optie use_user_defined_labels_in_backend kunt u objectlabels doorsturen naar de backend, zodat ze zichtbaar zijn in platformspecifieke debugtools zoals RenderDoc, PIX of Instruments. Vanaf nu biedt het inschakelen van deze optie een betere debugervaring op macOS. Zie issue dawn:1784

Screenshot van de Instruments-app op macOS met aangepaste labels afkomstig van WebGPU.
Door de gebruiker gedefinieerde labels in de Instruments-app op macOS.

Log HLSL als de compilatie mislukt

Met de debug-optie ` dump_shaders kunt u de invoer-WGSL-shaders en de vertaalde backend-shaders loggen. Vanaf nu wordt de HLSL-code gedumpt wanneer u deze optie inschakelt voor debugging en de compilatie mislukt. Zie issue dawn:1681

Dawn-updates

Vertexbuffer niet ingesteld

Door nullptr in plaats van een wgpu::Buffer door te geven aan SetVertexBuffer() op wgpu::RenderPassEncoder of wgpu::RenderBundleEncoder kun je een eerder ingestelde vertexbuffer in een bepaalde slot ongedaan maken. Zie 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);

Tijdelijke bevestigingen

Je kunt attachments maken waarmee render pass-bewerkingen in het tegelgeheugen blijven, waardoor VRAM-verkeer wordt vermeden en mogelijk VRAM-allocatie voor de texturen wordt voorkomen door het gebruik van wgpu::TextureUsage::TransientAttachment in te stellen. Deze functie wordt alleen ondersteund voor Metal en Vulkan. Zie 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.

Bouwen zonder depot_tools

Een nieuwe CMake-optie DAWN_FETCH_DEPENDENCIES maakt het mogelijk om Dawn-afhankelijkheden op te halen met behulp van een Python-script dat DEPS-bestanden leest, in plaats van dat alle projecten die ervan afhankelijk zijn depot_tools moeten installeren. Zie wijziging 131750 .

Wat is er nieuw in WebGPU?

Een lijst van alles wat in de serie ' Wat is nieuw in WebGPU' aan bod is gekomen.

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