Wat is er nieuw in WebGPU (Chrome 115)

François Beaufort
François Beaufort

Ondersteunde WGSL-taalextensies

Het wgslLanguageFeatures lid van het GPU object bevat de namen van ondersteunde WGSL -taalextensies . Ondersteunde WGSL-taalextensies worden 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 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 te draaien met de opdrachtregelopties --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 . Zie issue dawn:1705 .

Standaard discrete GPU op netstroom

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

Verbetering van de ontwikkelaarservaring

Nieuwe DevTools-waarschuwingen

Als de 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 gegenereerd als een GPUBlendComponent een mix van expliciete en standaardleden bevat. Zie issue dawn:1785 .

Hoewel zero-size dispatches en draws geldig zijn, moedigt een waarschuwing ontwikkelaars aan om deze 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 indienen van opdrachtbuffers met vernietigde objecten, zijn de labels van de opdrachtbuffers die in submit() werden gebruikt nu zichtbaar in de foutmelding. Zie issue dawn:1747 .

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

De validatiefoutmelding minBindingSize vermeldt nu de groep en het nummer van de binding die de validatie niet heeft doorstaan, evenals de buffer. Zie issue dawn:1604 .

Foutmeldingen die door de mapAsync() -methode op een GPUBuffer -object worden geretourneerd, zijn verbeterd om ontwikkelaars te helpen bij het debuggen. Zie hieronder een 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-foutopsporingstools

Met de debug-schakelaar 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 is er een betere debug-ervaring op macOS wanneer u deze optie inschakelt voor debuggen . Zie issue dawn:1784

Schermafbeelding van de Instrumenten-app op macOS met aangepaste labels van WebGPU.
Door de gebruiker gedefinieerde labels in de Instrumenten-app op macOS.

Log HLSL als de compilatie mislukt

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

Dawn-updates

Vertexbuffer ongedaan maken

Door nullptr in plaats van een wgpu::Buffer door te geven aan SetVertexBuffer() op wgpu::RenderPassEncoder of wgpu::RenderBundleEncoder kunt u een eerder ingestelde vertexbuffer in een bepaalde sleuf 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 bijlagen

U kunt bijlagen maken waarmee renderpass-bewerkingen in het tegelgeheugen kunnen blijven, waardoor VRAM-verkeer en mogelijk ook VRAM-toewijzing voor de texturen worden vermeden 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

Met de nieuwe CMake-optie DAWN_FETCH_DEPENDENCIES kunt u Dawn-afhankelijkheden ophalen met behulp van een Python-script dat DEPS-bestanden leest, in plaats van de installatie van depot_tools te vereisen voor alle projecten die ervan afhankelijk zijn. Zie wijziging 131750 .

Wat is er nieuw in WebGPU

Een lijst met alles wat in de serie Wat is er nieuw in WebGPU is behandeld.

Chroom 140

Chroom 139

Chroom 138

Chroom 137

Chroom 136

Chroom 135

Chroom 134

Chroom 133

Chroom 132

Chroom 131

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