WebGPU'da Yenilikler (Chrome 137)

François Beaufort
François Beaufort

Yayınlanma tarihi: 26 Mayıs 2025

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

Artık GPUBindGroup oluştururken GPUExternalTexture bağlaması yerine uyumlu bir GPUTextureView (2D, tek alt kaynak) kullanılmasına izin veriliyor.

Bu, hem GPUExternalTexture (kaynak video için) hem de GPUTextureView'ın (ara işleme için) işlenmesi gereken video efektleri ardışık düzenlerindeki gölgelendirici mantığını basitleştirir. Ayrıca, dokuların kaynağına bağlı olarak gölgelendiricileri dinamik olarak derleme ihtiyacını da azaltır. Yayınlama Niyeti: WebGPU: externalTexture bağlaması 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 } },
  ],
});

Ofset ve boyut belirtmeden kopyalama işlemini arabelleğe alır.

Yeni bir GPUCommandEncoder yöntemi aşırı yüklemesi, geliştiricilerin tüm arabelleklerin kopyasını basitleştirmek için copyBufferToBuffer() kullanırken ofsetleri ve boyut parametrelerini atlamasına olanak tanı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);

Atomik işaretçiyi kullanarak WGSL workgroupUniformLoad

Geliştiricilerin işlerini kolaylaştırmak için WGSL'ye yeni bir workgroupUniformLoad(ptr) aşırı yükleme işlevi eklendi. ptr tarafından işaretlenen değeri atomik olarak yükler ve çalışma grubundaki tüm çağrılara döndürür. Burada ptr, bir çalışma grubu değişkeni içinde atomik işaretçidir. 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 Geliştirici Özellikleri" işaretini etkinleştirdiğinde artık kullanılabilir. Destekleniyorsa powerPreference değeri, GPURequestAdapterOptions parametresinde kullanılan GPUPowerPreference değerine bağlı olarak "low-power" veya "high-performance" olabilir. CL 6438860 dosyasını inceleyin.

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ğinin lehine kaldırıldı. 366151404 numaralı soruna bakın.

Şafak güncellemeleri

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

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

emdawnwebgpu'yu Dawn'un GitHub sürümler sayfasından indirin ve nasıl kullanılacağı hakkında bilgi edinmek için paketin README.md dosyasını okuyun. Kaynak dosyaları Dawn deposunda bulunabilir.

Tam bir kılavuz için güncellenmiş WebGPU ile uygulama oluşturma dokümanlarına göz atın.

Bu, öne çıkan özelliklerden 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 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