WebGPU (Chrome 130) में नया क्या है

François Beaufort
François Beaufort

दो सोर्स को ब्लेंड करना

दो फ़्रैगमेंट शेडर आउटपुट को एक फ़्रेमबफ़र में जोड़ने को ड्यूअल सोर्स ब्लेंडिंग कहा जाता है. यह तकनीक खास तौर पर उन ऐप्लिकेशन के लिए फ़ायदेमंद है जिनमें ब्लेंड करने के जटिल ऑपरेशन की ज़रूरत होती है. जैसे, Porter-Duff ब्लेंड मोड पर आधारित ऐप्लिकेशन. बाद के रेंडर पास को एक रेंडर पास से बदलकर, ड्यूअल सोर्स ब्लेंडिंग की परफ़ॉर्मेंस और सुविधाओं को बेहतर बनाया जा सकता है.

"dual-source-blending" WebGPU की नई सुविधा की मदद से, @location(0) पर WGSL @blend_src एट्रिब्यूट का इस्तेमाल किया जा सकता है. इससे ब्लेंडिंग सोर्स इंडेक्स और इन ब्लेंड फ़ैक्टर को दिखाया जा सकता है: "src1", "one-minus-src1", "src1-alpha", और "one-minus-src1-alpha". नीचे दिया गया स्निपेट, chromestatus एंट्री, और समस्या 341973423 देखें.

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 पर शेडर को कंपाइल करने में लगने वाले समय में सुधार

Chrome की टीम, WebGPU शेडर लैंग्वेज कंपाइलर Tint को बेहतर बना रही है. इसके लिए, Metal बैकएंड के साथ WebGPU की सुविधा वाले डिवाइसों के लिए इंटरमीडिएट रिप्रज़ेंटेशन (आईआर) को लॉन्च किया जा रहा है. यह आईआर, Tint के एब्स्ट्रैक्ट सिंटैक्स ट्री (एएसटी) और Metal बैकएंड लेखक के बीच होता है. इससे कंपाइलर ज़्यादा बेहतर और मैनेज करने लायक बन जाएगा. इससे डेवलपर और उपयोगकर्ता, दोनों को फ़ायदा मिलेगा. शुरुआती टेस्ट से पता चलता है कि Unity के WGSL शेडर को MSL में ट्रांसलेट करने के दौरान, Tint के नए वर्शन की परफ़ॉर्मेंस 10 गुना बेहतर है.

इस फ़्लोचार्ट में, WGSL शेडर कोड को लो-लेवल जीपीयू निर्देशों में बदलने की प्रोसेस दिखाई गई है.
macOS में रेंडर पाइपलाइन बनाना.

ये सुधार, Android और ChromeOS पर पहले से ही उपलब्ध हैं. अब इन्हें macOS डिवाइसों पर भी उपलब्ध कराया जा रहा है. हालांकि, इसके लिए ज़रूरी है कि वे डिवाइस, Metal बैकएंड के साथ WebGPU का इस्तेमाल कर पाएं. समस्या 42251016 देखें.

GPUAdapter requestAdapterInfo() का इस्तेमाल बंद किया जा रहा है

GPUAdapter requestAdapterInfo() का असाइनोक्रोनस तरीका अब काम नहीं करता, क्योंकि डेवलपर पहले से ही GPUAdapter info एट्रिब्यूट का इस्तेमाल करके, GPUAdapterInfo को सिंक्रोनस तरीके से पा सकते हैं. इसलिए, अब नॉन-स्टैंडर्ड GPUAdapter requestAdapterInfo() का तरीका काम नहीं करता. इस्तेमाल बंद करने का इंटेंट देखें.

DevTools कंसोल, requestAdapterInfo() के लिए, 'इस्तेमाल नहीं किया जा सकता' वाली चेतावनी दिखाता है.
Chrome DevTools में requestAdapterInfo() के लिए, बंद की गई सुविधा की चेतावनी.

Dawn के बारे में अपडेट

webgpu.h C API ने एक्सटेंशन स्ट्रक्चर के लिए, नाम रखने के कुछ तरीके तय किए हैं. नाम में हुए ये बदलाव देखें और समस्या 42241174 देखें.

WGPURenderPassDescriptor एक्सटेंशन
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
WGPUShaderModuleDescriptor एक्सटेंशन
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
WGPUSurfaceDescriptor एक्सटेंशन
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

WGPUDepthStencilState के depthWriteEnabled एट्रिब्यूट टाइप को बूलियन से WGPUOptionalBool पर स्विच किया जाता है, ताकि JavaScript API की तरह ही इसकी तीन संभावित स्थितियों (सही, गलत, और तय नहीं की गई) को बेहतर तरीके से दिखाया जा सके. ज़्यादा जानने के लिए, यहां दिया गया कोड स्निपेट और webgpu-headers PR देखें.

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

इसमें सिर्फ़ कुछ खास हाइलाइट शामिल हैं. कमिट की पूरी सूची देखें.

WebGPU में नया क्या है

WebGPU में नया क्या है सीरीज़ में शामिल सभी चीज़ों की सूची.

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