WebGPU'da Yenilikler (Chrome 137)

François Beaufort
François Beaufort

Yayınlanma tarihi: 26 Mayıs 2025

externalTexture bağlama için doku görünümünü kullanma

GPUBindGroup oluşturulurken GPUExternalTexture bağlaması yerine artık uyumlu bir GPUTextureView (2D, tek alt kaynak) kullanılabilir.

Bu, hem GPUExternalTexture (kaynak video için) hem de GPUTextureView (ara işleme için) öğelerinin işlenmesi gereken video efektleri işlem hatlarındaki gölgelendirici mantığını basitleştirir. Ayrıca, dokunun nereden geldiğine bağlı olarak gölgelendiricileri dinamik olarak derleme ihtiyacını da azaltır. Intent to Ship: WebGPU: GPUTextureView for externalTexture binding (Yayınlama Niyeti: WebGPU: externalTexture bağlama için GPUTextureView) başlıklı makaleyi inceleyin.

const texture = myDevice.createTexture({
  size: [42, 42],
  format: navigator.gpu.getPreferredCanvasFormat(),
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});

const code = `
@group(0) @binding(0) var texture : texture_external;
@group(0) @binding(1) var<storage, read_write> buffer: vec2u;
    
@compute @workgroup_size(1) fn main() {
  buffer = textureDimensions(texture);
}`;

const pipeline = myDevice.createComputePipeline({
  layout: "auto",
  compute: { module: myDevice.createShaderModule({ code }) },
});

const bindGroup = myDevice.createBindGroup({
  layout: pipeline.getBindGroupLayout(0),
  entries: [
    { binding: 0, resource: texture.createView() }, // Use texture view for an externalTexture binding
    { binding: 1, resource: { buffer: myBuffer } },
  ],
});

Ofsetleri ve boyutu belirtmeden arabelleğe kopyalama

Yeni bir GPUCommandEncoder yöntemi aşırı yüklemesi, geliştiricilerin copyBufferToBuffer() kullanırken ofset ve boyut parametrelerini atlamasına olanak tanıyarak tüm arabelleklerin kopyalanmasını kolaylaştırır. Intent to Ship: WebGPU: copyBufferToBuffer overload başlıklı makaleyi inceleyin.

const size = 42;
const srcBuffer = myDevice.createBuffer({
  size,
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const dstBuffer = myDevice.createBuffer({
  size,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Copy entire buffer.
myCommandEncoder.copyBufferToBuffer(srcBuffer, dstBuffer);

// This is the same as the following.
// myCommandEncoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, size);

WGSL workgroupUniformLoad, atomik işaretçi kullanıyor

Geliştiricilerin rahatlığı için WGSL'ye yeni bir workgroupUniformLoad(ptr) aşırı yüklemesi eklendi. ptr tarafından işaret edilen değeri atomik olarak yükler ve iş grubu değişkeni içindeki atomik bir işaretçi olan ptr'nın bulunduğu iş grubundaki tüm çağırmalara döndürür. 408241039 numaralı soruna bakın.

@group(0) @binding(0) var<storage, read_write> buffer : array<u32, 1>;

var<workgroup> wgvar : atomic<u32>;

@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_index) lid: u32) {
  if (lid == 0) {
    atomicStore(&(wgvar), 42u);
  }
  buffer[lid] = workgroupUniformLoad(&wgvar);
}

GPUAdapterInfo powerPreference özelliği

Standart olmayan powerPreference GPUAdapterInfo dize özelliği, kullanıcı chrome://flags/#enable-webgpu-developer-features adresinde "WebGPU Developer Features" (WebGPU Geliştirici Özellikleri) işaretini etkinleştirdiğinde kullanılabilir. Destekleniyorsa powerPreference değeri, GPURequestAdapterOptions içinde kullanılan GPUPowerPreference değerine bağlı olarak "low-power" veya "high-performance" olabilir. CL 6438860 numaralı kayda bakın.

function checkPowerPreferenceForGpuDevice(device) {
  const powerPreference = device.adapterInfo.powerPreference;
  if (powerPreference === "high-performance") {
    // High-performance GPU detected. Enabling enhanced graphics settings.
  } else if (powerPreference === "low-power") {
    // Low-power GPU detected. Optimizing for battery life.
  }
}

GPURequestAdapterOptions compatibilityMode özelliğini kaldırın

Deneysel GPURequestAdapterOptions compatibilityMode özelliği, Chrome 133'te eklenen standartlaştırılmış featureLevel özelliği lehine kaldırıldı. 366151404 numaralı sorunu inceleyin.

Dawn güncellemeleri

Geliştiriciler, hem WebAssembly'yi hem de belirli platformları hedeflemek için webgpu.h'yi kullanarak C++ gibi dillerde WebGPU projeleri oluşturabilir. Dawn'un yeni yayınlanan "emdawnwebgpu" ("Emscripten Dawn WebGPU") sürümü, tarayıcı API'si üzerinden en son standartlaştırılmış webgpu.h'yi uygular.

Emdawnwebgpu, Emscripten'in (artık desteklenmeyen) yerleşik bağlamalarının (USE_WEBGPU) (bakımı yapılan) bir çatallanmış sürümüdür. Tüm yeni geliştirmeler emdawnwebgpu üzerinde yapılmaktadır ve geliştiriciler emdawnwebgpu'ya geçiş yaptıkça Emscripten'in yerleşik bağlamaları kaldırılacaktır. Emdawnwebgpu'nun C üstbilgisi Dawn'ınkine çok yakınken yerleşik bağlamalar önemli ölçüde eski.

emdawnwebgpu'yu Dawn'ın GitHub yayınları sayfasından indirin ve nasıl kullanacağınızla ilgili bilgi edinmek için paketin README.md dosyasını okuyun. Kaynak dosyaları Dawn deposunda bulabilirsiniz.

Kapsamlı bir kılavuz için güncellenmiş WebGPU ile uygulama oluşturma dokümanına göz atı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