WebGPU'daki (Chrome {7}125) Yenilikler

François Beaufort
François Beaufort

WebGPU özelliklerinin sayısı bu sefer biraz az olabilir ancak bazı önemli gelişmeler çok yakında kullanıma sunulacak. Gelecekteki sürümlerde, gölgelendirici derleme hızında iyileştirmeler ve WGPUFuture kullanılarak uygulamanın asenkron modelinde değişiklikler gibi özellikler yer alacak.

Alt gruplar (geliştirme aşamasında olan bir özellik)

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 grup işlemleri modern GPU API'leri tarafından desteklenir ancak adlandırma ve uygulama ayrıntıları farklılık gösterir. Chrome Ekibi, ortak noktaları belirledi ve bu özelliği standartlaştırmak için çalışıyor. Sorularınız varsa öneriyi ve yorumu inceleyin.

Geliştiricilerin denemesi ve geri bildirim paylaşması için chrome://flags/#enable-experimental-web-platform-features adresindeki "Deneysel Web Platformu Özellikleri" işaretinin arkasında, alt grupların minimum düzeyde ve standartlaştırılmamış bir uygulaması vardır. Bunun nedeni, WebGPU bağlamında gerçek dünyadaki faydalarının henüz kanıtlanmamış olmasıdır.

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

Ayrıca, enable chromium_experimental_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 değerine 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.

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("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

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

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

3B doku dilimine oluşturma

Artık GPURenderPassColorAttachment içinde yeni depthSlice üyesiyle, 3D dokuların dilimlerine doğrudan oluşturma geçişlerinde oluşturma yapabilir, böylece özelliklerini yaygın 2D doku oluşturmanın ötesine taşıyabilirsiniz. Bu ekleme, örneğin doğrudan 3D doku hacimlerine oluşturma yaparak voksel tabanlı sahneler ve efektler oluşturmanıza olanak tanır. issue dawn:1020 başlıklı makaleyi inceleyin.

Dawn güncellemeleri

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