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...

मेटल पर शेडर को कम करने के समय में किए गए सुधार

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

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

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

जीपीयू अडैप्टर requestAdapterInfo() का बंद होना

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

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

डॉन से जुड़े अपडेट

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 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