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

François Beaufort
François Beaufort

सबग्रुप के साथ एक्सपेरिमेंट करना

सबग्रुप की सुविधा, एसआईएमडी-लेवल की पैरललिज़्म को चालू करती है. इससे ग्रुप में मौजूद थ्रेड एक-दूसरे से कम्यूनिकेट कर पाते हैं और एक साथ गणित की कार्रवाइयां कर पाते हैं. उदाहरण के लिए, 16 संख्याओं का योग निकालना. इससे थ्रेड के बीच डेटा शेयर करने का बेहतर तरीका मिलता है.

chrome://flags/#enable-unsafe-webgpu पर "Unsafe WebGPU Support" फ़्लैग के पीछे, लोकल टेस्टिंग के लिए सबग्रुप के सुझाव का कम से कम एक वर्शन उपलब्ध है.

ऑरिजिन ट्रायल के लिए साइन अप करके, अपनी साइट पर असली उपयोगकर्ताओं के साथ सबग्रुप आज़माए जा सकते हैं. अपनी साइट को ऑरिजिन ट्रायल का इस्तेमाल करने के लिए तैयार करने के बारे में जानने के लिए, ऑरिजिन ट्रायल का इस्तेमाल शुरू करना लेख पढ़ें. यह ओरिजिन ट्रायल, Chrome 128 से 131 तक चलेगा. यह 19 फ़रवरी, 2025 को खत्म होगा. एक्सपेरिमेंट करने का इरादा देखें.

जब "subgroups" सुविधा किसी GPUAdapter में उपलब्ध हो, तब इस सुविधा के साथ GPUDevice का अनुरोध करें, ताकि WGSL में सबग्रुप की सुविधा मिल सके. साथ ही, इसकी minSubgroupSize और maxSubgroupSize सीमाएं देखें.

आपको अपने WGSL कोड में, इस एक्सटेंशन को enable subgroups; की मदद से साफ़ तौर पर चालू करना होगा. इस सुविधा को चालू करने पर, आपको ये अतिरिक्त सुविधाएं मिलती हैं:

  • subgroup_invocation_id: यह सबग्रुप में थ्रेड के इंडेक्स के लिए, पहले से मौजूद वैल्यू होती है.
  • subgroup_size: सबग्रुप के साइज़ के ऐक्सेस के लिए, पहले से मौजूद वैल्यू.
  • subgroupBallot(value): यह बिट फ़ील्ड का एक सेट दिखाता है. इसमें subgroup_invocation_id से जुड़ा बिट 1 होता है, अगर चालू इनवोकेशन के लिए value सही है. अगर ऐसा नहीं है, तो यह 0 होता है.
  • subgroupBroadcast(value, id): यह subgroup_invocation_id से शुरू होने वाले value को, सबग्रुप में मौजूद सभी इनवोकेशन के लिए ब्रॉडकास्ट करता है. ऐसा id से मैच करने वाले subgroup_invocation_id के साथ किया जाता है. ध्यान दें: id को कंपाइल-टाइम कॉन्स्टेंट होना चाहिए.

आने वाले समय में, subgroupAdd, subgroupAll, subgroupElect, subgroupShuffle जैसे और भी बिल्ट-इन फ़ंक्शन जोड़े जाएंगे. समस्या 354738715 देखें.

सबग्रुप ऑपरेशन में f16 का इस्तेमाल करने के लिए, "subgroups", "subgroups-f16", और "shader-f16" सुविधाओं के साथ GPUDevice का अनुरोध करें. इसके बाद, enable f16, subgroups, subgroups_f16; की मदद से इसे अपने WGSL कोड में चालू करें.

यहां दिया गया कोड स्निपेट, सबग्रुप की संभावनाओं को एक्सप्लोर करने और उनमें बदलाव करने के लिए एक आधार देता है.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
// Explicitly request subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;

  var<workgroup> wgmem : u32;

  @group(0) @binding(0)
  var<storage, read> inputs : array<u32>;

  @group(0) @binding(1)
  var<storage, read_write> output : array<u32>;

  @compute @workgroup_size(64)
  fn main(@builtin(subgroup_size) subgroupSize : u32,
          @builtin(subgroup_invocation_id) id : u32,
          @builtin(local_invocation_index) lid : u32) {
    // One thread per workgroup writes the value to workgroup memory.
    if (lid == 0) {
      wgmem = inputs[lid];
    }
    workgroupBarrier();
    var v = 0u;

    // One thread per subgroup reads the value from workgroup memory
    // and shares that value with every other thread in the subgroup
    // to reduce local memory bandwidth.
    if (id == 0) {
      v = wgmem;
    }
    v = subgroupBroadcast(v, 0);
    output[lid] = v;
  }`,
});

// Send the appropriate commands to the GPU...

लाइनों और पॉइंट के लिए डेप्थ बायस सेट करने की सुविधा बंद की गई

WebGPU स्पेसिफ़िकेशन में हुए बदलाव की वजह से, रेंडर पाइपलाइन के लिए टोपोलॉजी के लाइन या पॉइंट टाइप होने पर, depthBias, depthBiasSlopeScale, और depthBiasClamp को शून्य से अलग वैल्यू पर सेट करने पर, पुष्टि करने से जुड़ी गड़बड़ी होती है. डेवलपर को अपना कोड अपडेट करने के लिए ज़्यादा समय देने के लिए, DevTools कंसोल में इस आने वाले पुष्टि करने वाले सिस्टम के बारे में चेतावनी दिखाई जाती है. साथ ही, इन मामलों में वैल्यू को 0 पर सेट कर दिया जाता है. समस्या 352567424 देखें.

preventDefault का इस्तेमाल करने पर, DevTools में दिखने वाली ऐसी चेतावनी को छिपाएं जिसमें गड़बड़ी की जानकारी शामिल न हो

अगर uncapturederror के लिए कोई इवेंट लिसनर रजिस्टर किया गया है और इवेंट लिसनर कॉलबैक में इवेंट preventDefault() तरीके को कॉल किया गया है, तो DevTools कंसोल में uncapturederror इवेंट के लिए चेतावनियां नहीं दिखेंगी. यह तरीका, JavaScript में इवेंट हैंडलिंग से मिलता-जुलता है. यहां दिया गया उदाहरण और समस्या 40263619 देखें.

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

device.addEventListener("uncapturederror", (event) => {
  // Prevents browser warning to show up in the DevTools Console.
  event.preventDefault();

  // TODO: Handle event.error
});

WGSL, इंटरपोलेट सैंपलिंग पहले करता है और इसके बाद

WGSL interpolate एट्रिब्यूट की मदद से, उपयोगकर्ता के तय किए गए आईओ डेटा इंटरपोलेशन को मैनेज किया जा सकता है. अब इंटरपोलेट सैंपलिंग के नए पैरामीटर first (डिफ़ॉल्ट) और either से आपको ज़्यादा कंट्रोल मिलता है: first, प्रिमिटिव के पहले वर्टेक्स की वैल्यू का इस्तेमाल करता है, जबकि either से पहले या आखिरी वर्टेक्स का इस्तेमाल किया जा सकता है. समस्या 340278447 देखें.

सुबह के अपडेट

एसिंक्रोनस कार्रवाइयों को मैनेज करने के लिए, Dawn के WGPUFuture को लागू करने की प्रोसेस अब पूरी हो गई है. मुख्य कॉन्सेप्ट में, इवेंट को प्रोसेस करने के लिए wgpuInstanceProcessEvents और कॉलबैक की जगहें तय करने के लिए WGPUCallbackMode शामिल हैं. WGPUFuture, ऐसे इवेंट के बारे में बताता है जो एक बार होते हैं और हमेशा के लिए उपलब्ध रहते हैं. वहीं, wgpuInstanceWaitAny, किसी फ़्यूचर या टाइमआउट के पूरा होने का इंतज़ार करता है. समस्या 42240932 देखें.

Surface::GetCapabilities() अब CompositeAlphaMode::Auto की वैल्यू रिपोर्ट नहीं करता है. यह अब भी मान्य है और Surface::GetCapabilities().alphaMode[0] के बराबर है. समस्या 292 देखें.

OpenGL बैकएंड अब Surface के साथ काम करता है. साथ ही, हर Present() कॉल के लिए y-फ़्लिप ब्लिट की सुविधा देता है. समस्या 344814083 देखें.

Adapter::GetProperties() तरीके के इस्तेमाल पर रोक लगा दी गई है. इसके बजाय, Adapter::GetInfo() का इस्तेमाल करें.

Jaswant, एक बाहरी योगदानकर्ता हैं. उन्होंने सभी CMake फ़ाइलों को फिर से लिखा है. इससे उन्हें अपडेट करना आसान हो गया है. साथ ही, प्री-बिल्ड की अनुमति मिल गई है. CMake प्रोजेक्ट में Dawn का इस्तेमाल करने के लिए, क्विकस्टार्ट गाइड देखें.

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

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

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

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