Fitur Developer WebGPU

François Beaufort
François Beaufort

Dipublikasikan: 3 Juni 2025

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

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

Prasyarat

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

  1. Aktifkan tanda "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 waktu eksekusi perintah GPU secara akurat (hingga nanodetik) selama proses komputasi dan rendering. Kueri ini penting untuk menganalisis performa dan perilaku workload GPU. Untuk mengetahui detail selengkapnya, lihat Kueri stempel waktu dalam proses komputasi dan rendering.

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

Informasi adaptor yang diperluas

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

  • Atribut device (diseragamkan) 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 (non-standar) menentukan nomor 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 (non-standar) adalah "low-power" atau "high-performance", berdasarkan GPUPowerPreference di GPURequestAdapterOptions.

Untuk mengantisipasi batasan memori saat mengalokasikan 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 yang tidak 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 akurat. 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 kebalikannya.
  • Mengatur ulang operasi berdasarkan properti 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');
}