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" फ़ॉर्मैट वाले जीपीयू टेक्सचर को ब्लेंड किया जा सकता है. इस सुविधा वाले जीपीयू डिवाइस का अनुरोध करने पर, अब ऐसी रेंडर पाइपलाइन बनाई जा सकती है जो float32 फ़ॉर्मैट के किसी भी अटैचमेंट के साथ ब्लेंडिंग का इस्तेमाल करती है.

नीचे दिया गया स्निपेट, 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 देखें.

इन पाबंदियों का मतलब है कि बिना फ़िल्टर वाले सैंपलर के साथ डेप्थ टेक्स्चर का इस्तेमाल करने के लिए, बाइंड ग्रुप लेआउट को मैन्युअल तरीके से बनाना होगा. ऐसा इसलिए है, क्योंकि "अपने-आप" जनरेट हुए बाइंड ग्रुप लेआउट, अभी इस कॉम्बिनेशन के साथ काम नहीं करते. स्पेसिफ़िकेशन से जुड़ी समस्या 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 में उपलब्ध कराने के लिए, chrome://flags/#enable-unsafe-webgpu पर "असुरक्षित WebGPU सहायता" फ़्लैग को चालू करें.

नीचे दिया गया स्निपेट और समस्या 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...

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

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

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

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

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

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

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