Wat is er nieuw in WebGPU (Chrome 119)

François Beaufort
François Beaufort

Filterbare 32-bit float-texturen

32-bit drijvende-kommatexturen worden gebruikt om zeer nauwkeurige gegevens op te slaan, zoals HDR-afbeeldingen en dieptekaarten. Ze zijn vooral belangrijk voor GPU's die worden gebruikt in high-end gaming en professionele toepassingen.

Ondersteuning voor filterbare 32-bits float-texturen beschrijft het vermogen van een GPU om 32-bits floating-point-texturen te filteren. Dit betekent dat de GPU de randen van drijvende-kommatexturen kan gladstrijken, waardoor ze er minder gekarteld uitzien. Het is vergelijkbaar met de extensie "OES_texture_float_linear" in WebGL.

Niet alle GPU's ondersteunen filterbare 32-bits float-texturen. Wanneer de functie "float32-filterable" beschikbaar is in een GPUAdapter , kunt u nu een GPUDevice met deze functie aanvragen en texturen filteren met de formaten "r32float", "rg32float" en "rgba32float". Zie het volgende voorbeeld en uitgave Dawn:1664 .

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-filterable")) {
  throw new Error("Filterable 32-bit float textures support is not available");
}
// Explicitly request filterable 32-bit float textures support.
const device = await adapter.requestDevice({
  requiredFeatures: ["float32-filterable"],
});

// Create a sampler with linear filtering.
const sampler = device.createSampler({
  magFilter: "linear",
});

// Create a texture with rgba32float format.
const texture = device.createTexture({
  size: [100, 100],
  format: "rgba32float",
  usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});

// Write data to texture, create a bindgroup with sampler and texture and
// send the appropriate commands to the GPU....

unorm10-10-10-2 hoekpuntformaat

Een nieuw hoekpuntformaat genaamd "unorm10-10-10-2" oftewel "rgb10a2" is toegevoegd aan de WebGPU-specificatie . Het bestaat uit één verpakte 32-bits waarde met vier genormaliseerde gehele getallen zonder teken, gerangschikt als 10 bits, 10 bits, 10 bits en 2 bits. Zie het volgende voorbeeld en uitgave Dawn:2044 .

// Define the layout of vertex attribute data with unorm10-10-10-2 format.
const buffers = [
  {
    arrayStride: 0,
    attributes: [
      { format: "unorm10-10-10-2", offset: 0, shaderLocation: 0 },
    ],
  },
];

// Describe the vertex shader entry point and its input buffer layouts.
const vertex = {
  module: myVertexShaderModule,
  entryPoint: "main",
  buffers,
};

// Pass vertex to device.createRenderPipeline() and
// use vec4<f32> type in WGSL shader code to manipulate data.

rgb10a2uint textuurformaat

Een nieuw textuurformaat genaamd "rgb10a2uint" is toegevoegd aan de WebGPU-specificatie . Het bestaat uit een 32-bits verpakt pixelformaat met vier niet-ondertekende gehele componenten: 10-bits rood, 10-bits groen, 10-bits blauw en 2-bits alfa. Zie het volgende voorbeeld en uitgave Dawn:1936 .

// Create a texture with rgb10a2uint format.
const texture = device.createTexture({
  size: [100, 100],
  format: "rgb10a2uint",
  usage: GPUTextureUsage.COPY_DST | GPUTextureUsage.TEXTURE_BINDING,
});

// Write data to texture, create a bindgroup with texture and
// send the appropriate commands to the GPU....

Dawn-updates

Met tijdstempelquery's kunnen WebGPU-applicaties nauwkeurig meten (tot op de nanoseconde) hoeveel tijd het kost om hun GPU-opdrachten uit te voeren. De API-vorm om tijdstempelquery's aan het begin en einde van passen vast te leggen, is bijgewerkt om te voldoen aan de WebGPU-specificatie. Zie het volgende voorbeeld en geef Dawn:1800 op .

// Create a timestamp query set that will store the timestamp values.
wgpu::QuerySetDescriptor querySetDescriptor = {
    .count = 2,
    .type = wgpu::QueryType::Timestamp};
wgpu::QuerySet querySet = device.CreateQuerySet(&querySetDescriptor);

wgpu::RenderPassTimestampWrites timestampWrites = {
    .querySet = querySet,
    .beginningOfPassWriteIndex = 0,
    .endOfPassWriteIndex = 1};
wgpu::ComputePassDescriptor pass{.timestampWrites = &timestampWrites};

// Write the queue timestamp into beginningOfPassWriteIndex and
// endOfPassWriteIndex of myQuerySet respectively before and after the pass
// commands execute.
myEncoder.BeginComputePass(&pass);

Dit behandelt slechts enkele van de belangrijkste hoogtepunten. Bekijk de uitgebreide lijst met commits .

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