WebGPU-তে নতুন কী আছে (Chrome 116)

ফ্রাঁসোয়া বোফোর্ট
François Beaufort

ওয়েবকোডেকস ইন্টিগ্রেশন

WebGPU, importExternalTexture() এর মাধ্যমে HTMLVideoElement থেকে অস্বচ্ছ "এক্সটার্নাল টেক্সচার" অবজেক্ট তৈরি করার জন্য একটি API প্রদান করে। আপনি এই অবজেক্টগুলো ব্যবহার করে দক্ষতার সাথে ভিডিও ফ্রেম স্যাম্পল করতে পারেন, যা সম্ভবত সরাসরি সোর্স YUV কালার মডেল ডেটা থেকে ০-কপি পদ্ধতিতে করা সম্ভব।

তবে, প্রাথমিক WebGPU স্পেসিফিকেশনে WebCodecs VideoFrame অবজেক্ট থেকে GPUExternalTexture অবজেক্ট তৈরি করার অনুমতি ছিল না। এই সক্ষমতাটি সেইসব উন্নত ভিডিও প্রসেসিং অ্যাপের জন্য গুরুত্বপূর্ণ, যারা ইতিমধ্যেই WebCodecs ব্যবহার করে এবং তাদের ভিডিও প্রসেসিং পাইপলাইনে WebGPU একীভূত করতে চায়। WebCodecs ইন্টিগ্রেশন একটি VideoFrame GPUExternalTexture এর উৎস হিসেবে ব্যবহার করার এবং copyExternalImageToTexture() কল করার সুবিধা যোগ করে। নিম্নলিখিত উদাহরণ এবং 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 দিয়ে রিজেক্ট হওয়া একটি প্রমিজ রিটার্ন করার পরিবর্তে, অবিলম্বে 'lost' হিসেবে চিহ্নিত একটি GPUDevice দিয়ে ফুলফিল করে। ইস্যু 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() কল করা হয়, তখন ভিডিওটি ভিউপোর্টে দৃশ্যমান না থাকলেও সংশ্লিষ্ট ভিডিও প্লেব্যাক আর থ্রটল করা হয় না। ইস্যু chromium:1425252 দেখুন।

স্পেক সঙ্গতি

GPUPipelineError() কনস্ট্রাক্টরের message আর্গুমেন্টটি ঐচ্ছিক। chromium:4613967 পরিবর্তনটি দেখুন।

WGSL সোর্স code \0 থাকলে createShaderModule() কল করার সময় একটি ত্রুটি দেখা দেয়। ইস্যু dawn:1345 দেখুন।

createSampler() ব্যবহার করে কোনো টেক্সচার স্যাম্পল করার সময় ব্যবহৃত ডিফল্ট সর্বোচ্চ লেভেল অফ ডিটেইল ( lodMaxClamp ) হলো ৩২। পরিবর্তন chromium:4608063 দেখুন।

ডেভেলপারদের অভিজ্ঞতা উন্নত করা

যখন ডেভেলপাররা কোনো অসমর্থিত প্ল্যাটফর্মে WebGPU ব্যবহার করেন, তখন তাদের মনে করিয়ে দেওয়ার জন্য DevTools জাভাস্ক্রিপ্ট কনসোলে একটি বার্তা প্রদর্শিত হয়। পরিবর্তন chromium:4589369 দেখুন।

যখন getMappedRange() ব্যর্থ হয়, তখন ডেভেলপারদের কিউ-তে কমান্ড পাঠাতে বাধ্য না করেই বাফার ভ্যালিডেশন ত্রুটির বার্তাগুলি DevTools জাভাস্ক্রিপ্ট কনসোলে তাৎক্ষণিকভাবে দেখানো হয়। পরিবর্তন chromium:4597950 দেখুন।

ডেভটুলস জাভাস্ক্রিপ্ট কনসোলের স্ক্রিনশট, যেখানে বাফার ভ্যালিডেশন ত্রুটির বার্তা দেখা যাচ্ছে।
DevTools জাভাস্ক্রিপ্ট কনসোলে বাফার যাচাইকরণ ত্রুটির বার্তা।

ভোরের আপডেট

disallow_unsafe_apis ডিবাগ টগলটির নাম পরিবর্তন করে allow_unsafe_apis রাখা হয়েছে এবং এটিকে ডিফল্টভাবে নিষ্ক্রিয় করা হয়েছে। এই টগলটি সেইসব API এন্ট্রি পয়েন্ট বা প্যারামিটার সংমিশ্রণের ক্ষেত্রে ভ্যালিডেশন ত্রুটি দমন করে, যেগুলোকে এখনও নিরাপদ বলে মনে করা হয় না। এটি ডিবাগিংয়ের জন্য সহায়ক হতে পারে। ইস্যু dawn:1685 দেখুন।

wgpu::ShaderModuleWGSLDescriptor নামক অপ্রচলিত source অ্যাট্রিবিউটটি সরিয়ে code ব্যবহার করা হয়েছে। dawn:130321 পরিবর্তনটি দেখুন।

অনুপস্থিত wgpu::RenderBundle::SetLabel() মেথডটি বাস্তবায়ন করা হয়েছে। dawn:134502 পরিবর্তনটি দেখুন।

অ্যাপ্লিকেশনগুলি wgpu::RequestAdapterOptionsBackendType অপশনটি ব্যবহার করে অ্যাডাপ্টার পাওয়ার সময় একটি নির্দিষ্ট ব্যাকএন্ডের জন্য অনুরোধ করতে পারে। নিচে একটি উদাহরণ এবং 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::GetCurrentTexture() মেথড যোগ করা হয়েছে, যাতে রিটার্ন করা wgpu::Texture কপিগুলোতে ব্যবহার করা যায়। নিচে একটি উদাহরণ দেখুন এবং dawn:1551 ইস্যুটি দেখুন

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

এখানে কেবল কয়েকটি মূল বিষয় তুলে ধরা হয়েছে। কমিটগুলোর বিস্তারিত তালিকাটি দেখুন।

WebGPU-তে নতুন কী আছে

'What's New in WebGPU' সিরিজে যা যা আলোচনা করা হয়েছে, তার একটি তালিকা।

ক্রোম ১৪৭-১৪৮

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩