WebGPU'daki (Chrome 124) Yenilikler

François Beaufort
François Beaufort

Salt okunur ve okuma/yazma depolama dokuları

Depolama dokusu bağlama türü, gölgelendiricilerin TEXTURE_BINDING kullanımı eklemeden depolama dokularından okuma yapmasına ve belirli biçimlerde karma okuma ve yazma işlemleri gerçekleştirmesine olanak tanır. navigator.gpu.wgslLanguageFeatures içinde "readonly_and_readwrite_storage_textures" WGSL dil uzantısı bulunduğunda artık bağlama grubu düzeni oluştururken GPUStorageTexture erişimini "read-write" veya "read-only" olarak ayarlayabilirsiniz. Bu özellik daha önce "write-only" ile sınırlıydı.

Ardından, WGSL gölgelendirici kodunuz depolama dokuları için read_write ve read erişim niteleyicisini kullanabilir, textureLoad() ve textureStore() yerleşik işlevleri buna göre davranır ve bir iş grubundaki doku belleği erişimlerini senkronize etmek için yeni bir textureBarrier() yerleşik işlevi kullanılabilir.

WGSL gölgelendirici kodunuzun en üstünde requires readonly_and_readwrite_storage_textures; ile taşınabilirlik dışı olma olasılığını belirtmek için requires-directive kullanmanız önerilir. Aşağıdaki örneğe bakın ve issue dawn:1972 komutunu çalıştırın.

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.

Service worker ve shared worker desteği

Chrome'daki WebGPU, web çalışanları desteğini bir sonraki seviyeye taşıyarak artık hem service worker hem de shared worker desteği sunuyor. Arka plan görevlerini ve çevrimdışı özellikleri geliştirmek için hizmet çalışanlarını, komut dosyaları arasında verimli kaynak paylaşımı için ise paylaşılan çalışanları kullanabilirsiniz. issue chromium:41494731 başlıklı makaleye göz atın.

Uzantı hizmeti çalışanı içinde WebGPU'nun nasıl kullanılacağını görmek için Chrome uzantısı örneğine ve WebLLM Chrome uzantısına göz atın.

WebLLM Chrome uzantısının ekran görüntüsü.
WebLLM Chrome uzantısı.

Yeni bağdaştırıcı bilgisi özellikleri

Kullanıcı chrome://flags/#enable-webgpu-developer-features adresinde "WebGPU Geliştirici Özellikleri" işaretini etkinleştirdiyse standart olmayan d3dShaderModel ve vkDriverVersion bağdaştırıcı bilgisi özellikleri artık requestAdapterInfo() çağrıldığında kullanılabilir. Desteklendiğinde:

  • d3dShaderModel, desteklenen maksimum D3D gölgelendirici model numarasıdır. Örneğin, 62 değeri, mevcut sürücünün HLSL SM 6.2'yi desteklediğini gösterir. Belgelere ve dawn:1254 sorununa bakın.

  • vkDriverVersion, Vulkan sürücüsünün tedarikçi tarafından belirtilen sürüm numarasıdır. Belgelere ve issue chromium:327457605'e bakın.

https://webgpureport.org adresinin ekran görüntüsünde, adaptör bilgilerinde vkDriverVersion yer alıyor.
Bağdaştırıcı bilgileri vkDriverVersion https://webgpureport.org adresinde gösteriliyor.

Hata düzeltmeleri

layout: "auto" kullanarak eşleşen bindgroup'lara sahip iki işlem hattı oluşturup ardından ilk işlem hattıyla bir bindgroup oluşturmak ve bunu ikinci işlem hattında kullanmak artık GPUValidationError hatasına neden oluyor. Buna izin verilmesi, artık uygun testlerle düzeltilen bir uygulama hatasıydı. dawn:2402 sorunu bölümüne bakın.

Dawn güncellemeleri

Dawn API'de, wgpuDeviceSetUncapturedErrorCallback ile ayarlanan yakalanmamış hata geri çağırması artık GPU cihazı kaybolduktan sonra çağrılmıyor. Bu düzeltme, Dawn'ı JavaScript API spesifikasyonu ve Blink'in uygulamasıyla uyumlu hale getirir. dawn:2459 numaralı soruna bakın.

Bu özet yalnızca önemli noktalardan bazılarını kapsar. Kapsamlı commit listesine göz atın.

WebGPU'daki yenilikler

WebGPU'daki Yenilikler serisinde ele alınan her şeyin listesi.

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