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

W kodzie shadera WGSL można wtedy używać kwalifikatorów dostępu read_write i read w przypadku tekstur pamięci masowej, wbudowane funkcje textureLoad() i textureStore() działają odpowiednio, a nowa wbudowana funkcja textureBarrier() umożliwia synchronizację dostępu do pamięci tekstury w grupie roboczej.

Zalecamy użycie requires-directive, aby zasygnalizować potencjalną nieprzenośność 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 modułów Service Worker i Shared Worker

WebGPU w Chrome przenosi obsługę instancji roboczych na wyższy poziom, oferując teraz obsługę zarówno instancji roboczych usługi, jak i współdzielonych instancji roboczych. Możesz używać skryptów service worker do ulepszania zadań w tle i funkcji offline oraz skryptów shared worker do wydajnego udostępniania zasobów między skryptami. Zobacz issue 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 rozszerzenia.

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

Nowe atrybuty informacji o adapterze

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

Zrzut ekranu ze strony https://webgpureport.org, na którym w informacjach o karcie graficznej widoczny jest parametr vkDriverVersion.
Informacje o adapterzevkDriverVersion 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 JavaScript API i implementacji Blink. Zobacz problem dawn:2459.

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

Co nowego w WebGPU

Lista wszystkich tematów omówionych w serii Nowości w 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