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

François Beaufort
François Beaufort

WebCodecs इंटिग्रेशन

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

हालांकि, शुरुआती 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 के साथ वीडियो अपलोड करना प्रयोगात्मक नमूना देखें.

जीपीयू अडैप्टर requestDevice() के ज़रिए, खोया हुआ डिवाइस लौटाया गया

अगर GPUAdapter पर requestDevice() तरीका काम नहीं करता, क्योंकि GPUDevice को बनाने के लिए पहले ही इसका इस्तेमाल किया जा चुका है, तो अब वह GPUDevice के साथ 'खो गया' के तौर पर मार्क हो जाता है. इससे, null के साथ अस्वीकार किए जाने वाले प्रॉमिस को दिखाया नहीं जाता. 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() को कॉल किया जाता है, तो वीडियो चलाने की सुविधा को बेहतर बनाए रखें

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

निर्देशों का पालन

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

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

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

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

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

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

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

डॉन से जुड़े अपडेट

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

code के लिए wgpu::ShaderModuleWGSLDescriptor का source एट्रिब्यूट हटा दिया गया है. यह अब काम नहीं करता. Change dawn:130321 देखें.

छूटे हुए wgpu::RenderBundle::SetLabel() तरीके को लागू कर दिया गया है. बदलें dawn:134502 देखें.

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

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

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

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

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

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

इसमें सिर्फ़ कुछ अहम हाइलाइट के बारे में बताया गया है. वादों की पूरी सूची देखें.

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

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

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