Fitur developer WebGPU

François Beaufort
François Beaufort

Dipublikasikan: 3 Juni 2025

Implementasi WebGPU API Chrome mencakup fitur yang ditujukan hanya untuk pengembangan dan pengujian. Fitur ini berada di luar spesifikasi WebGPU standar. Jangan gunakan fitur ini dalam produksi.

Dokumen ini menjelaskan cara mengaktifkan fitur developer WebGPU dan memberikan daftar lengkapnya.

Prasyarat

Untuk mengaktifkan fitur developer WebGPU di Chrome, ikuti langkah-langkah berikut:

  1. Aktifkan flag "Fitur Developer WebGPU" di chrome://flags/#enable-webgpu-developer-features.
  2. Mulai ulang browser Chrome.

Menonaktifkan kuantisasi kueri stempel waktu

Kueri stempel waktu memungkinkan aplikasi WebGPU mengukur secara akurat (hingga nanodetik) waktu eksekusi perintah GPU selama proses komputasi dan rendering. Kueri ini penting untuk menganalisis performa dan perilaku workload GPU. Untuk mengetahui detail selengkapnya, lihat Kueri stempel waktu dalam operasi komputasi dan rendering.

Karena masalah serangan waktu, kueri stempel waktu dikuantisasi dengan resolusi 100 mikrodetik, yang memberikan kompromi yang baik antara presisi dan keamanan. Kuantisasi ini otomatis dinonaktifkan saat tanda "Fitur Developer WebGPU" diaktifkan.

Informasi adaptor yang diperluas

Untuk mendapatkan pemahaman yang lebih mendalam tentang adaptor yang digunakan, GPUAdapterInfo mengekspos atribut berikut:

  • Atribut device (standar) adalah ID adaptor khusus vendor.
  • Atribut description (standar) adalah string yang dapat dibaca manusia yang memberikan detail adaptor.
  • Atribut driver (tidak distandardisasi) adalah string yang dapat dibaca manusia yang menjelaskan driver.
  • Atribut backend (tidak standar) menunjukkan backend grafis, seperti "WebGPU", "D3D11", "D3D12", "metal", "vulkan", "openGL", "openGLES", atau "null".
  • Atribut type (tidak standar) mengidentifikasi jenis GPU: "discrete GPU", "integrated GPU", "CPU", atau "unknown".
  • Atribut d3dShaderModel (tidak standar) menentukan jumlah model shader D3D maksimum yang didukung, misalnya, 62 menunjukkan dukungan HLSL SM 6.2.
  • Atribut vkDriverVersion (tidak distandardisasi) adalah versi driver Vulkan yang ditentukan vendor.
  • Atribut powerPreference (tidak distandardisasi) adalah "low-power" atau "high-performance", berdasarkan GPUPowerPreference di GPURequestAdapterOptions.

Untuk mengantisipasi batasan memori saat mengalokasikan data dalam jumlah besar selama pengembangan aplikasi, GPUAdapterInfo mengekspos informasi memoryHeaps yang tidak standar seperti ukuran dan jenis heap memori yang tersedia di adaptor.

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

for (const { size, properties } of adapter.info.memoryHeaps) {
  console.log(size); // memory heap size in bytes
  if (properties & GPUHeapProperty.DEVICE_LOCAL)  { /* ... */ }
  if (properties & GPUHeapProperty.HOST_VISIBLE)  { /* ... */ }
  if (properties & GPUHeapProperty.HOST_COHERENT) { /* ... */ }
  if (properties & GPUHeapProperty.HOST_UNCACHED) { /* ... */ }
  if (properties & GPUHeapProperty.HOST_CACHED)   { /* ... */ }
}

Opsi kompilasi modul shader matematika ketat

GPUShaderModuleDescriptor menyertakan opsi boolean strictMath non-standar, yang mengaktifkan atau menonaktifkan presisi matematika yang ketat selama kompilasi modul shader. Opsi ini didukung di Metal dan Direct3D. Jika strictMath diaktifkan, compiler akan mematuhi aturan matematika yang tepat. Sebaliknya, menonaktifkannya memungkinkan compiler mengoptimalkan shader dengan:

  • Mengabaikan kemungkinan nilai NaN dan Infinity.
  • Memperlakukan -0 sebagai +0.
  • Mengganti pembagian dengan perkalian yang lebih cepat dengan kebalikan.
  • Menyusun ulang operasi berdasarkan sifat asosiatif dan distributif.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const code = `
  // Examines the bit pattern of the floating-point number to
  // determine if it represents a NaN according to the IEEE 754 standard.
  fn isNan(x : f32) -> bool {
    bool ones_exp = (bitcast<u32>(x) & 0x7f8) == 0x7f8;
    bool non_zero_sig = (bitcast<u32>(x) & 0x7ffff) != 0;
    return ones_exp && non_zero_sig;
  }
  // ...
`;

// Enable strict math during shader compilation.
const shaderModule = device.createShaderModule({ code, strictMath: true });

Mengimpor video dengan zero-copy

Atribut boolean non-standar GPUExternalTexture isZeroCopy memungkinkan Anda mengetahui apakah video yang diimpor dengan importExternalTexture() diakses langsung oleh GPU tanpa memerlukan salinan perantara.

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

const video = document.querySelector('video');
const externalTexture = device.importExternalTexture({ source: video });

if (externalTexture.isZeroCopy) {
  console.log('Video frame was accessed directly by the GPU');
}