Yang Baru di WebGPU (Chrome 137)

François Beaufort
François Beaufort

Dipublikasikan: 26 Mei 2025

Menggunakan tampilan tekstur untuk binding externalTexture

GPUTextureView yang kompatibel (2D, satu subresource) kini diizinkan untuk digunakan sebagai pengganti binding GPUExternalTexture saat membuat GPUBindGroup.

Hal ini menyederhanakan logika shader dalam pipeline efek video, tempat GPUExternalTexture (untuk video sumber) dan GPUTextureView (untuk pemrosesan perantara) harus ditangani. Hal ini juga mengurangi kebutuhan untuk mengompilasi shader secara dinamis, bergantung pada asal tekstur. Lihat Intent to Ship: WebGPU: GPUTextureView untuk binding externalTexture.

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 } },
  ],
});

Salin buffering tanpa menentukan offset dan ukuran

Overload metode GPUCommandEncoder baru memungkinkan developer menghilangkan parameter offset dan ukuran saat menggunakan copyBufferToBuffer() untuk menyederhanakan penyalinan seluruh buffering. Lihat Intent to Ship: WebGPU: overload copyBufferToBuffer.

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 menggunakan pointer ke atom

Overload workgroupUniformLoad(ptr) baru di WGSL telah ditambahkan untuk memudahkan developer. Fungsi ini secara atomik memuat nilai yang ditunjuk oleh ptr dan menampilkannya ke semua pemanggilan dalam grup kerja, dengan ptr adalah pointer-to-atomic di dalam variabel grup kerja. Lihat masalah 408241039.

@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);
}

Atribut powerPreference GPUAdapterInfo

Atribut string GPUAdapterInfo powerPreference non-standar kini tersedia saat pengguna telah mengaktifkan flag "Fitur Developer WebGPU" di chrome://flags/#enable-webgpu-developer-features. Jika didukung, nilai powerPreference dapat berupa "low-power" atau "high-performance", bergantung pada nilai GPUPowerPreference yang digunakan di GPURequestAdapterOptions. Lihat CL 6438860.

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.
  }
}

Menghapus atribut compatibilityMode GPURequestAdapterOptions

Atribut compatibilityMode GPURequestAdapterOptions eksperimental telah dihapus dan diganti dengan atribut featureLevel standar yang ditambahkan di Chrome 133. Lihat masalah 366151404.

Update fajar

Developer dapat mem-build project WebGPU dalam bahasa seperti C++, menggunakan webgpu.h untuk menargetkan WebAssembly dan platform tertentu. "emdawnwebgpu" ("Emscripten Dawn WebGPU") yang baru dirilis oleh Dawn mengimplementasikan webgpu.h standar terbaru melalui API browser.

Emdawnwebgpu adalah fork (yang dikelola) dari binding bawaan Emscripten (yang sekarang tidak dikelola) (USE_WEBGPU). Semua pengembangan baru dilakukan di emdawnwebgpu, dan binding bawaan Emscripten akan dihapus saat developer bertransisi ke emdawnwebgpu. Header C Emdawnwebgpu sangat mirip dengan header Dawn, sedangkan binding bawaan sudah sangat usang.

Download emdawnwebgpu dari halaman rilis GitHub Dawn dan baca README.md paket untuk mengetahui informasi tentang cara menggunakannya. File sumber dapat ditemukan di repositori Dawn.

Untuk panduan lengkap, lihat dokumentasi Mem-build aplikasi dengan WebGPU yang telah diperbarui.

Bagian ini hanya membahas beberapa sorotan utama. Lihat daftar commit yang lengkap.

Yang Baru di WebGPU

Daftar semua yang telah dibahas dalam seri Yang Baru di WebGPU.

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