WebGPU'daki (Chrome 124) Yenilikler

François Beaufort
François Beaufort

Salt okunur ve salt okunur/yazılabilir 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şlemlerini gerçekleştirmesine olanak tanır. navigator.gpu.wgslLanguageFeatures'te "readonly_and_readwrite_storage_textures" WGSL dil uzantısı mevcut olduğunda artık bağlama grubu düzeni oluştururken GPUStorageTexture erişimini "read-write" veya "read-only" olarak ayarlayabilirsiniz. Daha önce bu sayı "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 çalışma 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 birlikte taşınabilirlik olmaması olasılığını belirtmek için bir requires-directive kullanılması önerilir. Aşağıdaki örneğe ve sayı dawn:1972'ye bakı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.

Hizmet çalışanları ve paylaşılan çalışanlar desteği

Chrome'daki WebGPU, web işçisi desteğini bir üst seviyeye taşıyarak artık hem hizmet işçileri hem de ortak işçiler için destek sunmaktadır. Arka plan görevlerini ve çevrimdışı özellikleri iyileştirmek için hizmet çalışanlarını, komut dosyaları arasında verimli kaynak paylaşımı yapmak için de paylaşılan çalışanları kullanabilirsiniz. chromium:41494731 numaralı soruna bakın.

WebGPU'nun bir uzantı hizmet işçisinde 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 adaptör bilgileri özellikleri

Kullanıcı chrome://flags/#enable-webgpu-developer-features'te "WebGPU Geliştirici Özellikleri" işaretini etkinleştirdiyse standart olmayan d3dShaderModel ve vkDriverVersion bağdaştırıcısı bilgi özellikleri artık requestAdapterInfo() çağrıldıktan sonra kullanılabilir. Desteklenen durumlarda:

  • 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 issue dawn:1254 başlıklı makaleye bakın.

  • vkDriverVersion, Vulkan sürücüsünün tedarikçi firma tarafından belirtilen sürüm numarasıdır. Belgeleri ve chromium:327457605 sorununu inceleyin.

Adaptör bilgilerinde vkDriverVersion&#39;ı gösteren https://webgpureport.org ekran görüntüsü.
https://webgpureport.org adresinde gösterilen vkDriverVersion adaptör bilgileri.

Hata düzeltmeleri

layout: "auto" kullanarak eşleşen bindgroup'lar içeren iki ardışık düzen oluşturma, ardından ilk ardışık düzenle bir bindgroup oluşturma ve bunu ikinci ardışık düzende kullanma işlemi artık GPUValidationError hatası veriyor. Bu durum, uygun testler ile düzeltilen bir uygulama hatasıydı. issue dawn:2402 konusuna bakın.

Şafak güncellemeleri

Dawn API'de, wgpuDeviceSetUncapturedErrorCallback ile ayarlanan yakalanmayan hata geri çağırma işlevi, GPU cihaz kaybolduktan sonra artık çağrılmaz. Bu düzeltme, Dawn'u JavaScript API spesifikasyonu ve Blink'in uygulamasıyla uyumlu hale getirir. issue dawn:2459 konusuna bakın.

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

WebGPU'daki Yenilikler

WebGPU'daki Yenilikler serisinde ele alınan tüm konuların listesi.

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