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 verimli bir biçimidir.

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

Ayrıca kaynağı denemeye 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 edecektir. Deneme Yapma Amacı başlıklı makaleyi inceleyin.

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

Ayrıca, enable subgroups; ile bu uzantıyı 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'ye 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 eşleşen id ile çağırmadan gelen value, alt gruptaki tüm çağırmalara yayınlanır. Not: id derleme zamanı sabiti 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 işlem hattının 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 süre tanımak amacıyla DevTools Konsolu'nda bu yaklaşan doğrulama hakkı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ı gizleme

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 örneklemeyi enterpolasyon yapar ve ardından

WGSL interpolate özelliği, kullanıcı tanımlı G/Ç verisi enterpolasyonunu yönetmenize olanak tanır. Şimdi yeni enterpolasyon örnekleme parametreleri first (varsayılan) ve either 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ı soruna bakın.

Dawn güncellemeleri

Eşzamansız işlemleri işlemek 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ındadır. WGPUFuture, sonsuz ömürlü tek seferlik etkinlikleri ifade eder ve wgpuInstanceWaitAny, gelecekteki bir etkinliğin tamamlanmasını veya zaman aşımını bekler. 42240932 numaralı soruna bakın.

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

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

Adapter::GetProperties() yöntemi kullanımdan kaldırılmış, yerine Adapter::GetInfo() getirilmiştir.

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'ı kullanmayla ilgili hızlı başlangıç kılavuzuna göz atın.

Bu özet 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 her şeyin listesi.

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