WebGPU-তে নতুন কী কী রয়েছে (Chrome 132)

François Beaufort
François Beaufort

প্রকাশিত: ৮ জানুয়ারি, ২০২৫

টেক্সচার ভিউয়ের ব্যবহার

GPU টেক্সচার ভিউ বর্তমানে তার সোর্স GPU টেক্সচার থেকে সমস্ত ব্যবহারের ফ্ল্যাগ ইনহেরিট করে। এটি সমস্যাজনক হতে পারে কারণ কিছু ভিউ ফর্ম্যাট নির্দিষ্ট ব্যবহারের সাথে মানানসই নয়। এই সমস্যার সমাধান করতে, ঐচ্ছিক usage মেম্বার সহ createView() কল করলে, বেছে নেওয়া ভিউ ফর্ম্যাটের সাথে মানানসই সোর্স টেক্সচারের ব্যবহার সংক্রান্ত ফ্ল্যাগের একটি সাবসেট স্পষ্টভাবে নির্দিষ্ট করতে পারবেন।

এই পরিবর্তনের ফলে আগে থেকেই যাচাই করা যায় এবং ভিউ কীভাবে ব্যবহার করা হয় তার উপর আরও সূক্ষ্ম নিয়ন্ত্রণ পাওয়া যায়। এছাড়াও, এটি অন্যান্য গ্রাফিক্স API-এর সাথে সামঞ্জস্যপূর্ণ যেখানে ভিউ তৈরি করার ক্ষেত্রে ব্যবহার সংক্রান্ত ফ্ল্যাগ হল সাধারণ প্যারামিটার, যা অপ্টিমাইজ করার সুযোগ প্রদান করে।

নিম্নলিখিত স্নিপেট, chromestatus এন্ট্রি এবং issue 363903526 দেখুন।

const texture = myDevice.createTexture({
  size: [4, 4],
  format: "rgba8unorm",
  usage:
    GPUTextureUsage.RENDER_ATTACHMENT |
    GPUTextureUsage.TEXTURE_BINDING |
    GPUTextureUsage.STORAGE_BINDING,
  viewFormats: ["rgba8unorm-srgb"],
});

const view = texture.createView({
  format: 'rgba8unorm-srgb',
  usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});

32-বিট ফ্লোট টেক্সচার ব্লেন্ডিং

HDR রেন্ডারিংয়ের জন্য ৩২-বিট ফ্লোটিং-পয়েন্ট টেক্সচার অপরিহার্য, যাতে রঙের ভ্যালুর বিস্তৃত রেঞ্জ বজায় রাখা যায় এবং কালার ব্যান্ডিং আর্টিফ্যাক্ট প্রতিরোধ করা যায়। যেমন, বৈজ্ঞানিক ভিজ্যুয়ালাইজেশনে।

নতুন "float32-blendable" GPU ফিচার, "r32float", "rg32float" ও "rgba32float" ফর্ম্যাটের সাথে GPU টেক্সচারকে মিশিয়ে দেয়। এই ফিচার সহ GPU ডিভাইসের অনুরোধ করার সময়, এখন কোনও float32-ফর্ম্যাট অ্যাটাচমেন্টের সাথে ব্লেন্ডিং ব্যবহার করে এমন একটি রেন্ডার পাইপলাইন তৈরি করা সম্ভব।

নিচের স্নিপেট, chromestatus এন্ট্রি এবং issue 369649348 দেখুন।

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

// ... Creation of shader modules is omitted for readability.

// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
  vertex: { module: myVertexShaderModule },
  fragment: {
    module: myFragmentShaderModule,
    targets: [
      {
        format: "rgba32float",
        blend: { color: {}, alpha: {} },
      },
    ],
  },
  layout: "auto",
});

// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...

GPUDevice adapterInfo অ্যাট্রিবিউট

ব্যবহারকারীর প্রদান করা GPUDevice অবজেক্ট গ্রহণকারী লাইব্রেরির জন্য ফিজিক্যাল GPU সম্পর্কে তথ্য অ্যাক্সেস করা গুরুত্বপূর্ণ, কারণ GPU আর্কিটেকচারের উপর ভিত্তি করে তাদের অপ্টিমাইজ বা ওয়ার্কঅ্যারাউন্ড প্রয়োগ করার প্রয়োজন হতে পারে। GPUAdapter অবজেক্টের মাধ্যমে এই তথ্য অ্যাক্সেস করা গেলেও, শুধুমাত্র GPUDevice থেকে এটি সরাসরি পাওয়ার কোনও উপায় নেই। এটি অসুবিধাজনক হতে পারে, কারণ এর জন্য ব্যবহারকারীকে GPUDevice-এর পাশাপাশি অতিরিক্ত তথ্য প্রদান করতে হতে পারে।

এই সমস্যার সমাধান করতে, GPUDevice adapterInfo অ্যাট্রিবিউটের মাধ্যমে এখন GPUAdapterInfo এক্সপোজ করা হয়েছে। এগুলি আগে থেকে থাকা GPUAdapter info অ্যাট্রিবিউটের মতো।

নিচের স্নিপেট, chromestatus এন্ট্রি এবং issue 376600838 দেখুন।

function optimizeForGpuDevice(device) {
  if (device.adapterInfo.vendor === "amd") {
    // Use AMD-specific optimizations.
  } else if (device.adapterInfo.architecture.includes("turing")) {
    // Optimize for NVIDIA Turing architecture.
  }
}

ভুল ফর্ম্যাটে ক্যানভাস কনটেক্সট কনফিগার করলে JavaScript সংক্রান্ত সমস্যা হয়

আগে, GPU ক্যানভাস কনটেক্সটের configure() পদ্ধতির সাথে ভুল টেক্সচার ফর্ম্যাট ব্যবহার করলে, GPU যাচাইকরণ সংক্রান্ত সমস্যা হত। এটি পরিবর্তন করে জাভাস্ক্রিপ্ট TypeError দেখানো হয়েছে। এর ফলে এমন পরিস্থিতি এড়ানো যায় যেখানে GPU ক্যানভাসের প্রসঙ্গ ভুলভাবে কনফিগার করা সত্ত্বেও getCurrentTexture() একটি সঠিক GPU টেক্সচার রিটার্ন করে। issue 372837859-এ আরও তথ্য পাওয়া যাবে।

টেক্সচারের উপর ফিল্টার করা স্যাম্পলার সংক্রান্ত বিধিনিষেধ

আগে "sint", "uint" ও "depth" ফর্ম্যাট টেক্সচার ব্যবহার করে ফিল্টার করা স্যাম্পেল তৈরি করার অনুমতি দেওয়া হত। এটি এখন ফিল্টারিং স্যাম্পলারের সাথে "sint" বা "uint" ফর্ম্যাট টেক্সচার ব্যবহার করা সঠিকভাবে বন্ধ করে দেয়। মনে রাখবেন, আপনি যদি ফিল্টারিং স্যাম্পলার সহ "depth" টেক্সচার ব্যবহার করেন, তাহলে এটি বর্তমানে একটি সতর্কতা নির্গমন করে, কারণ এটি ভবিষ্যতে অনুমোদিত হবে না। issue 376497143 দেখুন।

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

সাবগ্রুপ এক্সপেরিমেন্টেশন বাড়ানো

সাবগ্রুপ এক্সপেরিমেন্টেশন, যা প্রথমে Chrome 131-এ শেষ হওয়ার কথা ছিল, তা Chrome 133 পর্যন্ত বাড়ানো হয়েছে এবং ১৬ এপ্রিল, ২০২৫-এ শেষ হবে। প্রথম অরিজিন ট্রায়াল পারফর্ম্যান্সের উপর ফোকাস করলেও, এতে গুরুত্বপূর্ণ পোর্টেবিলিটি সুরক্ষা ছিল না। এইসব সুরক্ষা এখন যোগ করা হবে, এর ফলে আগে থেকে থাকা কোডে সম্ভাব্য সমস্যা হতে পারে।

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

Windows-এ requestAdapter()-এর সাথে powerPreference বিকল্প ব্যবহার করা হলে, এখন DevTools-এ একটি সতর্কতা দেখা যায়। Chrome কীভাবে দুটি আলাদা GPU ব্যবহার করতে এবং সেগুলির মধ্যে ফলাফল কম্পোজিট করতে হয় তা জানলে এই সতর্কতা সরিয়ে দেওয়া হবে। সমস্যা 369219127 দেখুন।

খুব বড় GPU বাফার তৈরি করার সময়, GPU বাফারের সাইজ এখন সমস্যার মেসেজে দেখানো হয়। issue 374167798 দেখুন।

১৬-বিট স্বাভাবিক টেক্সচার ফর্ম্যাটের জন্য পরীক্ষামূলক সহায়তা

১৬-বিট সাইনড নরমালাইজড এবং আনসাইনড নরমালাইজড টেক্সচার ফর্ম্যাট এখন "chromium-experimental-snorm16-texture-formats" এবং "chromium-experimental-unorm16-texture-formats" GPU ফিচারের পিছনে পরীক্ষামূলকভাবে উপলভ্য, কারণ এগুলি স্ট্যান্ডার্ডাইজ করার জন্য আলোচনা করা হচ্ছে।

এইসব ফিচার COPY_SRC, COPY_DST, TEXTURE_BINDING, RENDER_ATTACHMENT ব্যবহার, মাল্টিস্যাম্পলিং এবং রেজোলিউশন ক্ষমতা সহ ১৬-বিট স্বাভাবিক টেক্সচার ফর্ম্যাটের জন্য সহায়তা যোগ করে। অতিরিক্ত ফর্ম্যাটগুলি হল "r16unorm", "rg16unorm", "rgba16unorm", "r16snorm", "rg16snorm" এবং "rgba16snorm"।

এইসব পরীক্ষামূলক ফিচার স্ট্যান্ডার্ডাইজ না হওয়া পর্যন্ত, Chrome-এ সেগুলি উপলভ্য করতে chrome://flags/#enable-unsafe-webgpu-এ "অনিরাপদ WebGPU সহায়তা" ফ্ল্যাগ চালু করুন।

নিচের স্নিপেট ও issue 374790898 দেখুন।

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
  throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});

// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
  size: [4, 4],
  format: "rgba16snorm",
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});

// Send the appropriate commands to the GPU...

ভোরের আপডেট

wgpu::Adapter ও wgpu::Device থেকে EnumerateFeatures(FeatureName * features) পদ্ধতিগুলি GetFeatures(SupportedFeatures * features) ব্যবহারের জন্য অবচিত করা হয়েছে। issue 368672123 দেখুন।

webgpu.h C API-তে সমস্ত char const *-কে WGPUStringView স্ট্রাকচারে পরিবর্তন করা হয়েছে যা UTF-8 এনকোড করা স্ট্রিংয়ে ভিউকে সংজ্ঞায়িত করে। এটি দৈর্ঘ্যের সাথে স্ট্রিংয়ের ডেটার পয়েন্টার হিসেবে কাজ করে। এর ফলে, স্ট্রিং কপি না করেই আপনি এর অংশ নিয়ে কাজ করতে পারবেন। সমস্যা ৪২২৪১১৮৮ দেখুন।

এতে শুধু কিছু গুরুত্বপূর্ণ হাইলাইট কভার করা হয়েছে। কমিটের বিস্তারিত তালিকা দেখুন।

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

WebGPU-তে নতুন কী কী আছে সিরিজে যা যা কভার করা হয়েছে তার একটি তালিকা।

Chrome 155-156

Chrome 153-154

Chrome 151-152

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113