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 ve üretimde kullanılmamalıdır.
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-features
bölümünde "WebGPU Geliştirici Özellikleri" bayrakını etkinleştirin.- Chrome tarayıcıyı yeniden başlatın.
Zaman damgası sorgularının kesirli sayılara dönüştürülmesini 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 nanosaniyeye kadar 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 zaman damgası sorguları başlıklı makaleyi inceleyin.
Zamanlama saldırısı endişeleri nedeniyle zaman damgası sorguları 100 mikrosaniyelik bir çözünürlükle kesirli hale getirilir. Bu, hassasiyet ve güvenlik arasında iyi bir uzlaşma sağlar. Bu kesme işlemi, "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ının daha ayrıntılı bir şekilde anlaşılması için GPUAdapterInfo aşağıdaki özellikleri gösterir:
device
özelliği (standartlaştırılmış), satıcıya özgü 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ü tanımlar:"discrete GPU"
,"integrated GPU"
,"CPU"
veya"unknown"
.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 firma tarafından belirtilen Vulkan sürücü sürümüdür.powerPreference
özelliği (standartlaştırılmamış), GPURequestAdapterOptions parametresindeki GPUPowerPreference'e bağlı olarak"low-power"
veya"high-performance"
değerini alır.
Uygulamanızın geliştirilmesi sırasında büyük miktarlar ayırırken bellek sınırlamalarını öngörmek için GPUAdapterInfo, adaptörde bulunan bellek yığınlarının boyutu ve türü gibi standart olmayan memoryHeaps
bilgileri gösterir.
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) { /* ... */ }
}
Gölgelendirici modülü derleme seçeneği katı matematik
GPUShaderModuleDescriptor, gölgelendirici modülü derleme sırasında katı matematiksel hassasiyeti etkinleştiren veya devre dışı bırakan standartlaştırılmamış bir strictMath
boole seçeneği içerir. Bu seçenek Metal ve Direct3D'de desteklenir. strictMath
etkinleştirildiğinde derleyici, kesin matematik kurallarına uyar. Aksine, bu özelliği devre dışı bırakmak derleyicinin gölgelendiricileri aşağıdaki şekilde optimize etmesine olanak tanır:
- NaN ve Infinity değerlerinin olasılığı yoksayılır.
- -0 değerinin +0 olarak değerlendirilmesi.
- Bölme işleminin, ters değerle çarpma işlemiyle değiştirilmesi.
- İşlemleri ilişkilendirme ve dağıtma özelliklerine göre 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 });
Videoyu kopyalamaya gerek kalmadan içe aktarma
GPUExternalTexture isZeroCopy
standart olmayan boole özelliği, importExternalTexture() ile içe aktarılan videoya GPU'nun ara kopya oluşturmadan doğrudan erişip erişmediğ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');
}