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".

Następnie kod shadera WGSL może używać kwalifikatora dostępu read_writeread do tekstur pamięci. Wbudowane funkcje textureLoad()textureStore() działają odpowiednio, a nowa wbudowana funkcja textureBarrier() jest dostępna 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 ulepsza obsługę web workerów, oferując teraz obsługę zarówno serwisów, jak i wspólnych workerów. Możesz używać skryptów service worker, aby ulepszać zadania w tle i funkcje offline, oraz skryptów shared worker, aby efektywnie udostępniać zasoby w różnych skryptach. Zobacz problem chromium:41494731.

Aby dowiedzieć się, jak używać WebGPU w workerze rozszerzenia, sprawdź próbny kod rozszerzenia Chromerozszerzenie WebLLM do Chrome.

Zrzut ekranu przedstawiający rozszerzenie 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 requestAdapterInfo(), jeśli użytkownik włączył opcję „Funkcje dla deweloperów WebGPU” w sekcji chrome://flags/#enable-webgpu-developer-features. W przypadku obsługi:

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 świtu

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