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 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:

  1. chrome://flags/#enable-webgpu-developer-features bölümünde "WebGPU Geliştirici Özellikleri" bayrakını etkinleştirin.
  2. 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');
}