Nowości w WebGPU (Chrome 124)

François Beaufort
François Beaufort

Tekstury pamięci masowej przeznaczone tylko do odczytu oraz do odczytu i zapisu

Typ powiązania tekstur pamięci masowej umożliwia programom cieniowania odczytywanie tekstur pamięci masowej bez dodawania użycia funkcji TEXTURE_BINDING oraz wykonywanie mieszanych odczytów i zapisów w określonych formatach. Gdy navigator.gpu.wgslLanguageFeatures zawiera rozszerzenie języka WGSL "readonly_and_readwrite_storage_textures", podczas tworzenia układu grupy powiązań możesz teraz ustawić dostęp GPUStorageTexture na "read-write" lub "read-only". Wcześniej limit ten był ograniczony do domeny "write-only".

Dzięki temu kod cieniowania WGSL może używać kwalifikatora dostępu read_write i read na potrzeby tekstur pamięci, wbudowane funkcje textureLoad() i textureStore() działają odpowiednio. Dostępna jest też nowa wbudowana funkcja textureBarrier() do synchronizowania dostępu do pamięci tekstur w grupie roboczej.

Zalecamy użycie polecenia requires-direct, aby zasygnalizować potencjał braku możliwości przenoszenia za pomocą kodu requires readonly_and_readwrite_storage_textures; na górze kodu Shakera WGSL. Zobacz ten przykład i problem świt: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 mechanizmów Service Worker i współdzielonych instancji roboczych

WebGPU w Chrome przenosi obsługę procesów internetowych na wyższy poziom, oferując teraz obsługę zarówno dla skryptów roboczych, jak i współdzielonych. Skrypty service worker pozwalają usprawniać zadania w tle i możliwości offline, a współpracowniki ułatwiają efektywne udostępnianie zasobów między skryptami. Zobacz problem chromium:41494731.

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

Zrzut ekranu rozszerzenia WebLLM do Chrome.
Rozszerzenie WebLLM do Chrome

Nowe atrybuty informacji o adapterach

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

Zrzut ekranu strony https://webgpureport.org z wartością vkDriverVersion w informacjach o adapterze.
Informacje o karcie vkDriverVersion dostępne na stronie https://webgpureport.org.

Poprawki błędów

Utworzenie 2 potoków z pasującymi grupami powiązań przy użyciu parametru layout: "auto", a następnie utworzenie grupy powiązań z pierwszym potokiem i użycie jej w drugim potoku spowoduje teraz wyświetlenie błędu GPUValidationError. Był to błąd implementacji, który został już naprawiony dzięki odpowiednim testom. Zobacz problem: świt:2402.

Aktualizacje o świcie

W interfejsie Dawn API nierejestrowane wywołanie zwrotne typu wgpuDeviceSetUncapturedErrorCallback nie jest teraz wywoływane po utracie urządzenia GPU. Ta poprawka dopasowuje Dawn do specyfikacji interfejsu JavaScript API i implementacji Blink. Zobacz problem: świt:2459.

To tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zatwierdzeń.

Co nowego w WebGPU

Lista wszystkiego, co zostało omówione w serii Co nowego w WebGPU.

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