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 masowej umożliwia shaderom odczytywanie z tekstur pamięci masowej 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 "readonly_and_readwrite_storage_textures" rozszerzenie języka WGSL, podczas tworzenia układu grupy powiązań możesz 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() działają odpowiednio, a nowa wbudowana funkcja textureBarrier() umożliwia synchronizację 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 issue 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ę procesów roboczych w internecie na wyższy poziom, oferując teraz obsługę zarówno procesów roboczych usługi, jak i procesów roboczych współdzielonych. Skrypty service worker możesz wykorzystać do usprawnienia zadań w tle i funkcji offline, a skrypty shared worker – do efektywnego udostępniania zasobów w różnych skryptach. Zobacz issue chromium:41494731.

Zapoznaj się z przykładowym rozszerzeniem do Chromerozszerzeniem WebLLM do Chrome, aby dowiedzieć się, jak używać WebGPU w procesie roboczym 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:

Zrzut ekranu ze strony https://webgpureport.org, na którym w informacjach o karcie graficznej widoczny jest parametr 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 o świcie

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.

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

Nowości w WebGPU

Lista wszystkich tematów omówionych w serii Co nowego w WebGPU.

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