Nowości w WebGPU (Chrome 124)

François Beaufort
François Beaufort

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

Typ powiązania tekstur pamięci masowej umożliwia programom cieniowania odczytywanie tekstur pamięci bez dodawania użycia TEXTURE_BINDING oraz wykonywanie mieszanych odczytów i zapisów w określonych formatach. Gdy w navigator.gpu.wgslLanguageFeatures jest obecne rozszerzenie języka "readonly_and_readwrite_storage_textures" WGSL, możesz teraz ustawić dostęp GPUStorageTexture na poziomie "read-write" lub "read-only" podczas tworzenia układu grupy powiązań. Wcześniej dostęp do tych danych miał tylko "write-only".

Następnie Twój kod cieniowania WGSL może używać kwalifikatora dostępu read_write i read do obsługi tekstur pamięci masowej, funkcje wbudowane textureLoad() i textureStore() zachowują się odpowiednio, a dostępna jest nowa funkcja wbudowana textureBarrier() do synchronizowania dostępu do pamięci tekstur w grupie roboczej.

Zalecamy użycie dyrektywy wymagającej, aby zasygnalizować możliwość braku możliwości przenoszenia za pomocą requires readonly_and_readwrite_storage_textures; u góry kodu cieniowania WGSL. Zobacz poniższy przykład i ten problem: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.

Skrypty service worker i współdzielone instancje robocze

WebGPU w Chrome przenosi obsługę pracowników internetowych na wyższy poziom, oferując wsparcie zarówno dla skryptów service worker, jak i zasobów współdzielonych. Skrypty service worker pozwalają usprawnić zadania w tle i w trybie offline, a współdzielone zasoby robocze zapewniają efektywne udostępnianie 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 usługi rozszerzeń.

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

Nowe atrybuty informacji o adapterze

Niestandardowe atrybuty informacji o adapterach d3dShaderModel i vkDriverVersion są teraz dostępne podczas wywoływania requestAdapterInfo(), jeśli użytkownik włączył flagę „Funkcje dla programistów WebGPU” na stronie chrome://flags/#enable-webgpu-developer-features. Gdy obsługiwane:

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

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

Zrzut ekranu przedstawiający stronę https://webgpureport.org z parametrem vkDriverVersion w informacjach o adapterze.
Informacje o adapterze vkDriverVersion są wyświetlane na stronie https://webgpureport.org.

Poprawki błędów

Utworzenie 2 potoków z pasującymi grupami powiązań przy użyciu layout: "auto" oraz utworzenie grupy powiązań z pierwszym potokiem, a następnie użycie jej w drugim potoku, powoduje teraz wystąpienie błędu GPUValidationError. Zezwolenie na tę opcję było błędem implementacji, który został już naprawiony dzięki odpowiednim testom. Zobacz ten problem:2402.

Powiadomienia o świcie

W interfejsie Dawn API nieprzechwycone wywołanie zwrotne błędu ustawione dla wgpuDeviceSetUncapturedErrorCallback nie jest teraz wywoływane po utracie urządzenia GPU. Ta poprawka dostosowuje Dawn do specyfikacji interfejsu JavaScript API i implementacji Blink. Zobacz świt problemu:2459.

To tylko niektóre z najważniejszych kwestii. Zobacz pełną listę zatwierdzeń.

Co nowego w WebGPU

Lista wszystkich zagadnień omówionych w serii Co nowego w WebGPU.

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