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

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

সমর্থিত WGSL ভাষা এক্সটেনশন

GPU অবজেক্টের wgslLanguageFeatures মেম্বারটি সমর্থিত WGSL ল্যাঙ্গুয়েজ এক্সটেনশনগুলোর নাম তালিকাভুক্ত করে। সমর্থিত WGSL ল্যাঙ্গুয়েজ এক্সটেনশনগুলো স্বয়ংক্রিয়ভাবে সক্রিয় হয়ে যায়, তাই আপনাকে আলাদাভাবে কোনোটির জন্য অনুরোধ করতে হবে না। এই তালিকাটি বর্তমানে খালি, তবে ভবিষ্যতে আপনি এগুলোর অনেক কিছু আশা করতে পারেন (উদাহরণস্বরূপ, do-while loops )। dawn:1777 ইস্যুটি দেখুন।

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

Direct3D 11 এর জন্য পরীক্ষামূলক সমর্থন

ক্রোমিয়াম টিম Direct3D 11-এর জন্য WebGPU সাপোর্ট যোগ করার কাজ করছে। আপনি এখন Windows-এ Chrome-এর সাথে --enable-unsafe-webgpu --use-webgpu-adapter=d3d11 কমান্ড-লাইন ফ্ল্যাগগুলো ব্যবহার করে স্থানীয়ভাবে এটি পরীক্ষা করতে পারেন। ইস্যু dawn:1705 দেখুন।

এসি পাওয়ারে ডিফল্টভাবে ডেডিকেটেড জিপিইউ পাওয়া যায়।

ডুয়াল জিপিইউ ম্যাকওএস ডিভাইসগুলিতে, যদি powerPreference অপশন ছাড়া requestAdapter() কল করা হয়, তাহলে ব্যবহারকারীর ডিভাইসটি এসি পাওয়ারে সংযুক্ত থাকলে ডিসক্রিট জিপিইউ রিটার্ন করা হয়। অন্যথায়, ইন্টিগ্রেটেড জিপিইউ রিটার্ন করা হয়। পরিবর্তন ৪৪৯৯৩০৭ দেখুন।

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

নতুন ডেভটুলস সতর্কতা

GPUExtend3DDictdepth কী ব্যবহার করা হলে DevTools Console-এ একটি সতর্কবার্তা দেখানো হয়, কারণ সঠিক কী হলো depthOrArrayLayersইস্যু chromium:1440900 দেখুন।

যদি কোনো GPUBlendComponent সুস্পষ্ট এবং ডিফল্ট করা মেম্বারের মিশ্রণ থাকে, তাহলেও একটি সতর্কবার্তা দেখানো হয়। ইস্যু dawn:1785 দেখুন।

যদিও শূন্য-আকারের ডিসপ্যাচ এবং ড্র বৈধ, একটি সতর্কবার্তা ডেভেলপারদের যথাসম্ভব এগুলি এড়িয়ে চলতে উৎসাহিত করে। ইস্যু dawn:1786 দেখুন।

আরও ভালো ত্রুটি বার্তা

GPUCommandEncoder ব্যবহার করার সময় যদি finish() ইতিমধ্যেই কল করা হয়ে থাকে, তাহলে এখন একটি উন্নত ত্রুটি বার্তা প্রদান করা হয়। ইস্যু dawn:1736 দেখুন।

ধ্বংসপ্রাপ্ত অবজেক্ট সহ কমান্ড বাফার জমা দেওয়ার সময়, submit() এ ব্যবহৃত কমান্ড বাফারগুলির লেবেলগুলি এখন ত্রুটির বার্তায় দেখা যাচ্ছে। ইস্যু dawn:1747 দেখুন।

depthStencil যাচাই করার সময়, এরর মেসেজে এখন depth stencil স্টেটের অবৈধ অংশটি উল্লেখ করা হয়। ইস্যু dawn:1735 দেখুন।

minBindingSize ভ্যালিডেশন ত্রুটির বার্তায় এখন ভ্যালিডেশনে ব্যর্থ হওয়া বাইন্ডিংয়ের গ্রুপ ও নম্বরের পাশাপাশি বাফারও রিপোর্ট করা হয়। ইস্যু dawn:1604 দেখুন।

GPUBuffer অবজেক্টের mapAsync() মেথড দ্বারা ফেরত আসা এরর মেসেজগুলো ডেভেলপারদের ডিবাগিং-এর সুবিধার্থে উন্নত করা হয়েছে। নিচে একটি উদাহরণ এবং chromium:1431622 ইস্যুটি দেখুন।

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

ম্যাকওএস ডিবাগিং টুলের লেবেলগুলি

use_user_defined_labels_in_backend ডিবাগ টগলটি আপনাকে অবজেক্ট লেবেলগুলো ব্যাকএন্ডে ফরোয়ার্ড করার সুযোগ দেয়, যাতে সেগুলো RenderDoc, PIX, বা Instruments-এর মতো প্ল্যাটফর্ম-নির্দিষ্ট ডিবাগিং টুলগুলোতে দেখা যায়। এখন থেকে, ডিবাগিংয়ের জন্য এটি সক্রিয় করলে macOS-এ আরও উন্নত ডিবাগ অভিজ্ঞতা পাওয়া যাবে। ইস্যু dawn:1784 দেখুন।

ম্যাকওএস-এর ইন্সট্রুমেন্টস অ্যাপের একটি স্ক্রিনশট, যেখানে ওয়েবজিপিইউ থেকে আসা কাস্টম লেবেলগুলো দেখা যাচ্ছে।
macOS-এর Instruments অ্যাপে ব্যবহারকারী-নির্ধারিত লেবেল।

কম্পাইলেশন ব্যর্থ হলে HLSL লগ করুন।

` dump_shaders ডিবাগ টগলটি আপনাকে ইনপুট WGSL শেডার এবং অনূদিত ব্যাকএন্ড শেডার লগ করার সুযোগ দেয়। এখন থেকে, ডিবাগিংয়ের জন্য এটি চালু করলে, কম্পাইলেশন ব্যর্থ হলে HLSL ডাম্প করা হবে। ইস্যু dawn:1681 দেখুন।

ভোরের আপডেট

আনসেট ভার্টেক্স বাফার

wgpu::RenderPassEncoder বা wgpu::RenderBundleEncoder এর SetVertexBuffer() ফাংশনে wgpu::Buffer পরিবর্তে nullptr পাস করলে, একটি নির্দিষ্ট স্লটে পূর্বে সেট করা ভার্টেক্স বাফারকে আনসেট করা যায়। ইস্যু dawn:1675 দেখুন।

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

ক্ষণস্থায়ী সংযুক্তি

আপনি wgpu::TextureUsage::TransientAttachment ব্যবহার নির্ধারণ করে এমন অ্যাটাচমেন্ট তৈরি করতে পারেন যা রেন্ডার পাস অপারেশনগুলোকে টাইল মেমরিতে থাকতে দেয়, ফলে VRAM ট্র্যাফিক এড়ানো যায় এবং সম্ভাব্যভাবে টেক্সচারের জন্য VRAM বরাদ্দও এড়ানো সম্ভব হয়। এই ফিচারটি শুধুমাত্র Metal এবং Vulkan-এর জন্য সমর্থিত। ইস্যু dawn: 1695 দেখুন।

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

depot_tools ছাড়া নির্মাণ

নতুন DAWN_FETCH_DEPENDENCIES CMake অপশনটি আপনাকে একটি পাইথন স্ক্রিপ্ট ব্যবহার করে Dawn-এর ডিপেন্ডেন্সিগুলো ফেচ করার সুযোগ দেয়, যা DEPS ফাইলগুলো পড়ে। এর ফলে, depot_tools এর উপর নির্ভরশীল সমস্ত প্রোজেক্টের জন্য এটি ইনস্টল করার প্রয়োজন হয় না। পরিবর্তন ১৩১৭৫০ দেখুন।

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

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

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

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩