WebGPU (Chrome 136) এ নতুন কি আছে

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

প্রকাশিত: ২৩ এপ্রিল, ২০২৫

GPUAdapterInfo isFallbackAdapter অ্যাট্রিবিউট

GPUAdapterInfo isFallbackAdapter বুলিয়ান অ্যাট্রিবিউটটি নির্দেশ করে যে, বৃহত্তর সামঞ্জস্যতা, আরও অনুমানযোগ্য আচরণ, বা উন্নত গোপনীয়তার বিনিময়ে একটি GPUAdapter-এর পারফরম্যান্সে উল্লেখযোগ্য সীমাবদ্ধতা আছে কিনা। এই সংযোজনটি প্রয়োজনীয় ছিল কারণ যে লাইব্রেরিগুলো ব্যবহারকারী-প্রদত্ত GPUDevice অবজেক্ট গ্রহণ করে, তারা GPUDevice-এর adapterInfo অ্যাট্রিবিউটের মাধ্যমে এই তথ্য অ্যাক্সেস করতে পারত না। নিম্নলিখিত উদাহরণ এবং ইস্যু 403172841 দেখুন।

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

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

যেহেতু Chrome এখনও ফলব্যাক অ্যাডাপ্টারের জন্য সাপোর্ট চালু করেনি, তাই এই মুহূর্তে ব্যবহারকারীদের ডিভাইসে isFallbackAdapter অ্যাট্রিবিউটটি সবসময় false থাকছে। আমরা খতিয়ে দেখছি যে GPUAdapter-এর isFallbackAdapter অ্যাট্রিবিউটটিকে ডেপ্রিকেটেড করে সরিয়ে ফেলা যায় কিনা। এটি চালু করার অভিপ্রায় দেখুন।

D3D12-এ শেডার কম্পাইলেশন সময়ের উন্নতি

ক্রোম টিম তাদের ওয়েবজিপিইউ শেডার ল্যাঙ্গুয়েজ কম্পাইলার ‘টিন্ট’-এর ক্রমাগত উন্নতি সাধন করছে। এর অংশ হিসেবে তারা D3D12 ব্যাকএন্ডসহ ওয়েবজিপিইউ সমর্থনকারী ডিভাইসগুলোর জন্য একটি ইন্টারমিডিয়েট রিপ্রেজেন্টেশন (IR) যুক্ত করেছে। টিন্টের অ্যাবস্ট্রাক্ট সিনট্যাক্স ট্রি (AST) এবং HLSL ব্যাকএন্ড রাইটারের মাঝে অবস্থিত এই IR-টি কম্পাইলারটিকে আরও কার্যকর ও রক্ষণাবেক্ষণযোগ্য করে তুলবে, যা শেষ পর্যন্ত ডেভেলপার এবং ব্যবহারকারী উভয়ের জন্যই লাভজনক হবে। প্রাথমিক পরীক্ষাগুলোতে দেখা গেছে যে, ইউনিটির WGSL শেডারগুলোকে HLSL-এ রূপান্তর করার ক্ষেত্রে টিন্টের নতুন সংস্করণটি ১০ গুণ পর্যন্ত দ্রুততর।

একটি ফ্লোচার্টে WGSL শেডার কোডকে নিম্ন-স্তরের GPU নির্দেশাবলীতে রূপান্তর করার প্রক্রিয়া দেখানো হয়েছে।
উইন্ডোজে পাইপলাইন তৈরি রেন্ডার করুন।

এই উন্নতিগুলো—যা ইতিমধ্যে Android, ChromeOS, এবং macOS-এ উপলব্ধ—D3D12 ব্যাকএন্ডসহ WebGPU সমর্থনকারী Windows ডিভাইসগুলোতে পর্যায়ক্রমে সম্প্রসারিত করা হচ্ছে। ইস্যু 42251045 দেখুন।

ক্যানভাসের ছবিগুলো সংরক্ষণ ও কপি করুন

ক্রোম ব্যবহারকারীরা এখন একটি WebGPU ক্যানভাসে রাইট-ক্লিক করে ‘Save Image As…’ অথবা ‘Copy Image’ কনটেক্সট মেনু অপশনগুলো ব্যবহার করতে পারবেন। ইস্যু 40902474 দেখুন।

দ্য
ব্যবহারকারী "Save Image As…" কনটেক্সট মেনুটি নির্বাচন করেছেন।

লিফট সামঞ্জস্য মোড সীমাবদ্ধতা

GPUDevice-এ উপলব্ধ পরীক্ষামূলক "core-features-and-limits" ফিচারটি, chrome://flags/#enable-unsafe-webgpu ফ্ল্যাগটি সক্রিয় করা হলে, কম্প্যাটিবিলিটি মোডের সমস্ত সীমাবদ্ধতা (ফিচার এবং লিমিট) তুলে নেয়। ইস্যু 395855517 দেখুন।

featureLevel: "compatibility" অপশন সহ একটি GPUAdapter-এর জন্য অনুরোধ করলে তা ব্রাউজারকে পরীক্ষামূলক WebGPU কম্প্যাটিবিলিটি মোড নির্বাচন করতে ইঙ্গিত দেয়। সফল হলে, ফলস্বরূপ অ্যাডাপ্টারটি "compatibility-defaulting" হয়। অন্যথায়, এটি "core-defaulting" হয়, যা ` featureLevel: "core" অপশন ব্যবহার করার মতোই। অধিকন্তু, requiredFeatures এবং requiredLimits ছাড়া requestDevice() কল করলে GPUAdapter-এর ডিফল্ট ক্যাপাবিলিটি সহ একটি GPUDevice-এর জন্য অনুরোধ করা হয়।

কোর-ডিফল্টিং অ্যাডাপ্টারগুলো সর্বদা "core-features-and-limits" ফিচারটি সমর্থন করে এবং এগুলো থেকে তৈরি GPUDevice-গুলোতে এটি স্বয়ংক্রিয়ভাবে সক্রিয় হয়ে যায়। কম্প্যাটিবিলিটি-ডিফল্টিং অ্যাডাপ্টারগুলোর ক্ষেত্রে, "core-features-and-limits" ফিচারটি সমর্থিত হতে পারে এবং এগুলো থেকে তৈরি GPUDevice-গুলোতে এর জন্য অনুরোধ করা যেতে পারে। উভয় প্রকারের অ্যাডাপ্টারই "float32-blendable" এর মতো ফিচারও সমর্থন করতে পারে, যা কোর এবং কম্প্যাটিবিলিটি উভয় মোডেই ঐচ্ছিক।

নিম্নলিখিত উদাহরণটি এমন একটি অ্যাপ্লিকেশনের জন্য, যেটির জন্য "float32-blendable" প্রয়োজন এবং যেটি উপলব্ধ থাকলে কোর ফিচারগুলো ব্যবহার করতে পারে, কিন্তু কোর ফিচারগুলো উপলব্ধ না থাকলে শুধুমাত্র কম্প্যাটিবিলিটি ফিচারগুলো ব্যবহার করে।

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

পরীক্ষামূলক GPUAdapter featureLevel এবং isCompatibilityMode অ্যাট্রিবিউটগুলো সরিয়ে "core-features-and-limits" ফিচারটি যুক্ত করা হয়েছে। ইস্যু 395855516 দেখুন।

ভোরের আপডেট

কলব্যাক স্ট্যাটাস এনাম InstanceDropped এর নাম পরিবর্তন করে CallbackCancelled রাখা হয়েছে। এর মাধ্যমে এটি স্পষ্ট করা হয়েছে যে, কলব্যাকটি বাতিল করা হলেও, ইভেন্টটির সাথে সম্পর্কিত ব্যাকগ্রাউন্ড প্রসেসিং, যেমন পাইপলাইন কম্পাইলেশন, তখনও চলতে পারে। নতুন নামটি আরও সাধারণভাবে প্রযোজ্য, যদি পরবর্তীতে অন্য কোনো বাতিলকরণ ব্যবস্থা যোগ করা হয়। ইস্যু ৫২০ দেখুন।

wgpu::PopErrorScopeStatus::EmptyStack enum-টি, যা নির্দেশ করে যে এরর স্কোপ স্ট্যাক পপ করা যায়নি, সেটির নাম পরিবর্তন করে wgpu::PopErrorScopeStatus::Error রাখা হয়েছে (যা আরও সাধারণভাবে প্রযোজ্য)। ডিবাগিং-এ সাহায্য করার জন্য কলব্যাকটিতে এখন একটি সংশ্লিষ্ট এরর ব্যাখ্যা বার্তাও অন্তর্ভুক্ত রয়েছে। ইস্যু ৩৬৯ দেখুন।

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

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

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

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

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩