Nowości w WebGPU (Chrome 124)

François Beaufort
François Beaufort

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

Typ wiązania tekstur pamięci masowej umożliwia shaderom odczytywanie tekstur z pamięci masowej bez dodawania użycia TEXTURE_BINDING oraz wykonywanie operacji odczytu i zapisu mieszanych w określonych formatach. Jeśli "readonly_and_readwrite_storage_textures" rozszerzenie języka WGSL jest obecne w navigator.gpu.wgslLanguageFeatures, podczas tworzenia układu grupy wiązania możesz ustawić dostęp GPUStorageTexture do "read-write" lub "read-only". Wcześniej było to ograniczone do "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 dyrektywy wymagań, aby zasygnalizować potencjalną niekompatybilność z requires readonly_and_readwrite_storage_textures; na początku 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 skryptów service worker i skryptów współdzielonych

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.

Aby dowiedzieć się, jak używać WebGPU w workerze rozszerzenia, zapoznaj się z próbką rozszerzenia Chromerozszerzeniem WebLLM do Chrome.

Zrzut ekranu przedstawiający rozszerzenie WebLLM do Chrome
Rozszerzenie WebLLM do Chrome.

Nowe atrybuty informacji o adapterach

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

Zrzut ekranu strony https://webgpureport.org z informacją vkDriverVersion w informacjach o adapterze
Informacje o adapterze vkDriverVersion wyświetlane na stronie https://webgpureport.org.

Poprawki błędów

Tworzenie 2 potoku z pasującymi grupami bindów za pomocą layout: "auto", a następnie tworzenie grupy bindów z pierwszego potoku i używanie jej w drugim powoduje błąd GPUValidationError. Dopuszczenie do tego było błędem implementacji, który został naprawiony za pomocą odpowiednich testów. Zobacz issue dawn:2402.

Aktualizacje o świcie

W interfejsie Dawn API wywołanie funkcji obsługi nieprzechwyczonej awarii wgpuDeviceSetUncapturedErrorCallback nie jest już wywoływane po utracie połączenia z urządzeniem GPU. Ta poprawka dopasowuje Dawn do specyfikacji interfejsu API JavaScript i do implementacji Blink. Zobacz issue dawn:2459.

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

Co nowego w WebGPU

Lista wszystkich tematów omawianych w cyklu Co nowego w WebGPU.

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