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

François Beaufort
François Beaufort

İkili kaynak karıştırma

İki parça gölgelendirici çıkışlarının tek bir çerçeve arabelleğinde birleştirilmesine çift kaynak karıştırma adı verilir. Bu teknik, özellikle Porter-Duff karışım modlarına dayalı olanlar gibi karmaşık karışım işlemleri gerektiren uygulamalar için yararlıdır. İkili kaynak karıştırma, sonraki oluşturma geçişlerini tek bir oluşturma geçişiyle değiştirerek performansı ve esnekliği artırabilir.

Yeni "dual-source-blending" WebGPU özelliği, @location(0) adresindeki WGSL @blend_src özelliğini kullanarak karıştırma kaynak dizini ve aşağıdaki karıştırma faktörlerini ("src1", "one-minus-src1", "src1-alpha" ve "one-minus-src1-alpha") belirtmenize olanak tanır. Aşağıdaki snippet'e, chromestatus girişine ve 341973423 numaralı soruna bakın.

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

const code = `
  enable dual_source_blending;

  struct FragOut {
    @location(0) @blend_src(0) color : vec4f,
    @location(0) @blend_src(1) blend : vec4f,
  }

  @fragment fn main() -> FragOut {
    var output : FragOut;
    output.color = vec4f(1.0, 1.0, 1.0, 1.0);
    output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
    return output;
  }
`;

const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...

Metal'de gölgelendirici derleme süresi iyileştirmeleri

Chrome ekibi, WebGPU gölgelendirici dili derleyicisi Tint'i, Metal arka ucu ile WebGPU'yu destekleyen cihazlar için bir ara temsil (IR) ekleyerek geliştiriyor. Tint'in soyut söz dizimi ağacı (AST) ile Metal arka uç yazarı arasına yerleştirilen bu IR, derleyiciyi daha verimli ve bakımı kolay hale getirerek hem geliştiricilere hem de kullanıcılara fayda sağlayacak. İlk testler, Tint'in yeni sürümünün Unity'nin WGSL gölgelendiricilerini MSL'ye çevirirken 10 kata kadar daha hızlı olduğunu gösteriyor.

Bir akış şeması, WGSL gölgelendirici kodunu düşük düzey GPU talimatlarına dönüştürme işlemini gösterir.
MacOS'te oluşturma ardışık düzeni oluşturma.

Android ve ChromeOS'te halihazırda kullanılabilen bu iyileştirmeler, Metal arka ucu ile WebGPU'yu destekleyen macOS cihazlarına kademeli olarak uygulanıyor. 42251016 numaralı soruna bakın.

GPUAdapter requestAdapterInfo() desteğinin sonlandırılması

Geliştiriciler GPUAdapter info özelliğini kullanarak GPUAdapterInfo'yu zaten senkronize olarak alabildikleri için GPUAdapter requestAdapterInfo() asynkron yöntemi gereksizdir. Bu nedenle, standart olmayan GPUAdapter requestAdapterInfo() yönteminin desteği sonlandırıldı. Kullanımdan kaldırma niyeti bölümüne bakın.

DevTools konsolu, requestAdapterInfo() için desteğin sonlandırılmasıyla ilgili bir uyarı gösterir.
Chrome Geliştirici Araçları'ndaki requestAdapterInfo() için kullanımdan kaldırılan özellik uyarısı.

Şafak güncellemeleri

webgpu.h C API'sinde, uzantı yapıları için bazı adlandırma kuralları tanımlanmıştır. Aşağıdaki ad değişikliklerine ve 42241174 numaralı soruna bakın.

WGPURenderPassDescriptor uzantı
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
WGPUShaderModuleDescriptor uzantı
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
WGPUSurfaceDescriptor uzantı
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

WGPUDepthStencilState öğesinin depthWriteEnabled özellik türü, JavaScript API'de olduğu gibi üç olası durumunu (true, false ve undefined) daha iyi yansıtmak için boole değerinden WGPUOptionalBool değerine geçer. Daha fazla bilgi edinmek için aşağıdaki kod snippet'ine ve webgpu-headers PR'ye bakın.

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

Bu, önemli noktalardan yalnızca 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 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125 sürümü

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115 sürümü

Chrome 114

Chrome 113