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

François Beaufort
François Beaufort

पब्लिश किया गया: 8 जनवरी, 2025

टेक्स्चर व्यू के इस्तेमाल की जानकारी

फ़िलहाल, जीपीयू टेक्सचर व्यू, अपने सोर्स जीपीयू टेक्सचर से इस्तेमाल के सभी फ़्लैग इनहेरिट करते हैं. इससे समस्या हो सकती है, क्योंकि कुछ व्यू फ़ॉर्मैट, कुछ इस्तेमाल के साथ काम नहीं करते. इस समस्या को हल करने के लिए, usage सदस्य के साथ createView() को कॉल करने पर, आपको सोर्स टेक्सचर के इस्तेमाल के फ़्लैग का सबसेट साफ़ तौर पर तय करने की सुविधा मिलती है. यह सबसेट, चुने गए व्यू फ़ॉर्मैट के साथ काम करता है.

इस बदलाव से, व्यू का इस्तेमाल करने से पहले ही पुष्टि की जा सकती है. साथ ही, व्यू के इस्तेमाल पर ज़्यादा कंट्रोल रखा जा सकता है. यह अन्य ग्राफ़िक्स एपीआई के साथ भी काम करता है. इनमें व्यू बनाने के लिए, इस्तेमाल के फ़्लैग सामान्य पैरामीटर होते हैं. इससे ऑप्टिमाइज़ेशन के अवसर मिलते हैं.

यहां दिया गया स्निपेट, chromestatus एंट्री, और समस्या 363903526 देखें.

const texture = myDevice.createTexture({
  size: [4, 4],
  format: "rgba8unorm",
  usage:
    GPUTextureUsage.RENDER_ATTACHMENT |
    GPUTextureUsage.TEXTURE_BINDING |
    GPUTextureUsage.STORAGE_BINDING,
  viewFormats: ["rgba8unorm-srgb"],
});

const view = texture.createView({
  format: 'rgba8unorm-srgb',
  usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});

32-बिट फ़्लोट टेक्सचर ब्लेंडिंग

एचडीआर रेंडरिंग के लिए, 32-बिट फ़्लोटिंग-पॉइंट टेक्सचर ज़रूरी होते हैं. इससे रंगों की अलग-अलग वैल्यू को सुरक्षित रखा जा सकता है और कलर बैंडिंग आर्टफ़ैक्ट को रोका जा सकता है. उदाहरण के लिए, साइंटिफ़िक विज़ुअलाइज़ेशन में.

जीपीयू की नई सुविधा "float32-blendable" की मदद से, "r32float", "rg32float", और "rgba32float" फ़ॉर्मैट वाले जीपीयू टेक्सचर को ब्लेंड किया जा सकता है. इस सुविधा के साथ GPU डिवाइस का अनुरोध करते समय, अब किसी भी फ़्लोट32-फ़ॉर्मैट अटैचमेंट के साथ ब्लेंडिंग का इस्तेमाल करने वाली रेंडर पाइपलाइन बनाई जा सकती है.

यहां दिया गया स्निपेट, chromestatus एंट्री, और समस्या 369649348 देखें.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}
// Explicitly request 32-bit float textures blending support.
const device = await adapter.requestDevice({
  requiredFeatures: ["float32-blendable"],
});

// ... Creation of shader modules is omitted for readability.

// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
  vertex: { module: myVertexShaderModule },
  fragment: {
    module: myFragmentShaderModule,
    targets: [
      {
        format: "rgba32float",
        blend: { color: {}, alpha: {} },
      },
    ],
  },
  layout: "auto",
});

// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...

GPUDevice adapterInfo एट्रिब्यूट

उपयोगकर्ता से मिले GPUDevice ऑब्जेक्ट का इस्तेमाल करने वाली लाइब्रेरी के लिए, फ़िज़िकल जीपीयू के बारे में जानकारी ऐक्सेस करना ज़रूरी है. ऐसा इसलिए, क्योंकि उन्हें जीपीयू आर्किटेक्चर के आधार पर, ऑप्टिमाइज़ेशन या वर्कअराउंड लागू करने की ज़रूरत पड़ सकती है. GPUAdapter ऑब्जेक्ट के ज़रिए इस जानकारी को ऐक्सेस किया जा सकता है. हालांकि, सिर्फ़ GPUDevice से इसे सीधे तौर पर नहीं पाया जा सकता. इससे लोगों को परेशानी हो सकती है, क्योंकि उन्हें GPUDevice के साथ-साथ अतिरिक्त जानकारी भी देनी पड़ सकती है.

इस समस्या को हल करने के लिए, GPUAdapterInfo एट्रिब्यूट को अब GPUDevice adapterInfo एट्रिब्यूट के ज़रिए दिखाया जाता है. ये मौजूदा GPUAdapter info एट्रिब्यूट की तरह ही हैं.

यहां दिया गया स्निपेट, chromestatus एंट्री, और समस्या 376600838 देखें.

function optimizeForGpuDevice(device) {
  if (device.adapterInfo.vendor === "amd") {
    // Use AMD-specific optimizations.
  } else if (device.adapterInfo.architecture.includes("turing")) {
    // Optimize for NVIDIA Turing architecture.
  }
}

अमान्य फ़ॉर्मैट में कैनवस कॉन्टेक्स्ट को कॉन्फ़िगर करने पर, JavaScript से जुड़ी गड़बड़ी होती है

इससे पहले, जीपीयू कैनवस कॉन्टेक्स्ट की configure() विधि के साथ अमान्य टेक्सचर फ़ॉर्मैट का इस्तेमाल करने पर, जीपीयू की पुष्टि करने से जुड़ी गड़बड़ी होती थी. इसे बदलकर, JavaScript TypeError कर दिया गया है. इससे ऐसी स्थितियों को रोका जा सकता है जहां जीपीयू कैनवस कॉन्टेक्स्ट के गलत तरीके से कॉन्फ़िगर होने के बावजूद, getCurrentTexture() मान्य जीपीयू टेक्सचर दिखाता है. ज़्यादा जानकारी के लिए, समस्या 372837859 देखें.

टेक्सचर पर सैंपलर फ़िल्टर करने से जुड़ी पाबंदियां

पहले, "sint", "uint", और "depth" फ़ॉर्मैट वाले टेक्सचर का इस्तेमाल किया जा सकता था. साथ ही, फ़िल्टर किए गए सैंपल भी इस्तेमाल किए जा सकते थे. अब यह फ़िल्टरिंग सैंपलर के साथ "sint" या "uint" फ़ॉर्मैट वाले टेक्सचर का इस्तेमाल करने की अनुमति नहीं देता है. ध्यान दें कि फ़िलहाल, फ़िल्टर करने वाले सैंपलर के साथ "depth" टेक्सचर का इस्तेमाल करने पर, यह चेतावनी दिखाता है. ऐसा इसलिए, क्योंकि आने वाले समय में इसका इस्तेमाल नहीं किया जा सकेगा. समस्या 376497143 देखें.

इन पाबंदियों का मतलब है कि फ़िल्टर न करने वाले सैंपलर के साथ डेप्थ टेक्सचर का इस्तेमाल करने के लिए, बाइंड ग्रुप लेआउट को मैन्युअल तरीके से बनाना होगा. ऐसा इसलिए है, क्योंकि "auto" जनरेट किए गए बाइंड ग्रुप लेआउट में, अब तक इस कॉम्बिनेशन का इस्तेमाल नहीं किया जा सकता. स्पेसिफ़िकेशन से जुड़ी समस्या 4952 में, इस सीमा को आने वाले समय में ठीक करने के लिए एक सुझाव दिया गया है.

सबग्रुप के एक्सपेरिमेंट को ज़्यादा समय तक चलाने की सुविधा

सबग्रुप एक्सपेरिमेंट को पहले Chrome 131 में खत्म होना था. हालांकि, अब इसे Chrome 133 तक बढ़ा दिया गया है. यह 16 अप्रैल, 2025 को खत्म होगा. पहले ऑरिजिन ट्रायल में परफ़ॉर्मेंस पर फ़ोकस किया गया था. हालांकि, इसमें पोर्टेबिलिटी से जुड़ी ज़रूरी सुरक्षा सुविधाओं का अभाव था. अब ये सुरक्षा उपाय जोड़ दिए जाएंगे. इससे मौजूदा कोड में गड़बड़ियां हो सकती हैं.

डेवलपर के अनुभव को बेहतर बनाना

Windows पर requestAdapter() के साथ powerPreference विकल्प का इस्तेमाल करने पर, अब DevTools में एक चेतावनी दिखती है. Chrome को जब यह पता चल जाएगा कि दो अलग-अलग जीपीयू का इस्तेमाल कैसे करना है और उनके बीच नतीजों को कैसे कंपोज़ करना है, तब यह चेतावनी हटा दी जाएगी. समस्या 369219127 देखें.

बहुत बड़ा जीपीयू बफ़र बनाते समय, अब गड़बड़ी के मैसेज में जीपीयू बफ़र का साइज़ दिखता है. समस्या 374167798 देखें.

16-बिट के सामान्य किए गए टेक्सचर फ़ॉर्मैट के लिए एक्सपेरिमेंटल सपोर्ट

16-बिट के साइंड नॉर्मलाइज़्ड और अनसाइंड नॉर्मलाइज़्ड टेक्सचर फ़ॉर्मैट, अब एक्सपेरिमेंट के तौर पर उपलब्ध हैं. ये फ़ॉर्मैट, "chromium-experimental-snorm16-texture-formats" और "chromium-experimental-unorm16-texture-formats" जीपीयू सुविधाओं के साथ उपलब्ध हैं. साथ ही, इनके स्टैंडर्ड तय करने के बारे में चर्चा की जा रही है.

इन सुविधाओं की मदद से, 16-बिट के सामान्य किए गए टेक्सचर फ़ॉर्मैट इस्तेमाल किए जा सकते हैं. इनमें COPY_SRC, COPY_DST, TEXTURE_BINDING, RENDER_ATTACHMENT, मल्टीसैंपलिंग, और रिज़ॉल्व करने की सुविधाएं शामिल हैं. अन्य फ़ॉर्मैट ये हैं: "r16unorm", "rg16unorm", "rgba16unorm", "r16snorm", "rg16snorm", और "rgba16snorm".

जब तक इन नई सुविधाओं के लिए स्टैंडर्ड तय नहीं हो जाते, तब तक chrome://flags/#enable-unsafe-webgpu पर जाकर "Unsafe WebGPU Support" फ़्लैग चालू करें, ताकि ये सुविधाएं Chrome में उपलब्ध हो सकें.

यह स्निपेट और समस्या 374790898 देखें.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
  throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});

// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
  size: [4, 4],
  format: "rgba16snorm",
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});

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

सुबह के अपडेट

wgpu::Adapter और wgpu::Device से EnumerateFeatures(FeatureName * features) के तरीके, GetFeatures(SupportedFeatures * features) का इस्तेमाल करने के लिए बंद कर दिए गए हैं. समस्या 368672123 देखें.

webgpu.h C API ने सभी char const * को WGPUStringView स्ट्रक्चर में बदल दिया है. यह स्ट्रक्चर, UTF-8 में एन्कोड की गई स्ट्रिंग का व्यू तय करता है. यह स्ट्रिंग के डेटा के लिए पॉइंटर की तरह काम करता है. साथ ही, इसमें स्ट्रिंग की लंबाई भी शामिल होती है. इसकी मदद से, स्ट्रिंग के कुछ हिस्सों को कॉपी किए बिना ही इस्तेमाल किया जा सकता है. समस्या 42241188 देखें.

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

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