WebGPU'daki (Chrome 124) Yenilikler

François Beaufort
François Beaufort

Salt okuma ve okuma-yazma depolama dokuları

Depolama doku bağlama türü, gölgelendiricilerin TEXTURE_BINDING kullanımını eklemeden depolama dokularından okumasına ve belirli biçimlerde karma okuma ve yazma işlemleri gerçekleştirmesine olanak tanır. "readonly_and_readwrite_storage_textures" WGSL dil uzantısı navigator.gpu.wgslLanguageFeatures içinde mevcut olduğunda, bir bağlama grubu düzeni oluştururken artık GPUStorageTexture erişimini "read-write" veya "read-only" olarak ayarlayabilirsiniz. Daha önce bu işlem "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ıma sunulmuştur.

Taşınabilirlik potansiyelini belirtmek için WGSL gölgelendirici kodunuzun en üstünde requires readonly_and_readwrite_storage_textures; ile bir requires-directive yönergesini kullanmanız önerilir. Aşağıdaki örneği inceleyin ve issue dawn:1972'yi inceleyin.

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'lar ve paylaşılan çalışan desteği

Chrome'daki WebGPU, artık hem hizmet çalışanları hem de paylaşılan çalışanlar için destek sunarak web çalışanları desteğini bir üst seviyeye taşıyor. Arka plan görevlerini ve çevrimdışı özellikleri geliştirmek için Service Worker'ları, komut dosyaları arasında verimli kaynak paylaşımı için de paylaşılan çalışanları kullanabilirsiniz. Sorun chromium:41494731 bölümüne bakın.

Uzantı hizmet çalışanında WebGPU'nun nasıl kullanılacağını görmek için Chrome uzantı ö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 adresinde "WebGPU Geliştirici Özellikleri" işaretini etkinleştirdiyse requestAdapterInfo() çağrılırken standart olmayan d3dShaderModel ve vkDriverVersion bağdaştırıcı bilgisi özellikleri artık 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. Dokümanlara ve issue şawn:1254'e göz atın.

  • vkDriverVersion, Vulkan sürücüsünün satıcı tarafından belirtilen sürüm numarasıdır. Belgelere ve chromium:327457605 sorunlarını inceleyin.

Bağdaştırıcı bilgilerinde vkDriverVersion&#39;ın yer aldığı https://webgpureport.org adresinin ekran görüntüsü.
Bağdaştırıcı bilgileri vkDriverVersion https://webgpureport.org adresinde gösterilmektedir.

Hata düzeltmeleri

layout: "auto" kullanarak eşleşen bağlantı gruplarına sahip iki ardışık düzen oluşturmak, ardından ilk ardışık düzen ile bir bağlama grubu oluşturmak ve bunu ikinci ardışık düzende kullanmak artık GPUValidationError'u oluşturur. Bu hatanın verilmesi bir uygulama hatasıydı ve uygun testlerle düzeltildi. issue dawn:2402'yi inceleyin.

Dawn ile ilgili güncellemeler

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

Burada, öne çıkan özelliklerin yalnızca bir kısmı ele alınıyor. Kayıtların kapsamlı listesine göz atın.

WebGPU'daki Yenilikler

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

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