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

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

প্রকাশিত: ১৫ সেপ্টেম্বর, ২০২৬

WGSL বাফার_ভিউ এক্সটেনশন

WGSL ল্যাঙ্গুয়েজ এক্সটেনশন buffer_view একটি uniform, storage, বা workgroup ভেরিয়েবলের ডেটাকে একাধিক ভিন্ন টাইপ হিসেবে ব্যাখ্যা করার সুযোগ দেয়। প্রচলিত টাইপ-প্যানিং ব্যবহার থেকে শুরু করে একটি ভেরিয়েবলকে একাধিক লজিক্যাল ভেরিয়েবলে বিভক্ত করা পর্যন্ত এর ব্যাপক উপযোগিতা রয়েছে।

নিরাপত্তা এবং বাস্তবায়নের সরলতার জন্য, রিইন্টারপ্রিটেড টাইপগুলো শুধুমাত্র নিম্নলিখিত বিল্ট-ইন ফাংশনগুলো ব্যবহার করে অ্যাক্সেস করা যায়:

  • bufferView<T>() একটি নির্দিষ্ট বাইট অফসেটে থাকা মেমরিকে T টাইপের একটি পয়েন্টার হিসেবে বিবেচনা করে।
  • bufferArrayView<T>() একটি নির্দিষ্ট সংখ্যক উপাদান সহ একটি সীমাবদ্ধ অ্যারে পয়েন্টার তৈরি করে।
  • bufferLength() বাফারের বাইট সাইজ ফেরত দেয়।

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

requires buffer_view;

//  +-------------------+-----------------------------+----------------------------+
//  | Byte 0 .. 3       | Byte 4 .. (4 + N - 1)       | Byte (4 + N) .. End        |
//  +-------------------+-----------------------------+----------------------------+
//  | indices_size (u32)| indices (array<u32, count>) | vertices (array<f32>)      |
//  +-------------------+-----------------------------+----------------------------+
@group(0) @binding(0) var<storage> indices_and_vertices : buffer;

fn unpack_and_process_geometry() {
  let indices_size = *bufferView<u32>(&indices_and_vertices, 0);

  let indices = bufferArrayView<array<u32>>(&indices_and_vertices, 4, indices_size);
  let vertices = bufferView<array<f32>>(&indices_and_vertices, indices_size + 4);
  ...
}

আরও বিস্তারিত জানতে আপনি বাফার ভিউ প্রস্তাবনাটিও দেখতে পারেন এবং ওয়্যারফ্রেম ওয়েবজিপিইউ স্যাম্পলটি নিয়ে পরীক্ষা-নিরীক্ষা করতে পারেন।

WGSL swizzle_assignment এক্সটেনশন

কমিউনিটির অন্যতম বহুল অনুরোধকৃত একটি ফিচারের জবাবে, WGSL এক্সটেনশন swizzle_assignment আপনাকে সরাসরি ভেক্টর সুইজল-এ লেখার সুযোগ দেয়, যার ফলে আপনি একটিমাত্র স্টেটমেন্টে একাধিক কম্পোনেন্ট আপডেট করতে পারেন। এটি বয়লারপ্লেট কোড ব্যাপকভাবে হ্রাস করে এবং শেডারের পঠনযোগ্যতা উন্নত করে, একই সাথে WGSL-কে অন্যান্য শেডিং ল্যাঙ্গুয়েজের সাথে সামঞ্জস্যপূর্ণ করে তোলে।

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

if (!navigator.gpu.wgslLanguageFeatures.has("swizzle_assignment")) {
  throw new Error(`WGSL swizzle assignment is not available`);
}

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

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

  @vertex
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
    var position = vec4f(0.0, 0.0, 0.0, 1.0);
    position.xy = vec2f(10.0, 20.0); // Swizzle assignment

    return position;
  }`,
});

WGSL এক্সটেনশন আপডেট

texture-formats-tier1 ল্যাঙ্গুয়েজ এক্সটেনশনটি WGSL কোডে সমর্থিত হলেও, পূর্বে জাভাস্ক্রিপ্টে এটি navigator.gpu.wgslLanguageFeatures ( texture_formats_tier1 হিসেবে) এর সাথে সঠিকভাবে ম্যাপ করা ছিল না। এই ম্যাপিং সমস্যাটির এখন সমাধান করা হয়েছে। Chromium CL 8159562 দেখুন।

WGSL-এ subgroup_size_control সক্রিয় করা হলে subgroups ল্যাঙ্গুয়েজ এক্সটেনশনটি এখন স্বয়ংক্রিয়ভাবে সক্রিয় হয়ে যায়। ইস্যু dawn:545285663 দেখুন।

ভোরের আপডেট

নতুন wgpu::FeatureName::BufferMapWriteExtendedUsages পরীক্ষামূলক ফিচারটি আপনাকে wgpu::BufferUsage::MapWrite সাথে wgpu wgpu::BufferUsage::MapRead ছাড়া অন্য যেকোনো wgpu::BufferUsage BufferUsage ব্যবহার করে একটি বাফার তৈরি করতে দেয়, যা সরাসরি একটি ম্যাপেবল বাফারে লেখার সুযোগ দেয় এবং এটি GPU-ব্যবহারযোগ্যও। এর ফলে Vulkan এবং D3D12 ব্যাকএন্ডে স্টেজিং বাফার এবং অতিরিক্ত কপির প্রয়োজনীয়তা দূর হয়। আরও তথ্যের জন্য, Buffer Map Write Extended Usages এবং ইস্যু dawn:386255678 দেখুন।

এখন আপনি নতুন webgpu_upstream_cpp_headers ব্যবহার করে Dawn-এর নিজস্ব সংস্করণের সাথে আবদ্ধ না থেকে যেকোনো webgpu.h ইমপ্লিমেন্টেশনের উপরে webgpu_cpp.h বাইন্ডিং ব্যবহার করতে পারবেন। webgpu-headers ইস্যু #596 দেখুন।

ডন ব্যবহারের জন্য এখন ম্যাকওএস ১৩.০ বা তার পরবর্তী সংস্করণ প্রয়োজন। ডন সিএল ৩৩৪৪০১৫ দেখুন।

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

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

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

ক্রোম ১৫৩-১৫৪

ক্রোম ১৫১-১৫২

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

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

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩