WebGPU (Chrome 145) তে নতুন কী?

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

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

WGSL উপগোষ্ঠী_একরূপতা সম্প্রসারণ

WGSL ল্যাঙ্গুয়েজ এক্সটেনশন subgroup_uniformity সাবগ্রুপ এবং কোয়াড বিল্ট-ইন ফাংশনগুলির জন্য ইউনিফর্মিটি বিশ্লেষণের পরিধি পরিবর্তন করে, যাতে এটি ওয়ার্কগ্রুপের পরিবর্তে সাবগ্রুপ স্তরে কাজ করে। এই বৈশিষ্ট্যটি সাবগ্রুপের কার্যকারিতাকে আরও বেশি ক্ষেত্রে ইউনিফর্ম হিসেবে বিবেচনা করার সুযোগ দেয়, যা ডেভেলপারদের জন্য কাজের মান উন্নত করে এবং ইউনিফর্মিটি চেক সম্পূর্ণরূপে নিষ্ক্রিয় করার সম্ভাবনা কমিয়ে দেয়। এর একটি বাস্তব প্রভাব হলো, আরও বেশি ভ্যালুকে সাবগ্রুপ-ইউনিফর্ম হিসেবে দেখা হবে, যেমন সম্প্রতি যুক্ত হওয়া subgroup_id বিল্ট-ইন ভ্যালুটি।

এই ল্যাঙ্গুয়েজ এক্সটেনশনটি navigator.gpu.wgslLanguageFeatures ব্যবহার করে ফিচার-ডিটেক্ট করা যেতে পারে। নিম্নলিখিত উদাহরণ এবং শিপ করার ইন্টেন্টটি দেখুন।

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_uniformity")) {
  throw new Error(`WGSL subgroup uniformity is not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  
  @group(0) @binding(0) var<storage, read_write> non_uniform: i32;

  fn main() {
    if (non_uniform == 42) {
      _ = subgroupElect();
    }
  }`,
}); // WGSL error: subgroupElect must only be called from subgroup uniform control flow.

ওয়ার্কারদের মধ্যে পরীক্ষামূলক সিঙ্ক্রোনাস বাফার ম্যাপিং

WebGPU এবং অ্যাপ্লিকেশন কোডের মধ্যেকার প্রতিবন্ধকতা কমানোর সম্ভাব্য উপায়গুলো অন্বেষণ করতে, ক্রোম টিম ওয়ার্কারদের মধ্যে সিনক্রোনাস বাফার ম্যাপিং নিয়ে গবেষণা করছে। এই প্রচেষ্টার অংশ হিসেবে, GPUBuffer জন্য একটি নতুন পরীক্ষামূলক mapSync() মেথডের প্রোটোটাইপ তৈরি করা হয়েছে। ওয়ার্কারদের মধ্যে সীমাবদ্ধ এই মেথডটি mapAsync() -এর মতোই কাজ করে।

এই ফিচারটি পরীক্ষামূলক, এবং এটিকে প্রমিতকরণের জন্য প্রস্তাব করা হবে কিনা তা নির্ধারণ করতে আপনার মতামত গুরুত্বপূর্ণ। এটি ব্যবহার করে দেখতে, --enable-features=WebGPUMapSyncOnWorkers সুইচটি ব্যবহার করে Chrome চালু করুন এবং এর উপযোগিতা ও প্রভাব সম্পর্কে মতামত জানান। শুরু করার জন্য নিচের কোড স্নিপেটটি দেখুন।

// Create a GPU buffer.
const buffer = device.createBuffer({
  size: 42,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Map buffer synchronously when possible.
if ("mapSync" in GPUBuffer.prototype) {
  buffer.mapSync(GPUMapMode.READ);
} else {
  // Awaiting allows other code to run, which can cause application logic issues.
  await buffer.mapAsync(GPUMapMode.READ);
}

ভোরের আপডেট

wgpu::FeatureName::R8UnormStorage ফিচারটি আর উপলব্ধ নেই। এটিকে wgpu::FeatureName::TextureFormatTier1 দ্বারা প্রতিস্থাপন করা হয়েছে, যা এখন এটিকে বাতিল করে দিয়েছে। ইস্যু 472926167 দেখুন।

wgpu::FeatureName::Snorm16TextureFormats ফিচারটি সরিয়ে ফেলা হয়েছে। Resolve ব্যতীত এর কার্যক্ষমতাগুলো এখন মূলত wgpu::FeatureName::TextureFormatsTier1 এর অন্তর্ভুক্ত। ইস্যু 465347942 দেখুন।

(Emdawnwebgpu ছাড়াও) বাইনারিগুলোর নাইটলি রিলিজ এখন গিটহাবে বিল্ড করা হচ্ছে এবং google/dawn releases- এ পাওয়া যাচ্ছে। এগুলো সাধ্যমতো পরিষেবা হিসেবে প্রদান করা হয় এবং এগুলো গুগল বা ডন টিমের দ্বারা স্বাক্ষরিত বা গ্যারান্টিযুক্ত নয়।

Emdawnwebgpu-তে wgpu::ExternalTexture সাপোর্ট যোগ করা হয়েছে। উল্লেখ্য যে, এটি শুধুমাত্র জাভাস্ক্রিপ্ট কোড (যেমন, EM_ASM ) থেকে ইম্পোর্ট করা যাবে, কারণ HTMLVideoElement বা VideoFrame এর মতো জাভাস্ক্রিপ্ট অবজেক্টের প্রয়োজনীয়তার জন্য C/C++-এ এটি তৈরি করা সম্ভব নয়। উদাহরণ কোডের জন্য ইস্যু 462477379 এবং SpotTests.cpp দেখুন।

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

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

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

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

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩