WebGPU'daki yenilikler (Chrome 144)

François Beaufort
François Beaufort

Yayınlanma tarihi: 7 Ocak 2026

WGSL subgroup_id uzantısı

WGSL dil uzantısı subgroup_id, subgroups uzantısı etkinleştirildiğinde iş gruplarında aşağıdaki yeni yerleşik değerleri kullanmanıza olanak tanır:

  • subgroup_id: Geçerli çalışma grubu içindeki bir çağırma alt grubunun kimliğini sağlar.
  • num_subgroups: Çalışma grubunda bulunan alt grup sayısını bildirir.

Daha önce, alt grup çağırma kimliklerini kullanarak belleği dizine eklemek için çakışan bellek erişimlerini önlemek amacıyla bir alt grup kimliğini yeniden oluşturmanız (genellikle atomik işlemler aracılığıyla) gerekiyordu. Artık bu denklemin diğer yarısını doldurmak için subgroup_id kullanabilirsiniz. Bu işlevsellik henüz D3D arka ucunda kullanılamadığından orada emüle edilir. local_invocation_index ile subgroup_invocation_id + subgroup_size * subgroup_id arasında eşdeğerlik oluşturmak güvenli olmalıdır. Alt grupların tam olmadığı durumlar olabileceğini unutmayın.

Bu dil uzantısı, navigator.gpu.wgslLanguageFeatures kullanılarak özellik algılama işlemine tabi tutulabilir. WGSL gölgelendirici kodunuzun en üstünde requires subgroup_id; ile taşınabilirlik dışı olma olasılığını belirtmek için requires-directive kullanmanız önerilir. Aşağıdaki örneğe ve gönderme amacı'na bakın.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_id")) {
  throw new Error(`WGSL subgroup_id and num_subgroups built-in values are not available`);
}

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

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

  @compute @workgroup_size(64, 1, 1)
  fn main(@builtin(subgroup_id) subgroup_id : u32,
          @builtin(num_subgroups) num_subgroups : u32) {
    // TODO: Use subgroup_id and num_subgroups values.
  }`,
});

WGSL uniform_buffer_standard_layout uzantısı

WGSL dil uzantısı uniform_buffer_standard_layout, tek tip arabelleklerin depolama arabellekleriyle aynı bellek düzeni kısıtlamalarını kullanmasına olanak tanır. Bu sayede, her iki tür arabelleklerdeki veri yapılarının paylaşılması kolaylaşır. Bu, tek tip arabelleklerin artık dizi öğelerinde 16 baytlık hizalamaya sahip olmasının veya iç içe yerleştirilmiş yapı ofsetlerinin 16 baytın katı olacak şekilde doldurulmasının gerekmediği anlamına gelir.

Bu dil uzantısı, navigator.gpu.wgslLanguageFeatures kullanılarak özellik algılama işlemine tabi tutulabilir. WGSL gölgelendirici kodunuzun en üstünde requires uniform_buffer_standard_layout; ile taşınabilirlik dışı olma olasılığını belirtmek için requires-directive kullanmanız önerilir. Aşağıdaki örneğe ve gönderme amacı'na bakın.

if (!navigator.gpu.wgslLanguageFeatures.has("uniform_buffer_standard_layout")) {
  throw new Error(`WGSL uniform buffer standard layout is not available`);
}

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

const shaderModule = device.createShaderModule({ code: `
  requires uniform_buffer_standard_layout;

  struct S {
      x: f32
  }
  struct Uniforms {
      a: S,
      b: f32
      // b is at offset 4. Without standard layout, alignment rules would
      // force b to be at offset 16 (or a multiple of 16), and you would have
      // to add extra fields or use an @align attribute.
  }

  @group(0) @binding(0) var<uniform> u: Uniforms;

  @fragment fn fs_main() -> @location(0) vec4<f32> {
      return vec4<f32>(u.a.x);
  }`,
});

Linux'ta WebGPU

Chrome Ekibi, Linux için WebGPU'yu dikkatli bir şekilde kullanıma sunuyor. İlk olarak Intel Gen12+ GPU'lar için destek sunuluyor ancak daha fazla cihaz (AMD, NVIDIA) için destek sunulması da planlanıyor. Bu uygulamada, WebGPU'nun Vulkan'ı kullandığı ve Chromium'un geri kalanının OpenGL'de kaldığı, iyi bilinen mevcut kod yollarını kullandığı bir mimari kullanılır. 442791440 numaralı sorunu inceleyin.

Daha hızlı writeBuffer ve writeTexture

writeBuffer() ve writeTexture(), Chrome'da optimize edildi. Bu sayede, aktarılan verilerin boyutuna bağlı olarak önceki sürüme kıyasla 2 kat daha iyi performans elde edildi. Bu değişiklik, Dawn Wire uygulamasının tüm kullanıcılarını da etkiler. 441900745 numaralı soruna bakın.

Dawn ile ilgili güncellemeler

Android GPU ekibi, Android'de WebGPU için Jetpack kullanılarak kullanılabilen Kotlin bağlamalarının ilk alfa sürümünü yayınladı. androidx.webgpu paketi, Android geliştiricilere Kotlin kullanarak modern bir GPU API'sine erişim imkanı sunar. Bu sayede OpenGL'in eski sorunları veya Vulkan'ın karmaşıklığı atlanır. Bu, ekosistem için heyecan verici bir gelişmedir.

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 tüm konuların listesi.

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