WebGPU geliştirici özellikleri

François Beaufort
François Beaufort

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:

  1. chrome://flags/#enable-webgpu-developer-features adresinde "WebGPU Developer Features" flag'ini etkinleştirin.
  2. 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');
}