WebGPU'daki Yenilikler (Chrome{6/}128)

François Beaufort
François Beaufort

Alt gruplarla deneme yapma

Alt gruplar özelliği, SIMD düzeyinde paralelliği etkinleştirerek bir gruptaki iş parçacıklarının iletişim kurmasına ve toplu matematik işlemleri (ör. 16 sayının toplamını hesaplama) gerçekleştirmesine olanak tanır. Bu, iş parçacıkları arası veri paylaşımının son derece etkili bir biçimidir.

Alt gruplar önerisinin minimum düzeyde uygulanmış hali, chrome://flags/#enable-unsafe-webgpu adresindeki "Unsafe WebGPU Support" işaretiyle yerel test için kullanılabilir.

Ayrıca kaynak denemesine kaydolarak sitenizdeki alt grupları gerçek kullanıcılarla deneyebilirsiniz. Sitenizi kaynak denemelerini kullanmaya hazırlama talimatları için Kaynak denemelerini kullanmaya başlama başlıklı makaleyi inceleyin. Kaynak denemesi, Chrome 128'den 131'e kadar (19 Şubat 2025'te sona erecek) devam edecek. Deneme Yapma Amacı başlıklı makaleyi inceleyin.

"subgroups" özelliği GPUAdapter içinde kullanılabildiğinde, WGSL'de alt grup desteği almak için bu özelliği içeren bir GPUDevice isteyin ve minSubgroupSize ile maxSubgroupSize sınırlarını kontrol edin.

Ayrıca, bu uzantıyı enable subgroups; ile WGSL kodunuzda açıkça etkinleştirmeniz gerekir. Bu ayar etkinleştirildiğinde aşağıdaki ek özelliklere erişebilirsiniz:

  • subgroup_invocation_id: Alt gruptaki ileti dizisinin dizini için yerleşik bir değer.
  • subgroup_size: Alt grup boyutu erişimi için yerleşik bir değer.
  • subgroupBallot(value): subgroup_invocation_id öğesine karşılık gelen bitin, söz konusu etkin çağırma için value doğruysa 1, aksi takdirde 0 olduğu bir bit alanı kümesi döndürür.
  • subgroupBroadcast(value, id): subgroup_invocation_id ile çağırmadan id eşleşen value değerini alt gruptaki tüm çağırmalara yayınlar. Not: id derleme zamanında sabit olmalıdır.

Gelecekte subgroupAdd, subgroupAll, subgroupElect, subgroupShuffle gibi daha fazla yerleşik işlev eklenecektir. 354738715 numaralı soruna bakın.

Alt gruplar işlemlerinde f16'ya izin vermek için "subgroups", "subgroups-f16" ve "shader-f16" özellikleriyle GPUDevice isteğinde bulunun, ardından enable f16, subgroups, subgroups_f16; ile WGSL kodunuzda etkinleştirin.

Aşağıdaki kod snippet'i, alt grupların potansiyelini keşfetmek ve üzerinde denemeler yapmak için bir temel sağlar.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;

  var<workgroup> wgmem : u32;

  @group(0) @binding(0)
  var<storage, read> inputs : array<u32>;

  @group(0) @binding(1)
  var<storage, read_write> output : array<u32>;

  @compute @workgroup_size(64)
  fn main(@builtin(subgroup_size) subgroupSize : u32,
          @builtin(subgroup_invocation_id) id : u32,
          @builtin(local_invocation_index) lid : u32) {
    // One thread per workgroup writes the value to workgroup memory.
    if (lid == 0) {
      wgmem = inputs[lid];
    }
    workgroupBarrier();
    var v = 0u;

    // One thread per subgroup reads the value from workgroup memory
    // and shares that value with every other thread in the subgroup
    // to reduce local memory bandwidth.
    if (id == 0) {
      v = wgmem;
    }
    v = subgroupBroadcast(v, 0);
    output[lid] = v;
  }`,
});

// Send the appropriate commands to the GPU...

Çizgiler ve noktalar için derinlik önyargısı ayarını kullanımdan kaldırma

Bir WebGPU spesifikasyon değişikliği, bir oluşturma ardışık düzeninin topolojisi çizgi veya nokta türündeyken depthBias, depthBiasSlopeScale ve depthBiasClamp değerlerinin sıfır olmayan bir değere ayarlanmasını doğrulama hatası haline getirir. Geliştiricilere kodlarını güncellemek için yeterli zaman tanımak amacıyla, bu yaklaşan doğrulama hakkında DevTools Konsolu'nda bir uyarı gösterilir. Ayrıca, bu durumlarda değerler 0'a zorlanır. 352567424 numaralı soruna bakın.

preventDefault kullanılıyorsa yakalanmamış hata DevTools uyarısını gizle

uncapturederror için bir etkinlik işleyici kaydedilmişse ve etkinlik işleyici geri aramasında Etkinlik preventDefault() yöntemi çağrılmışsa artık DevTools Konsolu'nda uncapturederror etkinlikleriyle ilgili uyarılar gösterilmez. Bu davranış, JavaScript'teki etkinlik işleme ile eşleşir. Aşağıdaki örneğe ve 40263619 numaralı soruna bakın.

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

device.addEventListener("uncapturederror", (event) => {
  // Prevents browser warning to show up in the DevTools Console.
  event.preventDefault();

  // TODO: Handle event.error
});

WGSL, önce örnekleme interpolasyonu ve ardından

WGSL interpolate özelliği, kullanıcı tanımlı G/Ç verisi enterpolasyonunu yönetmenize olanak tanır. Yeni enterpolasyon örnekleme parametreleri first (varsayılan) ve either artık size ek kontrol imkanı sunuyor: first, öğenin ilk köşe noktasının değerini kullanırken either, ilk veya son köşe noktasını kullanmanıza olanak tanır. 340278447 numaralı sorunu inceleyin.

Dawn ile ilgili güncellemeler

Asenkron işlemleri yönetmek için Dawn'ın WGPUFuture'ı uygulama işlemi tamamlandı. Fırsatçı etkinlik işleme için wgpuInstanceProcessEvents ve geri çağırma konumlarını tanımlamak için WGPUCallbackMode temel kavramlar arasında yer alır. WGPUFuture, sınırsız kullanım ömrüne sahip tek seferlik etkinlikleri ifade eder ve wgpuInstanceWaitAny, gelecekteki herhangi bir etkinliğin tamamlanmasını veya zaman aşımını bekler. 42240932 numaralı sorunu inceleyin.

CompositeAlphaMode::Auto değeri artık Surface::GetCapabilities() tarafından bildirilmiyor. Hâlâ geçerli ve Surface::GetCapabilities().alphaMode[0] ile eşdeğerdir. 292 numaralı soruna bakın.

OpenGL arka ucu artık her Present() çağrısı için y ekseninde çevrilmiş bir blit ile Surface'yi destekliyor. 344814083 numaralı sorunu inceleyin.

Adapter::GetProperties() yönteminin desteği sonlandırıldı. Bunun yerine Adapter::GetInfo() yöntemini kullanın.

Harici bir katkıda bulunan olan Jaswant, tüm CMake dosyalarını yeniden yazarak güncellemeyi kolaylaştırdı ve önceden derlemeye olanak tanıdı. CMake projelerinde Dawn'ı kullanma hızlı başlangıç kılavuzuna göz atın.

Bu, yalnızca önemli noktalardan bazılarını kapsar. Kapsamlı commit listesine göz atın.

WebGPU'daki yenilikler

WebGPU'daki Yenilikler serisinde ele alınan tüm konuların listesi.

Chrome 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113