Yang Baru di WebGPU (Chrome 153-154)

François Beaufort
François Beaufort

Dipublikasikan: 15 September 2026

Ekstensi buffer_view WGSL

Ekstensi bahasa WGSL buffer_view memungkinkan data variabel seragam, penyimpanan, atau grup kerja ditafsirkan sebagai beberapa jenis yang berbeda. Hal ini memiliki berbagai kegunaan, mulai dari penggunaan type-punning konvensional hingga mempartisi variabel menjadi beberapa variabel logis.

Untuk keamanan dan kesederhanaan penerapan, jenis yang ditafsirkan ulang hanya dapat diakses menggunakan fungsi bawaan berikut:

  • bufferView<T>() menafsirkan memori pada offset byte tertentu sebagai pointer ke jenis T.
  • bufferArrayView<T>() membuat pointer array terbatas dengan jumlah elemen eksplisit.
  • bufferLength() menampilkan ukuran byte buffer.

Ekstensi bahasa ini dapat dideteksi fiturnya di JavaScript menggunakan navigator.gpu.wgslLanguageFeatures. Sebaiknya gunakan direktif requires untuk menandakan potensi tidak portabel dengan requires buffer_view; di bagian atas kode shader WGSL Anda. Lihat contoh WGSL berikut dan niat untuk meluncurkan.

requires buffer_view;

//  +-------------------+-----------------------------+----------------------------+
//  | Byte 0 .. 3       | Byte 4 .. (4 + N - 1)       | Byte (4 + N) .. End        |
//  +-------------------+-----------------------------+----------------------------+
//  | indices_size (u32)| indices (array<u32, count>) | vertices (array<f32>)      |
//  +-------------------+-----------------------------+----------------------------+
@group(0) @binding(0) var<storage> indices_and_vertices : buffer;

fn unpack_and_process_geometry() {
  let indices_size = *bufferView<u32>(&indices_and_vertices, 0);

  let indices = bufferArrayView<array<u32>>(&indices_and_vertices, 4, indices_size);
  let vertices = bufferView<array<f32>>(&indices_and_vertices, indices_size + 4);
  ...
}

Anda juga dapat melihat saran tampilan buffer untuk mengetahui detail selengkapnya dan mencoba contoh WebGPU Wireframe.

Ekstensi WGSL swizzle_assignment

Sebagai respons terhadap salah satu fitur komunitas yang paling banyak diminta, ekstensi WGSL swizzle_assignment memungkinkan Anda menulis langsung ke pengubahan vektor, sehingga Anda dapat memperbarui beberapa komponen dalam satu pernyataan. Hal ini secara drastis mengurangi boilerplate dan meningkatkan keterbacaan shader sekaligus menyelaraskan WGSL dengan bahasa shading lainnya.

Ekstensi bahasa ini dapat dideteksi fiturnya di JavaScript menggunakan navigator.gpu.wgslLanguageFeatures. Sebaiknya gunakan direktif requires untuk menandakan potensi tidak portabel dengan requires swizzle_assignment; di bagian atas kode shader WGSL Anda. Lihat contoh WGSL berikut dan niat untuk meluncurkan.

if (!navigator.gpu.wgslLanguageFeatures.has("swizzle_assignment")) {
  throw new Error(`WGSL swizzle assignment is not available`);
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const shaderModule = device.createShaderModule({ code: `
  requires swizzle_assignment;

  @vertex
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
    var position = vec4f(0.0, 0.0, 0.0, 1.0);
    position.xy = vec2f(10.0, 20.0); // Swizzle assignment

    return position;
  }`,
});

Update ekstensi WGSL

Ekstensi bahasa texture-formats-tier1, meskipun didukung dalam kode WGSL, sebelumnya tidak dipetakan dengan benar ke navigator.gpu.wgslLanguageFeatures (sebagai texture_formats_tier1) di JavaScript. Masalah pemetaan ini kini telah diselesaikan. Lihat CL Chromium 8159562.

Ekstensi bahasa subgroups kini diaktifkan secara otomatis saat subgroup_size_control diaktifkan di WGSL. Lihat masalah dawn:545285663.

Info terbaru Dawn

Fitur eksperimental wgpu::FeatureName::BufferMapWriteExtendedUsages baru memungkinkan Anda membuat buffer dengan wgpu::BufferUsage::MapWrite yang dikombinasikan dengan wgpu::BufferUsage lainnya, kecuali wgpu::BufferUsage::MapRead untuk menulis langsung ke buffer yang dapat dipetakan dan juga dapat digunakan GPU, sehingga menghilangkan buffer penyiapan dan salinan tambahan di backend Vulkan dan D3D12. Untuk informasi selengkapnya, lihat Penggunaan yang Diperluas untuk Penulisan Peta Buffer dan masalah dawn:386255678.

Sekarang Anda dapat menggunakan binding webgpu_cpp.h di atas implementasi webgpu.h apa pun, bukan hanya yang terkait dengan varian Dawn, dengan menggunakan webgpu_upstream_cpp_headers baru. Lihat masalah webgpu-headers #596.

Dawn kini memerlukan macOS 13.0 atau yang lebih baru. Lihat Dawn CL 334415.

Ini hanya mencakup beberapa sorotan utama. Lihat daftar commit lengkap untuk mengetahui detail selengkapnya.

Yang Baru di WebGPU

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

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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