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 dieptestencilstatus 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 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