Yang Baru di WebGPU (Chrome 137)

François Beaufort
François Beaufort

Dipublikasikan: 26 Mei 2025

Menggunakan tampilan tekstur untuk pengikatan externalTexture

GPUTextureView yang kompatibel (2D, subresource tunggal) kini dapat digunakan sebagai pengganti binding GPUExternalTexture saat membuat GPUBindGroup.

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

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

Menyalin buffer tanpa menentukan offset dan ukuran

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

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 memuat nilai yang ditunjukkan oleh ptr secara atomik dan menampilkannya ke semua pemanggilan dalam workgroup, dengan ptr adalah pointer-to-atomic di dalam variabel workgroup. 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 tanda "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 dalam 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 GPURequestAdapterOptions compatibilityMode

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

Update Dawn

Developer dapat membuat project WebGPU dalam bahasa seperti C++, menggunakan webgpu.h untuk menargetkan WebAssembly dan platform tertentu. "emdawnwebgpu" ("Emscripten Dawn WebGPU") yang baru dirilis Dawn menerapkan webgpu.h terstandarisasi terbaru melalui browser API.

Emdawnwebgpu adalah fork (yang dipertahankan) dari binding bawaan Emscripten (yang kini tidak dipertahankan) (USE_WEBGPU). Semua pengembangan baru dilakukan di emdawnwebgpu, dan binding bawaan Emscripten akan dihapus saat developer beralih ke emdawnwebgpu. Header C Emdawnwebgpu sangat mirip dengan header C Dawn, sedangkan binding bawaan sudah jauh ketinggalan zaman.

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 Membangun aplikasi dengan WebGPU yang telah diperbarui.

Hal ini hanya mencakup beberapa sorotan utama. Lihat daftar commit yang lengkap.

Yang Baru di WebGPU

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

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