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

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

পঠন-যোগ্য এবং পঠন-লিখনযোগ্য স্টোরেজ টেক্সচার

স্টোরেজ টেক্সচার বাইন্ডিং টাইপটি শেডারগুলিকে TEXTURE_BINDING ব্যবহার যোগ না করেই স্টোরেজ টেক্সচার থেকে ডেটা পড়তে এবং নির্দিষ্ট কিছু ফরম্যাটে মিশ্র রিড ও রাইট অপারেশন সম্পাদন করতে দেয়। যখন navigator.gpu.wgslLanguageFeatures ফাইলে "readonly_and_readwrite_storage_textures" WGSL ল্যাঙ্গুয়েজ এক্সটেনশনটি উপস্থিত থাকে, তখন একটি বাইন্ড গ্রুপ লেআউট তৈরি করার সময় আপনি GPUStorageTexture অ্যাক্সেস "read-write" অথবা "read-only" হিসেবে সেট করতে পারেন। পূর্বে এটি "write-only" তে সীমাবদ্ধ ছিল।

এরপর, আপনার WGSL শেডার কোড স্টোরেজ টেক্সচারের জন্য read_write এবং read অ্যাক্সেস কোয়ালিফায়ার ব্যবহার করতে পারবে, textureLoad() এবং textureStore() বিল্ট-ইন ফাংশনগুলো সেই অনুযায়ী কাজ করবে, এবং একটি ওয়ার্কগ্রুপের মধ্যে টেক্সচার মেমোরি অ্যাক্সেস সিনক্রোনাইজ করার জন্য একটি নতুন textureBarrier() বিল্ট-ইন ফাংশনও পাওয়া যাবে।

আপনার WGSL শেডার কোডের শুরুতে requires readonly_and_readwrite_storage_textures; করে নন-পোর্টেবিলিটির সম্ভাবনা বোঝানোর জন্য একটি `requires-directive` ব্যবহার করার পরামর্শ দেওয়া হয়। নিম্নলিখিত উদাহরণ এবং `dawn:1972` ইস্যুটি দেখুন।

if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
  throw new Error("Read-only and read-write storage textures are not available");
}

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

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

const shaderModule = device.createShaderModule({ code: `
  requires readonly_and_readwrite_storage_textures;

  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

পরিষেবা কর্মী এবং ভাগাভাগি কর্মীদের সমর্থন

ক্রোমের WebGPU ওয়েব ওয়ার্কার সাপোর্টকে পরবর্তী স্তরে নিয়ে গেছে, এখন এটি সার্ভিস ওয়ার্কার এবং শেয়ার্ড ওয়ার্কার উভয়কেই সাপোর্ট করে। আপনি ব্যাকগ্রাউন্ড টাস্ক এবং অফলাইন সক্ষমতা বাড়াতে সার্ভিস ওয়ার্কার ব্যবহার করতে পারেন, এবং স্ক্রিপ্টগুলোর মধ্যে দক্ষতার সাথে রিসোর্স শেয়ার করার জন্য শেয়ার্ড ওয়ার্কার ব্যবহার করতে পারেন। ইস্যু chromium:41494731 দেখুন।

এক্সটেনশন সার্ভিস ওয়ার্কারে কীভাবে WebGPU ব্যবহার করতে হয় তা দেখতে ক্রোম এক্সটেনশন স্যাম্পল এবং WebLLM ক্রোম এক্সটেনশনটি দেখুন।

WebLLM ক্রোম এক্সটেনশনটির স্ক্রিনশট।
WebLLM ক্রোম এক্সটেনশন।

নতুন অ্যাডাপ্টার তথ্যের বৈশিষ্ট্য

যদি ব্যবহারকারী chrome://flags/#enable-webgpu-developer-features " ফ্ল্যাগটি সক্রিয় করে থাকেন, তাহলে requestAdapterInfo() কল করার সময় এখন অ-মানক d3dShaderModel এবং vkDriverVersion অ্যাডাপ্টার তথ্য অ্যাট্রিবিউটগুলো পাওয়া যাবে। যখন সমর্থিত:

https://webgpureport.org-এর একটি স্ক্রিনশট, যেখানে অ্যাডাপ্টার তথ্যে vkDriverVersion দেখা যাচ্ছে।
https://webgpureport.org- এ অ্যাডাপ্টারের তথ্য vkDriverVersion দেখানো হয়েছে।

বাগ সংশোধন

layout: "auto" ব্যবহার করে একই বাইন্ডগ্রুপ সহ দুটি পাইপলাইন তৈরি করার পর, প্রথম পাইপলাইনটিতে একটি বাইন্ডগ্রুপ তৈরি করে এবং সেটি দ্বিতীয় পাইপলাইনে ব্যবহার করলে এখন একটি GPUValidationError দেখা দেয়। এটির অনুমতি দেওয়াটা একটি ইমপ্লিমেন্টেশন বাগ ছিল, যা এখন যথাযথ টেস্টের মাধ্যমে ঠিক করা হয়েছে। ইস্যু `dawn:2402` দেখুন।

ভোরের আপডেট

ডন এপিআই-তে, wgpuDeviceSetUncapturedErrorCallback দিয়ে সেট করা আনক্যাপচারড এরর কলব্যাকটি এখন জিপিইউ ডিভাইস হারিয়ে যাওয়ার পর আর কল করা হয় না। এই সংশোধনটি ডনকে জাভাস্ক্রিপ্ট এপিআই স্পেসিফিকেশন এবং ব্লিংকের ইমপ্লিমেন্টেশনের সাথে সামঞ্জস্যপূর্ণ করে। ইস্যু dawn:2459 দেখুন।

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

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

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

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

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩