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

Kod shadera WGSL może wtedy używać kwalifikatorów dostępu read_writeread w przypadku tekstur pamięci, wbudowane funkcje textureLoad()textureStore() będą działać odpowiednio, a nowa wbudowana funkcja textureBarrier() będzie dostępna do synchronizowania dostępu do pamięci tekstury w grupie roboczej.

Zalecamy użycie dyrektywy requires, aby zasygnalizować potencjalną nieprzenośność za pomocą requires readonly_and_readwrite_storage_textures; na początku kodu shadera WGSL. Zobacz ten przykład i numer 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. Skrypty service worker możesz wykorzystać do ulepszania zadań w tle i funkcji offline, a skrypty shared worker do efektywnego udostępniania zasobów między skryptami. Zobacz issue chromium:41494731.

Zapoznaj się z przykładowym rozszerzeniem do Chromerozszerzeniem WebLLM do Chrome, aby dowiedzieć się, jak używać WebGPU w skrypcie service worker rozszerzenia.

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

Nowe atrybuty informacji o adapterze

Niestandardowe atrybuty informacji o adapterze d3dShaderModelvkDriverVersion są teraz dostępne po wywołaniu funkcji requestAdapterInfo(), jeśli użytkownik włączył flagę „Funkcje deweloperskie WebGPU” w chrome://flags/#enable-webgpu-developer-features. Jeśli jest obsługiwana:

  • d3dShaderModel to maksymalny obsługiwany numer modelu shadera D3D. Na przykład wartość 62 oznacza, że bieżący sterownik obsługuje HLSL SM 6.2. Zobacz dokumentacjęproblem dawn:1254.

  • vkDriverVersion to numer wersji sterownika Vulkan podany przez dostawcę. Więcej informacji znajdziesz w dokumentacjitym zgłoszeniu.

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

Poprawki błędów

Utworzenie 2 potoków z pasującymi grupami powiązań za pomocą layout: "auto", a następnie utworzenie grupy powiązań z pierwszym potokiem i użycie jej w drugim potoku powoduje teraz zgłoszenie błędu GPUValidationError. Był to błąd 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 API JavaScript i implementacji Blink. Zobacz problem dawn:2459.

To tylko niektóre z najważniejszych zmian. Pełną listę zmian znajdziesz w repozytorium.

Nowości w WebGPU

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

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