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

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

দ্বৈত উৎস মিশ্রণ

দুটি ফ্র্যাগমেন্ট শেডার আউটপুটকে একটি একক ফ্রেমবাফারে একত্রিত করাকে ডুয়াল সোর্স ব্লেন্ডিং বলা হয়। এই কৌশলটি বিশেষত সেইসব অ্যাপ্লিকেশনের জন্য উপযোগী যেগুলিতে জটিল ব্লেন্ডিং অপারেশনের প্রয়োজন হয়, যেমন পোর্টার-ডাফ ব্লেন্ড মোডের উপর ভিত্তি করে তৈরি অ্যাপ্লিকেশনগুলো। ধারাবাহিক রেন্ডার পাসগুলোকে একটি একক রেন্ডার পাস দ্বারা প্রতিস্থাপন করে, ডুয়াল সোর্স ব্লেন্ডিং পারফরম্যান্স এবং নমনীয়তা বাড়াতে পারে।

নতুন "dual-source-blending" WebGPU ফিচারটি আপনাকে @location(0) এ WGSL @blend_src অ্যাট্রিবিউট ব্যবহার করে ব্লেন্ডিং সোর্স ইনডেক্স এবং নিম্নলিখিত ব্লেন্ড ফ্যাক্টরগুলি নির্দেশ করতে দেয়: "src1" , "one-minus-src1" , "src1-alpha" , এবং "one-minus-src1-alpha" । নিম্নলিখিত স্নিপেট, chromestatus এন্ট্রি , এবং ইস্যু 341973423 দেখুন।

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("dual-source-blending")) {
  throw new Error("Dual source blending support is not available");
}
// Explicitly request dual source blending support.
const device = await adapter.requestDevice({
  requiredFeatures: ["dual-source-blending"],
});

const code = `
  enable dual_source_blending;

  struct FragOut {
    @location(0) @blend_src(0) color : vec4f,
    @location(0) @blend_src(1) blend : vec4f,
  }

  @fragment fn main() -> FragOut {
    var output : FragOut;
    output.color = vec4f(1.0, 1.0, 1.0, 1.0);
    output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
    return output;
  }
`;

const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...

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

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

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

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

GPUAdapter requestAdapterInfo() এর অপ্রচলিতকরণ

GPUAdapter-এর requestAdapterInfo() অ্যাসিঙ্ক্রোনাস মেথডটি অপ্রয়োজনীয়, কারণ ডেভেলপাররা ইতিমধ্যেই GPUAdapter-এর info অ্যাট্রিবিউট ব্যবহার করে সিঙ্ক্রোনাসভাবে GPUAdapterInfo পেতে পারেন। তাই, এই নন-স্ট্যান্ডার্ড GPUAdapter requestAdapterInfo() মেথডটি এখন ডেপ্রিকেটেড করা হয়েছে। ডেপ্রিকেটেড করার উদ্দেশ্য দেখুন।

DevTools কনসোল requestAdapterInfo() এর জন্য একটি অবচয় সতর্কতা প্রদর্শন করছে।
Chrome DevTools-এ requestAdapterInfo() ফাংশনটি অপ্রচলিত হওয়ায় সতর্কবার্তা।

ভোরের আপডেট

webgpu.h C API এক্সটেনশন স্ট্রাক্টগুলির জন্য কিছু নামকরণের নিয়ম নির্ধারণ করেছে। নিম্নলিখিত নাম পরিবর্তন এবং ইস্যু 42241174 দেখুন।

WGPURenderPassDescriptor এক্সটেনশন
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
WGPUShaderModuleDescriptor এক্সটেনশন
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
WGPUSurfaceDescriptor এক্সটেনশন
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

জাভাস্ক্রিপ্ট এপিআই অনুযায়ী এর তিনটি সম্ভাব্য অবস্থা (true, false, এবং undefined) আরও ভালোভাবে প্রতিফলিত করার জন্য WGPUDepthStencilState এর depthWriteEnabled অ্যাট্রিবিউটের টাইপ বুলিয়ান থেকে WGPUOptionalBool এ পরিবর্তিত হয়েছে। আরও জানতে, নিম্নলিখিত কোড স্নিপেট এবং webgpu-headers PR দেখুন।

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

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

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

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

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

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩