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 की सुविधा वाले डिवाइसों के लिए इंटरमीडिएट रिप्रज़ेंटेशन (आईआर) को लॉन्च किया जा रहा है. यह IR, Tint के एब्स्ट्रैक्ट सिंटैक्स ट्री (AST) और Metal बैकएंड लेखक के बीच होता है. इससे कंपाइलर ज़्यादा बेहतर और मैनेज करने लायक बन जाएगा. इससे डेवलपर और उपयोगकर्ता, दोनों को फ़ायदा मिलेगा. शुरुआती टेस्ट से पता चला है कि Unity के WGSL शेडर का एमएसएल में अनुवाद करने पर, Tint का नया वर्शन ज़्यादा से ज़्यादा 10 गुना ज़्यादा तेज़ काम करता है.

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

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

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

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