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 na chrome://flags/#enable-webgpu-developer-features. Jeśli ta funkcja jest obsługiwana:

  • d3dShaderModel to maksymalny obsługiwany numer modelu cieniowania D3D. Na przykład wartość 62 oznacza, że bieżący sterownik obsługuje HLSL SM 6.2. Zapoznaj się z dokumentacją i artykułem Issue dawn:1254.

  • vkDriverVersion to numer wersji sterownika Vulkan określony przez dostawcę. Zapoznaj się z dokumentacją i problemem chromium:327457605.

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