Yayınlanma tarihi: 3 Haziran 2025
Chrome'un WebGPU API uygulaması, yalnızca geliştirme ve test için tasarlanmış özellikler içerir. Bu özellikler, standart WebGPU spesifikasyonunun dışındadır. Bu özellikleri üretimde kullanmayın.
Bu belgede, WebGPU geliştirici özelliklerinin nasıl etkinleştirileceği ayrıntılı olarak açıklanmakta ve kapsamlı bir liste sunulmaktadır.
Ön koşul
Chrome'da WebGPU geliştirici özelliklerini etkinleştirmek için aşağıdaki adımları uygulayın:
chrome://flags/#enable-webgpu-developer-featuresadresinde "WebGPU Developer Features" flag'ini etkinleştirin.- Chrome tarayıcıyı yeniden başlatın.
Zaman damgası sorgularının nicelleştirilmesini devre dışı bırakma
Zaman damgası sorguları, WebGPU uygulamalarının hesaplama ve oluşturma geçişleri sırasında GPU komutlarının yürütme süresini nanosaniye düzeyinde doğru bir şekilde ölçmesini sağlar. Bu sorgular, GPU iş yükü performansını ve davranışını analiz etmek için gereklidir. Daha fazla bilgi için Hesaplama ve oluşturma geçişlerinde sorgulara zaman damgası ekleme başlıklı makaleyi inceleyin.
Zamanlama saldırısı endişeleri nedeniyle, zaman damgası sorguları 100 mikrosaniye çözünürlükle nicelleştirilir. Bu, hassasiyet ve güvenlik arasında iyi bir denge sağlar. Bu nicelendirme, "WebGPU Developer Features" (WebGPU Geliştirici Özellikleri) işareti etkinleştirildiğinde otomatik olarak devre dışı bırakılır.
Genişletilmiş adaptör bilgileri
Kullanılan bağdaştırıcıyı daha iyi anlamak için GPUAdapterInfo aşağıdaki özellikleri kullanıma sunar:
deviceözelliği (standartlaştırılmış), satıcıya özel bir bağdaştırıcı tanımlayıcısıdır.descriptionözelliği (standartlaştırılmış), adaptör ayrıntılarını sağlayan, kullanıcıların okuyabileceği bir dizedir.driverözelliği (standart olmayan), sürücüyü açıklayan, kullanıcıların okuyabileceği bir dizedir.backendözelliği (standartlaştırılmamış),"WebGPU","D3D11","D3D12","metal","vulkan","openGL","openGLES"veya"null"gibi grafik arka ucunu belirtir.typeözelliği (standartlaştırılmamış), GPU türünü ("discrete GPU","integrated GPU","CPU"veya"unknown") tanımlar.d3dShaderModelözelliği (standartlaştırılmamış), desteklenen maksimum D3D gölgelendirici model numarasını belirtir. Örneğin, 62 değeri HLSL SM 6.2 desteğini gösterir.vkDriverVersionözelliği (standart olmayan), tedarikçi tarafından belirtilen Vulkan sürücü sürümüdür.powerPreferenceözelliği (standartlaştırılmamış), GPURequestAdapterOptions'taki GPUPowerPreference'a bağlı olarak"low-power"veya"high-performance"olur.
Uygulamanızı geliştirirken büyük miktarlarda bellek ayırırken bellek sınırlamalarını tahmin etmek için GPUAdapterInfo, bağdaştırıcıda bulunan bellek yığınlarının boyutu ve türü gibi memoryHeaps standartlaştırılmamış bilgileri kullanıma sunar.
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) { /* ... */ }
}
Shader modülü derleme seçeneği strict math
GPUShaderModuleDescriptor, gölgelendirici modülü derlemesi sırasında katı matematiksel hassasiyeti etkinleştiren veya devre dışı bırakan strictMath standartlaştırılmamış bir boole seçeneği içerir. Bu seçenek Metal ve Direct3D'de desteklenir. strictMath etkinleştirildiğinde derleyici, kesin matematiksel kurallara uyar. Bunun tersine, devre dışı bırakılması derleyicinin gölgelendiricileri şu şekilde optimize etmesine olanak tanır:
- NaN ve Infinity değerlerinin olasılığını yoksayma.
- -0'ı +0 olarak değerlendirir.
- Bölme işlemini, karşılıklı çarpma işlemiyle değiştirme.
- Birleştirme ve dağıtma özelliklerine göre işlemleri yeniden düzenleme.
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 });
Kopyalamadan video içe aktarma
GPUExternalTexture isZeroCopy standartlaştırılmamış boolean özelliği, importExternalTexture() ile içe aktarılan videoya ara kopya gerekmeden doğrudan GPU tarafından erişilip erişilmediğini bildirir.
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');
}