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

François Beaufort
François Beaufort

WebCodecs इंटिग्रेशन

WebGPU, HTMLVideoElement से importExternalTexture() तक, अपारदर्शी "बाहरी टेक्सचर" ऑब्जेक्ट बनाने के लिए एक एपीआई उपलब्ध कराता है. इन ऑब्जेक्ट का इस्तेमाल, वीडियो फ़्रेम को बेहतर तरीके से सैंपल करने के लिए किया जा सकता है. ऐसा, सोर्स YUV कलर मॉडल डेटा से सीधे तौर पर, बिना कॉपी किए किया जा सकता है.

हालांकि, शुरुआती WebGPU स्पेसिफ़िकेशन में, WebCodecs VideoFrame ऑब्जेक्ट से GPUExternalTexture ऑब्जेक्ट बनाने की अनुमति नहीं थी. यह सुविधा, वीडियो प्रोसेसिंग के बेहतर ऐप्लिकेशन के लिए ज़रूरी है. ये ऐप्लिकेशन पहले से ही WebCodecs का इस्तेमाल करते हैं और वे वीडियो प्रोसेसिंग पाइपलाइन में WebGPU को इंटिग्रेट करना चाहते हैं. WebCodecs इंटिग्रेशन की मदद से, GPUExternalTexture और copyExternalImageToTexture() कॉल के लिए, सोर्स के तौर पर VideoFrame का इस्तेमाल किया जा सकता है. नीचे दिया गया उदाहरण और chromestatus एंट्री देखें.

// Access the GPU device.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

// Create VideoFrame from HTMLVideoElement.
const video = document.querySelector("video");
const videoFrame = new VideoFrame(video);

// Create texture from VideoFrame.
const texture = device.importExternalTexture({ source: videoFrame });
// TODO: Use texture in bind group creation.

WebCodecs की मदद से वीडियो अपलोड करने के एक्सपेरिमेंट के सैंपल को आज़माएं.

GPUAdapter requestDevice() से मिला खो चुका डिवाइस

अगर GPUAdapter पर requestDevice() का तरीका काम नहीं करता, क्योंकि इसका इस्तेमाल पहले ही GPUDevice बनाने के लिए किया जा चुका है, तो अब यह null के साथ अस्वीकार करने वाले प्रॉमिस को दिखाने के बजाय, GPUDevice को तुरंत 'खोया हुआ' के तौर पर मार्क कर देता है. issue chromium:1234617 देखें.

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

// New! The promise is not rejected anymore with null.
const device2 = await adapter.requestDevice();
// And the device is immediately marked as lost.
const info = await device2.lost;

importExternalTexture() को कॉल करने पर, वीडियो चलाने में आने वाली रुकावट को कम करना

जब HTMLVideoElement के साथ importExternalTexture() को कॉल किया जाता है, तो वीडियो व्यूपोर्ट में न दिखने पर, उससे जुड़े वीडियो के प्लेबैक को अब थ्रॉटल नहीं किया जाता. issue chromium:1425252 देखें.

खास जानकारी के मुताबिक होना

GPUPipelineError() कंस्ट्रक्टर में message आर्ग्युमेंट देना ज़रूरी नहीं है. chromium:4613967 बदलें देखें.

अगर WGSL सोर्स code में \0 शामिल है, तो createShaderModule() को कॉल करते समय गड़बड़ी होती है. issue dawn:1345 देखें.

createSampler() की मदद से किसी टेक्सचर को सैंपल करते समय, डिफ़ॉल्ट तौर पर ज़्यादा से ज़्यादा 32 लेवल की जानकारी (lodMaxClamp) का इस्तेमाल किया जाता है. chromium:4608063 बदलें देखें.

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

DevTools के JavaScript कंसोल में एक मैसेज दिखता है. इससे डेवलपर को यह याद दिलाया जाता है कि वे WebGPU का इस्तेमाल ऐसे प्लैटफ़ॉर्म पर न करें जिस पर यह काम नहीं करता. chromium:4589369 बदलें लेख पढ़ें.

जब getMappedRange() काम नहीं करता है, तो बफ़र की पुष्टि से जुड़ी गड़बड़ी के मैसेज, DevTools के JavaScript कंसोल में तुरंत दिखते हैं. इससे डेवलपर को, सूची में निर्देश भेजने की ज़रूरत नहीं पड़ती. chromium:4597950 बदलें देखें.

DevTools JavaScript कंसोल का स्क्रीनशॉट, जिसमें बफ़र की पुष्टि से जुड़ी गड़बड़ी का मैसेज दिख रहा है.
DevTools के JavaScript कंसोल में, बफ़र की पुष्टि से जुड़ी गड़बड़ी का मैसेज.

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

disallow_unsafe_apis डीबग टॉगल का नाम बदलकर allow_unsafe_apis कर दिया गया है. साथ ही, इसे डिफ़ॉल्ट रूप से बंद कर दिया गया है. यह टॉगल, एपीआई एंट्री पॉइंट या पैरामीटर के ऐसे कॉम्बिनेशन पर पुष्टि से जुड़ी गड़बड़ियों को दबा देता है जिन्हें अभी तक सुरक्षित नहीं माना जाता. यह डीबग करने के लिए मददगार हो सकता है. issue dawn:1685 देखें.

wgpu::ShaderModuleWGSLDescriptor एट्रिब्यूट के लिए इस्तेमाल न होने वाला source एट्रिब्यूट हटा दिया गया है. इसके बजाय, code एट्रिब्यूट का इस्तेमाल किया जा सकता है. change dawn:130321 देखें.

wgpu::RenderBundle::SetLabel() का वह तरीका लागू कर दिया गया है जो मौजूद नहीं था. change dawn:134502 देखें.

wgpu::RequestAdapterOptionsBackendType विकल्प के साथ अडैप्टर पाने पर, ऐप्लिकेशन किसी खास बैकएंड का अनुरोध कर सकते हैं. उदाहरण के लिए, नीचे दिया गया उदाहरण देखें और issue dawn:1875.

wgpu::RequestAdapterOptionsBackendType backendTypeOptions = {};
backendTypeOptions.backendType = wgpu::BackendType::D3D12;

wgpu::RequestAdapterOptions options = {};
options.nextInChain = &backendTypeOptions;

// Request D3D12 adapter.
myInstance.RequestAdapter(&options, myCallback, myUserData);

swapchain टेक्सचर के लिए, अतिरिक्त इस्तेमाल के साथ एक नया SwapChain::GetCurrentTexture() तरीका जोड़ा गया है, ताकि रिटर्न wgpu::Texture का इस्तेमाल कॉपी में किया जा सके. उदाहरण के लिए, नीचे दिया गया उदाहरण देखें और issue dawn:1551 देखें.

wgpu::SwapChain swapchain = myDevice.CreateSwapChain(mySurface, &myDesc);
swapchain.GetCurrentTexture();
swapchain.Present();

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

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