WebGPU'daki yenilikler (Chrome 153-154)

François Beaufort
François Beaufort

Yayınlanma tarihi: 15 Eylül 2026

WGSL buffer_view uzantısı

WGSL dil uzantısı buffer_view, tek tip, depolama veya çalışma grubu değişkeninin verilerinin birden fazla farklı tür olarak yorumlanmasına olanak tanır. Bu, geleneksel kelime oyunu kullanımlarından bir değişkeni birden fazla mantıksal değişkene bölmeye kadar geniş bir kullanım alanına sahiptir.

Güvenlik ve uygulama kolaylığı için yeniden yorumlanan türlere yalnızca aşağıdaki yerleşik işlevler kullanılarak erişilebilir:

  • bufferView<T>(), belirli bir bayt uzaklığındaki belleği T türünde bir işaretçi olarak yorumlar.
  • bufferArrayView<T>(), açık bir öğe sayısıyla sınırlanmış bir dizi işaretçisi oluşturur.
  • bufferLength(), arabelleğin bayt boyutunu döndürür.

Bu dil uzantısı, navigator.gpu.wgslLanguageFeatures kullanılarak JavaScript'te özellik olarak algılanabilir. WGSL gölgelendirici kodunuzun en üstünde requires buffer_view ile taşınabilirlik dışı olma olasılığını belirtmek için requires-directive kullanmanız önerilir. Aşağıdaki WGSL örneğine ve yayınlama niyetine bakın.

requires buffer_view;

//  +-------------------+-----------------------------+----------------------------+
//  | Byte 0 .. 3       | Byte 4 .. (4 + N - 1)       | Byte (4 + N) .. End        |
//  +-------------------+-----------------------------+----------------------------+
//  | indices_size (u32)| indices (array<u32, count>) | vertices (array<f32>)      |
//  +-------------------+-----------------------------+----------------------------+
@group(0) @binding(0) var<storage> indices_and_vertices : buffer;

fn unpack_and_process_geometry() {
  let indices_size = *bufferView<u32>(&indices_and_vertices, 0);

  let indices = bufferArrayView<array<u32>>(&indices_and_vertices, 4, indices_size);
  let vertices = bufferView<array<f32>>(&indices_and_vertices, indices_size + 4);
  ...
}

Daha fazla bilgi için arabellek görünümü önerisine göz atabilir ve Wireframe WebGPU örneği ile denemeler yapabilirsiniz.

WGSL swizzle_assignment uzantısı

En çok istenen topluluk özelliklerinden biri olan WGSL uzantısı swizzle_assignment, doğrudan vektör swizzle'larına yazmanıza olanak tanır. Böylece tek bir ifadede birden fazla bileşeni güncelleyebilirsiniz. Bu özellik, WGSL'yi diğer gölgelendirme dilleriyle uyumlu hale getirirken standart metinleri önemli ölçüde azaltır ve gölgelendirici okunabilirliğini artırır.

Bu dil uzantısı, navigator.gpu.wgslLanguageFeatures kullanılarak JavaScript'te özellik olarak algılanabilir. WGSL gölgelendirici kodunuzun en üstünde requires swizzle_assignment ile taşınabilirlik dışı olma olasılığını belirtmek için requires-directive kullanmanız önerilir. Aşağıdaki WGSL örneğine ve yayınlama niyetine bakın.

if (!navigator.gpu.wgslLanguageFeatures.has("swizzle_assignment")) {
  throw new Error(`WGSL swizzle assignment is not available`);
}

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

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

  @vertex
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
    var position = vec4f(0.0, 0.0, 0.0, 1.0);
    position.xy = vec2f(10.0, 20.0); // Swizzle assignment

    return position;
  }`,
});

WGSL uzantısı güncellemeleri

WGSL kodunda desteklenen texture-formats-tier1 dil uzantısı, daha önce JavaScript'te navigator.gpu.wgslLanguageFeatures ile (texture_formats_tier1 olarak) düzgün şekilde eşlenmiyordu. Bu eşleme sorunu artık çözüldü. Chromium CL 8159562'ye bakın.

subgroups dil uzantısı, WGSL'de subgroup_size_control etkinleştirildiğinde artık otomatik olarak etkinleştiriliyor. dawn:545285663 numaralı soruna bakın.

Dawn ile ilgili güncellemeler

Yeni wgpu::FeatureName::BufferMapWriteExtendedUsages deneysel özelliği sayesinde, wgpu::BufferUsage::MapWrite ile birleştirilmiş bir arabellek oluşturarak wgpu::BufferUsage::MapRead hariç herhangi bir wgpu::BufferUsage ile doğrudan GPU'nun kullanılabildiği, eşlenebilir bir arabelleğe yazabilirsiniz. Bu sayede, Vulkan ve D3D12 arka uçlarında hazırlama arabelleği ve ek kopya ortadan kaldırılır. Daha fazla bilgi için Buffer Map Write Extended Usages (Arabellek Haritası Yazma İşleminin Genişletilmiş Kullanımları) başlıklı makaleye ve dawn:386255678 numaralı soruna bakın.

Artık yeni webgpu_upstream_cpp_headers kullanarak Dawn'ın temasına bağlı kalmak yerine herhangi bir webgpu.h uygulamasının üzerinde webgpu_cpp.h bağlamalarını kullanabilirsiniz. webgpu-headers issue #596'ya (webgpu-headers sorunu #596) bakın.

Dawn artık macOS 13.0 veya sonraki bir sürümü gerektiriyor. Dawn CL 334415'e bakın.

Bu özet yalnızca önemli noktaların bir kısmını kapsar. Daha fazla bilgi için kapsamlı commit listesine göz atın.

WebGPU'daki yenilikler

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

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