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, Porter-Duff harmanlama modlarına dayalı olanlar gibi karmaşık karıştırma işlemleri gerektiren uygulamalar için özellikle 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, kaynak dizinini ve şu harmanlama faktörlerini belirtmek için @location(0) adresindeki WGSL @blend_src özelliğini kullanmanıza olanak tanır: "src1", "one-minus-src1", "src1-alpha" ve "one-minus-src1-alpha". Aşağıdaki snippet'e, chromestatus girişi'ne 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, Metal arka uçlu WebGPU'yu destekleyen cihazlar için bir ara temsil (IR) sunarak, WebGPU gölgelendirici dil derleyicisi Ton'u geliştiriyor. Tint'in soyut söz dizimi ağacı (AST) ile Metal arka uç yazıcısı arasında konumlandırılan bu IR, derleyiciyi daha verimli ve sürdürülebilir hale getirerek hem geliştiricilerin hem de kullanıcıların yararına olacaktır. İlk testler, Unity'nin WGSL gölgelendiricilerini MSL'ye çevirirken Tint'in yeni sürümünün 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 ardışık düzen 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ı sorunu inceleyin.

GPUAdapter requestAdapterInfo() işlevinin kullanımdan kaldı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.

Geliştirici Araçları konsolunda, requestAdapterInfo() için desteğin sonlandırılmasıyla ilgili bir uyarı görüntüleniyor.
Chrome Geliştirici Araçları'nda requestAdapterInfo() için desteği sonlandırılan özellik uyarısı.

Şafak güncellemeleri

webgpu.h C API'de, uzantı struct'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'ın depthWriteEnabled özellik türü, JavaScript API'sindeki üç olası durumunu (doğru, yanlış ve tanımlanmamış) daha iyi yansıtmak için boole yerine WGPUOptionalBool olarak değiştirildi. 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, öne çıkan özelliklerin yalnızca bir kısmı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 130

Chrome 129 sürümü

Chrome 128

Chrome 127

Chrome 126

Chrome 125 sürümü

Chrome 124 sürümü

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117 sürümü

Chrome 116

Chrome 115 sürümü

Chrome 114

Chrome 113