Wat is er nieuw in WebGPU (Chrome 115)

François Beaufort
François Beaufort

Ondersteunde WGSL-taalextensies

Het lid wgslLanguageFeatures van het GPU object vermeldt de namen van ondersteunde WGSL -taalextensies . Ondersteunde WGSL-taalextensies worden automatisch ingeschakeld, daarom hoeft u deze niet expliciet aan te vragen. Deze lijst is momenteel leeg, maar je kunt er in de toekomst veel van verwachten (bijvoorbeeld do-while loops ). Zie uitgave 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 opdrachtregelvlaggen --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 . Zie uitgave Dawn:1705 .

Krijg standaard een discrete GPU op wisselstroom

Als requestAdapter() op macOS-apparaten met dubbele GPU wordt aangeroepen zonder de optie powerPreference , wordt 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, aangezien de juiste sleutel depthOrArrayLayers is. Zie uitgave chroom:1440900 .

Er wordt ook een waarschuwing weergegeven als een GPUBlendComponent een combinatie van expliciete en standaardleden heeft. Zie uitgave Dawn:1785 .

Hoewel zero-size verzendingen en trekkingen geldig zijn, moedigt een waarschuwing ontwikkelaars aan om deze waar mogelijk te vermijden. Zie uitgave Dawn:1786 .

Betere foutmeldingen

Er wordt nu een verbeterd foutbericht weergegeven bij gebruik van een GPUCommandEncoder als finish() al is aangeroepen. Zie uitgave Dawn:1736 .

Bij het indienen van opdrachtbuffers met vernietigde objecten zijn de labels van de opdrachtbuffers die werden gebruikt in submit() nu zichtbaar in de foutmelding. Zie uitgave Dawn:1747 .

Het ongeldige deel van de diepte-stencilstatus wordt nu gespecificeerd in het foutbericht bij het valideren van depthStencil . Zie uitgave Dawn:1735 .

Het minBindingSize validatiefoutbericht rapporteert nu de groep en het nummer van de binding waarbij de validatie is mislukt, evenals de buffer. Zie uitgave Dawn:1604 .

Foutberichten die door de methode mapAsync() op een GPUBuffer object worden geretourneerd, zijn verbeterd om ontwikkelaars te helpen bij het opsporen van fouten. Zie een voorbeeld hieronder en geef chroom:1431622 op .

// 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 foutopsporingstools zoals RenderDoc, PIX of Instruments. Vanaf nu wordt er een betere foutopsporingservaring geboden op macOS wanneer u dit inschakelt voor foutopsporing . Zie uitgave Dawn:1784

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

Registreer HLSL als de compilatie mislukt

Met de debug-schakelaar dump_shaders kunt u ingevoerde WGSL-shaders en vertaalde backend-shaders loggen. Vanaf nu, wanneer u debuggen inschakelt, wordt de HLSL gedumpt als de compilatie mislukt. Zie uitgave Dawn:1681

Dawn-updates

Schakel hoekpuntbuffer uit

Door nullptr in plaats van een wgpu::Buffer door te geven aan SetVertexBuffer() op wgpu::RenderPassEncoder of wgpu::RenderBundleEncoder kunt u een eerder ingestelde hoekpuntbuffer in een bepaald slot uitschakelen. Zie uitgave 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 render-pass-bewerkingen in het tegelgeheugen kunnen blijven, waardoor VRAM-verkeer wordt vermeden en mogelijk VRAM-toewijzing voor de texturen wordt vermeden door het gebruik van wgpu::TextureUsage::TransientAttachment in te stellen. Deze functie wordt alleen ondersteund voor Metal en Vulkan. Zie uitgave dageraad: 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 een nieuwe DAWN_FETCH_DEPENDENCIES CMake-optie kun je Dawn-afhankelijkheden ophalen met behulp van een Python-script dat DEPS-bestanden leest in plaats van dat de installatie van depot_tools vereist is voor alle projecten die ervan afhankelijk zijn. Zie wijziging 131750 .

Wat is er nieuw in WebGPU

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

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