Nowości w WebGPU (Chrome 124)

François Beaufort
François Beaufort

Tekstury pamięci tylko do odczytu i do odczytu i zapisu

Typ powiązania tekstury pamięci masowej umożliwia shaderom odczytywanie tekstur pamięci masowej bez dodawania użycia TEXTURE_BINDING oraz wykonywanie mieszanych odczytów i zapisów w przypadku niektórych formatów. Gdy rozszerzenie "readonly_and_readwrite_storage_textures" języka WGSL jest obecne w navigator.gpu.wgslLanguageFeatures, możesz teraz ustawić dostęp GPUStorageTexture na "read-write" lub "read-only" podczas tworzenia układu grupy powiązań. Wcześniej było to ograniczone do "write-only".

Kod shadera WGSL może wtedy używać kwalifikatora dostępu read_write i read w przypadku tekstur pamięci, wbudowane funkcje textureLoad() i textureStore() działają odpowiednio, a nowa wbudowana funkcja textureBarrier() umożliwia synchronizowanie dostępu do pamięci tekstur w grupie roboczej.

Zalecamy użycie dyrektywy requires, aby zasygnalizować potencjalną niezgodność z innymi platformami, za pomocą requires readonly_and_readwrite_storage_textures; u góry kodu shadera WGSL. Zobacz ten przykład i problem dawn:1972.

if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
  throw new Error("Read-only and read-write storage textures are not available");
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

const shaderModule = device.createShaderModule({ code: `
  requires readonly_and_readwrite_storage_textures;

  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

Obsługa service workerów i shared workerów

WebGPU w Chrome przenosi obsługę web workerów na wyższy poziom, oferując teraz obsługę zarówno service workerów jak i shared workerów. Możesz używać service workerów do ulepszania zadań wykonywanych w tle i funkcji offline, a shared workerów do wydajnego udostępniania zasobów między skryptami. Zobacz problem chromium:41494731.

Aby dowiedzieć się, jak używać WebGPU w skrypcie service worker rozszerzenia, zapoznaj się z przykładem rozszerzenia do Chrome i rozszerzeniem WebLLM do Chrome.

Zrzut ekranu rozszerzenia WebLLM do Chrome.
Rozszerzenie WebLLM do Chrome.

Nowe atrybuty informacji o adapterze

Niestandardowe atrybuty informacji o adapterze d3dShaderModel i vkDriverVersion są teraz dostępne po wywołaniu requestAdapterInfo(), jeśli użytkownik włączył flagę „WebGPU Developer Features” w chrome://flags/#enable-webgpu-developer-features. Gdy jest obsługiwany:

Zrzut ekranu strony https://webgpureport.org z informacjami o karcie graficznej, w których znajduje się vkDriverVersion.
Informacje o adapterze vkDriverVersion wyświetlane na stronie https://webgpureport.org.

Poprawki błędów

Tworzenie 2 potoków z pasującymi grupami powiązań za pomocą layout: "auto", a następnie tworzenie grupy powiązań z pierwszym potokiem i używanie jej w drugim potoku powoduje teraz zgłoszenie GPUValidationError. Zezwolenie na to było błędem implementacji, który został już naprawiony za pomocą odpowiednich testów. Zobacz problem dawn:2402.

Aktualizacje Dawn

W interfejsie Dawn API wywołanie zwrotne nieprzechwyconego błędu ustawione za pomocą wgpuDeviceSetUncapturedErrorCallback nie jest już wywoływane po utracie urządzenia GPU. Ta poprawka dostosowuje Dawn do specyfikacji interfejsu JavaScript API i implementacji Blink. Zobacz problem dawn:2459.

Obejmuje to tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą commitów.

Nowości w WebGPU

Lista wszystkich elementów omówionych w serii Nowości w WebGPU.

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