WebGPU-তে নতুন কী আছে (ক্রোম ১৪৯-১৫০)

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

প্রকাশিত: ১৭ জুন, ২০২৬

অবিলম্বে

ইমিডিয়েটস, যা পুশ কনস্ট্যান্ট বা রুট কনস্ট্যান্ট নামেও পরিচিত, আপনাকে ঘন ঘন পরিবর্তনশীল অল্প পরিমাণ ডেটা সরাসরি শেডারে পাঠাতে দেয়। এই প্রক্রিয়াটি জিপিইউ বাফার তৈরি এবং বাইন্ড গ্রুপ পরিচালনার অতিরিক্ত কাজ এড়িয়ে যায়।

প্রতিটি ড্র কল-এর সাথে পরিবর্তিত হওয়া ডেটার জন্য—যেমন একটি অনন্য অবজেক্ট আইডি বা শত শত অবজেক্টের জন্য একটি 3D ট্রান্সফরমেশন ম্যাট্রিক্স—ইউনিফর্ম বাফার বাইন্ডিং আপডেট করা সিপিইউ ওভারহেড তৈরি করে। মেমরিতে ডেটা লেখা এবং জিপিইউ লুকআপ পরিচালনা এড়াতে সরাসরি পাস এনকোডারে র ভ্যালু ইনজেক্ট করুন।

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

আপনার WGSL শেডারে, <immediate> অ্যাড্রেস স্পেস আপনাকে ইমিডিয়েট ডেটা সংজ্ঞায়িত করার সুযোগ দেয়, যা সরাসরি পাস এনকোডারে পাঠানো যায়। কোনো গ্রুপ বাইন্ড না করেই এই ডেটা সরবরাহ করতে, ড্র কল করার আগে জাভাস্ক্রিপ্টে setImmediates() কল করুন। সাপোর্ট আছে কিনা তা পরীক্ষা করতে, navigator.gpu.wgslLanguageFeatures এর মাধ্যমে immediate_address_space WGSL ল্যাঙ্গুয়েজ এক্সটেনশনটি ফিচার-ডিটেক্ট করুন। নিম্নলিখিত উদাহরণ এবং এটি শিপ করার উদ্দেশ্য দেখুন।

if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
   throw new Error(`WGSL immediate address space is not available`);
}

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

const module = device.createShaderModule({ code: `
  requires immediate_address_space;

  var<immediate> color: vec4f;

  @vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
    const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
    return vec4f(pos[i], 0, 1);
  }

  @fragment fn fragmentMain() -> @location(0) vec4f {
    return color;
  }`,
});

// Create render pass encoder (omitted)...

// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

এই বৈশিষ্ট্যটি সম্পর্কে আরও বিস্তারিত জানতে WebGPUFundamentals Immediates দেখুন।

মাইক্রোসফটের টিমকে তাদের অবদানের জন্য সাধুবাদ!

ক্ষণস্থায়ী সংযুক্তিগুলির জন্য কঠোরতর যাচাইকরণ

WebGPU সম্প্রতি TRANSIENT_ATTACHMENT GPUTextureUsage ফ্ল্যাগটি চালু করেছে, যা ডেভেলপারদের ডেপথ-স্টেনসিল বাফার বা মাল্টিস্যাম্পলড টার্গেটের মতো অস্থায়ী রেন্ডার অ্যাটাচমেন্ট তৈরি করতে দেয়। এই অ্যাটাচমেন্টগুলো মূল VRAM বরাদ্দ না করেই দ্রুত, অন-চিপ টাইল মেমরিতে থাকে।

সাম্প্রতিক আপডেটগুলি ( #6248 এবং #6267 ) এই মেমরি-সাশ্রয়ী টেক্সচার অ্যাটাচমেন্টগুলির অপব্যবহার রোধ করতে যাচাইকরণ নিয়মগুলিকে পরিমার্জন করেছে:

  • প্ল্যাটফর্মের সীমাবদ্ধতার কারণে, ট্রানজিয়েন্ট টেক্সচার তৈরি করার সময় viewFormats অবশ্যই একটি খালি অ্যারে হতে হবে। বিকল্প ভিউ ফরম্যাটের প্রয়োজন নেই, কারণ ট্রানজিয়েন্ট টেক্সচার শুধুমাত্র রেন্ডারিংয়ের জন্য ব্যবহৃত হয়।
  • একটি টেক্সচার ভিউ তৈরি করলে ব্যবহারের ফ্ল্যাগগুলো সীমিত করা যায় না। একটি ট্রানজিয়েন্ট টেক্সচারে createView() কল করা হলে, ভিউটি তার ব্যবহার পরিবর্তন করতে পারে না।
  • রেন্ডার পাসের ভিতরে resolveTarget হিসেবে ট্রানজিয়েন্ট অ্যাটাচমেন্ট ব্যবহার করা যায় না।

ভোরের আপডেট

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

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

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

ক্রোম ১৪৯-১৫০

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

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩