Yang Baru di WebGPU (Chrome 135)

François Beaufort
François Beaufort

Dipublikasikan: 26 Maret 2025

Mengizinkan pembuatan tata letak pipeline dengan tata letak grup pengikatan null

Sebelumnya, membuat tata letak grup pengikatan kosong memerlukan penambahan grup pengikatan dengan nol binding, yang tidak praktis. Hal ini tidak lagi diperlukan karena tata letak grup pengikatan null kini diizinkan dan diabaikan saat membuat tata letak pipeline. Hal ini akan mempermudah pengembangan.

Misalnya, Anda mungkin ingin membuat pipeline yang hanya menggunakan tata letak grup pengikatan 0 dan 2. Anda dapat menetapkan tata letak grup pengikatan 1 ke data fragmen dan tata letak grup pengikatan 2 ke data vertex, lalu merender tanpa shader fragmen. Lihat masalah 377836524.

const bgl0 = myDevice.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = myDevice.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = myDevice.createBindGroupLayout({ entries: myVertexEntries });

// Create a pipeline layout that will be used to render without a fragment shader.
const myPipelineLayout = myDevice.createPipelineLayout({
  bindGroupLayouts: [bgl0, null, bgl2],
});

Mengizinkan area tampilan untuk meluas di luar batas target render

Persyaratan untuk validasi area pandang telah dilonggarkan untuk memungkinkan area pandang melampaui batas target render. Hal ini sangat berguna untuk menggambar elemen 2D seperti UI yang dapat meluas di luar area pandang saat ini. Lihat masalah 390162929.

const passEncoder = myCommandEncoder.beginRenderPass({
  colorAttachments: [
    {
      view: myColorTexture.createView(),
      loadOp: "clear",
      storeOp: "store",
    },
  ],
});

// Set a viewport that extends past the render target's bounds by 8 pixels
// in all directions.
passEncoder.setViewport(
  /*x=*/ -8,
  /*y=*/ -8,
  /*width=*/ myColorTexture.width + 16,
  /*height=*/ myColorTexture.height + 16,
  /*minDepth=*/ 0,
  /*maxDepth=*/ 1,
);

// Draw geometry and complete the render pass as usual.

Akses yang lebih mudah ke mode kompatibilitas eksperimental di Android

Flag chrome://flags/#enable-unsafe-webgpu saja kini mengaktifkan semua kemampuan yang diperlukan untuk mode kompatibilitas WebGPU eksperimental di Android. Dengan begitu, Anda dapat meminta GPUAdapter dalam mode kompatibilitas dengan opsi featureLevel: "compatibility" dan bahkan mendapatkan akses ke backend OpenGL ES di perangkat yang tidak memiliki dukungan untuk Vulkan. Lihat contoh berikut dan masalah dawn:389876644.

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
Halaman laporan WebGPU menampilkan GPUAdapter dalam mode kompatibilitas di perangkat Android.
Info adaptor mode kompatibilitas di webgpureport.org.

Menghapus batas maxInterStageShaderComponents

Seperti yang diumumkan sebelumnya, batas maxInterStageShaderComponents dihapus karena kombinasi faktor berikut:

  • Redundansi dengan maxInterStageShaderVariables: Batas ini sudah memiliki tujuan yang serupa, yaitu mengontrol jumlah data yang diteruskan di antara tahap shader.
  • Perbedaan kecil: Meskipun ada sedikit perbedaan dalam cara penghitungan kedua batas tersebut, perbedaan ini kecil dan dapat dikelola secara efektif dalam batas maxInterStageShaderVariables.
  • Penyederhanaan: Menghapus maxInterStageShaderComponents akan menyederhanakan antarmuka shader dan mengurangi kompleksitas bagi developer. Daripada mengelola dua batas terpisah dengan perbedaan yang halus, mereka dapat berfokus pada maxInterStageShaderVariables yang lebih tepat namanya dan komprehensif.

Lihat rencana penghapusan dan masalah 364338810.

Update fajar

Anda tidak dapat lagi menggunakan sampler pemfilteran untuk mengambil sampel tekstur kedalaman. Sebagai pengingat, tekstur kedalaman hanya dapat digunakan dengan sampler perbandingan atau non-pemfilteran. Lihat masalah 379788112.

Struktur WGPURequiredLimits dan WGPUSupportedLimits telah diratakan menjadi WGPULimits. Lihat masalah 374263404.

Struktur berikut telah diganti namanya. Lihat masalah 42240793.

  • WGPUImageCopyBuffer sekarang menjadi WGPUTexelCopyBufferInfo
  • WGPUImageCopyTexture sekarang menjadi WGPUTexelCopyTextureInfo
  • WGPUTextureDataLayout sekarang menjadi WGPUTexelCopyBufferLayout

Anggota subgroupMinSize dan subgroupMaxSize telah ditambahkan ke struct WGPUAdapterInfo. Lihat PR webgpu-headers.

Pelacakan penggunaan Dawn API di Metal kini dapat dilakukan saat menjalankan program dengan variabel lingkungan DAWN_TRACE_FILE_BASE yang menyimpan file .gputrace yang dapat dimuat nanti ke Metal Debugger XCode. Lihat dokumentasi Debugging Dawn.

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