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

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

maxTextureArrayLayers সীমা বৃদ্ধি করুন

ডিফল্টরূপে, একটি 2D টেক্সচারের গভীরতা বা লেয়ার সংখ্যার জন্য সর্বোচ্চ অনুমোদিত মান হল 256। এখন, সমর্থিত হলে maxTextureArrayLayers লিমিট ব্যবহার করে 2048 পর্যন্ত অনুরোধ করা সম্ভব। নিম্নলিখিত উদাহরণ এবং ইস্যু 42241514 দেখুন।

const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxTextureArrayLayers < 30) {
  // When the desired limit isn't supported, take action to either fall back to
  // a code path that does not require the higher limit or notify the user that
  // their device does not meet minimum requirements.
}

// Request highest limit of max texture array layers attributes.
const device = await adapter.requestDevice({
  requiredLimits: { maxTextureArrayLayers: 2048 }
});

ভলকান ব্যাকএন্ডের জন্য বাফার আপলোড অপ্টিমাইজেশন

Vulkan ব্যাকএন্ডের GPUQueue-এর writeBuffer() মেথড কল করার জন্য এখন একটি দ্রুততর পথ উপলব্ধ। ডেটা এখন সরাসরি গন্তব্য বাফারে লেখা যেতে পারে, যার ফলে অতিরিক্ত কপি এবং সিনক্রোনাইজেশনের প্রয়োজন হয় না। এই অপ্টিমাইজেশনটি GPU-তে ডেটা আপলোড করার জন্য প্রয়োজনীয় মেমরি ট্র্যাফিক হ্রাস করে।

ফাস্ট পাথ অপটিমাইজেশনের জন্য বাফারের মেমরিকে হোস্টের কাছে দৃশ্যমান হতে হবে এবং এতে কোনো পেন্ডিং জিপিইউ অপারেশন থাকা চলবে না। ইস্যু ৪২২৪২০৮৪ দেখুন।

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

ক্রোম টিম ওয়েবজিপিইউ শেডার ল্যাঙ্গুয়েজের কম্পাইলার টিন্ট (Tint)-এর কার্যকারিতা বৃদ্ধি করছে। টিন্ট বর্তমানে মেশিন কোড তৈরি করার আগে শেডার কোডের অ্যাবস্ট্রাক্ট সিনট্যাক্স ট্রি (AST) একাধিকবার পরিবর্তন করে, যা কিছু প্ল্যাটফর্মে বেশ রিসোর্স-ইনটেনসিভ একটি প্রক্রিয়া। এটিকে অপ্টিমাইজ করার জন্য, একটি নতুন ইন্টারমিডিয়েট রিপ্রেজেন্টেশন (IR) চালু করা হচ্ছে এবং এর সাথে এটিকে ব্যবহারকারী ব্যাকএন্ডগুলোকেও নতুনভাবে ডিজাইন করা হচ্ছে। এই পরিবর্তনের লক্ষ্য হলো শেডার কম্পাইলেশনকে আরও দ্রুত করা।

রেন্ডার পাইপলাইন তৈরির প্রক্রিয়ায় প্রথমে Tint কম্পাইলার দিয়ে WGSL-কে SPIR-V-তে এবং তারপর Driver কম্পাইলার দিয়ে ISA-তে রূপান্তর করা হয়।
ChromeOS-এ রেন্ডার পাইপলাইন তৈরি।

এই উন্নতিগুলো, যা ইতিমধ্যে অ্যান্ড্রয়েডে উপলব্ধ, তা পর্যায়ক্রমে ভলকান ব্যাকএন্ডসহ ওয়েবজিপিইউ সমর্থনকারী ক্রোমওএস ডিভাইসগুলোতেও সম্প্রসারিত করা হচ্ছে। ইস্যু ৪২২৫০৭৫১ দেখুন।

জমা দেওয়া কমান্ড বাফারগুলি অবশ্যই অনন্য হতে হবে।

submit() ` মেথড ব্যবহার করে GPUQueue-তে জমা দেওয়া প্রতিটি GPUCommandBuffer অবশ্যই অনন্য হতে হবে, অন্যথায় একটি ভ্যালিডেশন ত্রুটি তৈরি হয়। এটি একটি স্পেসিফিকেশন বাগ ছিল। ইস্যু 42241492 দেখুন।

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

const commandEncoder = device.createCommandEncoder();
const commandBuffer = commandEncoder.finish();

device.queue.submit([commandBuffer, commandBuffer]);
// ⚠️ Validation fails because command buffers are not unique.

ভোরের আপডেট

C++ র‍্যাপার webgpu_cpp.h এখন শুধুমাত্র হেডার ফাইলে সীমাবদ্ধ, যা এর ব্যবহারকে সহজ করে এবং বিকল্প C++ র‍্যাপারগুলির সাথে সহজতর ইন্টিগ্রেশন সক্ষম করে। ইস্যু 40195122 দেখুন।

webgpu.h C API-তে এখন আর Swapchain অবজেক্টের ধারণাটি নেই। এই পরিবর্তনটি জাভাস্ক্রিপ্ট API-এর সাথে ঘনিষ্ঠভাবে সামঞ্জস্য রাখার জন্য করা হয়েছে। অভ্যন্তরীণ কনফিগারেশন এখন নতুন wgpu::Surface অবজেক্টের Configure() মেথডের মাধ্যমে করা হয়, যা ভবিষ্যতে পরিবর্তিত হতে পারে। "Build an app with WebGPU" ডকুমেন্টেশনে একটি উদাহরণ দেখুন। ইস্যু 42241264 দেখুন।

কমিটগুলোর বিস্তারিত তালিকাটি দেখুন।

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

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

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

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩