Nieuw in WebGPU (Chrome 115)

François Beaufort
François Beaufort

Ondersteunde WGSL-taalextensies

Het wgslLanguageFeatures-lid van de GPU-objectlijsten bevat de namen van ondersteunde taalextensies voor WGSL. Ondersteunde WGSL-taalextensies staan automatisch aan. Je hoeft er dus niet expliciet een aan te vragen. Deze lijst is op dit moment leeg, maar je kunt in de toekomst veel van deze problemen verwachten (bijvoorbeeld do-while loops). Ga naar 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 eraan om WebGPU-ondersteuning toe te voegen voor Direct3D 11. Je kunt er nu lokaal mee experimenteren door Chrome op Windows uit te voeren met de opdrachtregelflags --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. Ga naar issue dawn:1705.

Standaard een afzonderlijke GPU krijgen als het apparaat op wisselstroom is aangesloten

Op macOS-apparaten met 2 GPU's wordt de afzonderlijke GPU geretourneerd als requestAdapter() wordt aangeroepen zonder de optie powerPreference en het apparaat van de gebruiker is aangesloten op een stopcontact. Anders wordt de geïntegreerde GPU geretourneerd. Ga naar wijziging 4499307.

De ontwikkelaarservaring verbeteren

Nieuwe DevTools-waarschuwingen

Als de sleutel depth wordt gebruikt in een GPUExtend3DDict, wordt er een waarschuwing getoond in de DevTools-console, omdat de juiste sleutel depthOrArrayLayers is. Ga naar issue chromium:1440900.

Er wordt ook een waarschuwing getoond als een GPUBlendComponent een combinatie van expliciete en standaardleden heeft. Ga naar issue dawn:1785.

Verzendingen en trekkingen van nul grootte zijn geldig, maar een waarschuwing moedigt ontwikkelaars aan deze zo veel mogelijk te vermijden. Ga naar probleem dawn:1786.

Betere foutmeldingen

Er wordt nu een verbeterde foutmelding getoond als je een GPUCommandEncoder gebruikt als finish() al is aangeroepen. Ga naar issue dawn:1736.

Als je opdrachtbuffers met vernietigde objecten indient, zijn de labels van de opdrachtbuffers die in submit() zijn gebruikt, nu zichtbaar in het foutbericht. Ga naar issue dawn:1747.

Het ongeldige deel van de diepte-stencilstatus wordt nu in het foutbericht aangegeven bij de validatie van depthStencil. Ga naar issue dawn:1735.

Het validatiefoutbericht minBindingSize meldt nu de groep en het aantal van de binding waarvan de validatie is mislukt, evenals de buffer. Ga naar issue dawn:1604.

Foutmeldingen die worden geretourneerd door de methode mapAsync() voor een GPUBuffer-object, zijn verbeterd om ontwikkelaars te helpen bij het opsporen van fouten. Zie het voorbeeld hieronder en meld het probleem 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 foutopsporingstools voor macOS

Met de use_user_defined_labels_in_backendfoutopsporingsschakelaar kun je objectlabels doorsturen naar de backend, zodat ze zichtbaar zijn in platformspecifieke foutopsporingstools zoals RenderDoc, PIX of Instruments. Vanaf nu is er een betere functionaliteit voor foutopsporing op macOS als je dit aanzet voor foutopsporing. Ga naar issue dawn:1784.

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

HLSL loggen als compilatie mislukt

Met de dump_shadersfoutopsporingsschakelaar kun je invoer-WGSL-shaders en vertaalde backend-shaders loggen. Als je de functie vanaf nu aanzet voor foutopsporing, wordt de HLSL gedumpt als de compilatie mislukt. Ga naar issue dawn:1681.

Updates voor Dawn

Hoekpuntbuffer verwijderen

Als je nullptr in plaats van een wgpu::Buffer doorgeeft aan SetVertexBuffer() op wgpu::RenderPassEncoder of wgpu::RenderBundleEncoder, kun je een eerder ingestelde hoekpuntbuffer in een bepaalde sleuf ongedaan maken. Ga naar probleem 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

Je kunt bijlagen maken waarmee renderpass-bewerkingen in het tegelgeheugen kunnen blijven. Zo voorkom je VRAM-verkeer en mogelijk VRAM-toewijzing voor de texturen door het gebruik van wgpu::TextureUsage::TransientAttachment in te stellen. Deze functie wordt alleen ondersteund voor Metal en Vulkan. Ga naar Probleem 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 een Python-script dat DEPS-bestanden leest in plaats van dat alle projecten die ervan afhankelijk zijn, depot_tools moeten installeren. Ga naar wijziging 131750.

Wat is er nieuw in WebGPU?

Een lijst met alles wat is behandeld in de serie Nieuw in WebGPU.

Chrome 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

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