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

François Beaufort
François Beaufort

Çift kaynaklı karıştırma

İki parça gölgelendirici çıkışını tek bir çerçeve arabelleğinde birleştirme işlemine çift kaynaklı karıştırma adı verilir. Bu teknik, özellikle Porter-Duff karıştırma modlarına dayalı olanlar gibi karmaşık karıştırma işlemleri gerektiren uygulamalar için faydalıdır. Çift kaynaklı 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, karıştırma kaynağı dizinini ve şu karıştırma faktörlerini belirtmek için @location(0) konumunda 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'i, chromestatus girişini ve 341973423 numaralı sorunu inceleyin.

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üresinde iyileştirmeler

Chrome ekibi, Metal arka ucuyla WebGPU'yu destekleyen cihazlar için ara gösterim (IR) sunarak WebGPU gölgelendirici dili derleyicisi olan Tint'i geliştiriyor. Tint'in soyut sözdizimi 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 getirecek, sonuç olarak hem geliştiricilere hem de kullanıcılara fayda sağlayacaktır. İ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 seviyeli GPU talimatlarına dönüştürme sürecini gösterir.
macOS'te oluşturma ardışık düzeni oluşturma.

Android ve ChromeOS'te kullanıma sunulan bu iyileştirmeler, Metal arka ucuyla WebGPU'yu destekleyen macOS cihazlarda da kademeli olarak kullanıma sunuluyor. 42251016 numaralı sorunu inceleyin.

GPUAdapter requestAdapterInfo() yönteminin desteğinin sonlandırılması

Geliştiriciler, GPUAdapter info özelliğini kullanarak GPUAdapterInfo'yu eşzamanlı olarak alabilir. Bu nedenle, GPUAdapter requestAdapterInfo() eşzamansız yöntemi gereksizdir. Bu nedenle, standart olmayan GPUAdapter requestAdapterInfo() yönteminin desteği sonlandırıldı. Kullanımdan kaldırma amacı başlıklı makaleyi inceleyin.

Geliştirici Araçları konsolunda requestAdapterInfo() için kullanımdan kaldırma uyarısı gösteriliyor.
Chrome Geliştirici Araçları'nda requestAdapterInfo() için kullanımdan kaldırılan özellik uyarısı.

Dawn güncellemeleri

webgpu.h C API, uzantı yapıları için bazı adlandırma kuralları tanımlamış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ın depthWriteEnabled özellik türü, JavaScript API'deki gibi üç olası durumunu (doğru, yanlış ve tanımlanmamış) daha iyi yansıtmak için boole'dan WGPUOptionalBool'a 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 ö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 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