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:
- Aktifkan tanda "Fitur Developer WebGPU" di
chrome://flags/#enable-webgpu-developer-features
. - 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');
}