WebGPU (Chrome 137) তে নতুন কি, WebGPU তে নতুন কি (Chrome 137)

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

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

এক্সটার্নাল টেক্সচার বাইন্ডিং এর জন্য টেক্সচার ভিউ ব্যবহার করুন

GPUBindGroup তৈরি করার সময়, এখন থেকে GPUExternalTexture বাইন্ডিং-এর পরিবর্তে একটি সামঞ্জস্যপূর্ণ GPUTextureView (2D, একক সাবরিসোর্স) ব্যবহার করা যাবে।

এটি ভিডিও এফেক্টস পাইপলাইনে শেডার লজিককে সরল করে, যেখানে GPUExternalTexture (সোর্স ভিডিওর জন্য) এবং GPUTextureView (মধ্যবর্তী প্রক্রিয়াকরণের জন্য) উভয়কেই পরিচালনা করতে হয়। এটি টেক্সচারের উৎসের উপর নির্ভর করে ডায়নামিকভাবে শেডার কম্পাইল করার প্রয়োজনীয়তাও হ্রাস করে। externalTexture বাইন্ডিং-এর জন্য Intent to Ship: WebGPU: GPUTextureView দেখুন।

const texture = myDevice.createTexture({
  size: [42, 42],
  format: navigator.gpu.getPreferredCanvasFormat(),
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});

const code = `
@group(0) @binding(0) var texture : texture_external;
@group(0) @binding(1) var<storage, read_write> buffer: vec2u;
    
@compute @workgroup_size(1) fn main() {
  buffer = textureDimensions(texture);
}`;

const pipeline = myDevice.createComputePipeline({
  layout: "auto",
  compute: { module: myDevice.createShaderModule({ code }) },
});

const bindGroup = myDevice.createBindGroup({
  layout: pipeline.getBindGroupLayout(0),
  entries: [
    { binding: 0, resource: texture.createView() }, // Use texture view for an externalTexture binding
    { binding: 1, resource: { buffer: myBuffer } },
  ],
});

অফসেট এবং আকার নির্দিষ্ট না করে বাফার কপি করা হয়

একটি নতুন GPUCommandEncoder মেথড ওভারলোড ডেভেলপারদেরকে copyBufferToBuffer() ব্যবহার করার সময় অফসেট এবং সাইজ প্যারামিটার বাদ দেওয়ার সুযোগ দেয়, যা সম্পূর্ণ বাফার কপি করার প্রক্রিয়াকে সহজ করে তোলে। দেখুন Intent to Ship: WebGPU: copyBufferToBuffer overload

const size = 42;
const srcBuffer = myDevice.createBuffer({
  size,
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const dstBuffer = myDevice.createBuffer({
  size,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Copy entire buffer.
myCommandEncoder.copyBufferToBuffer(srcBuffer, dstBuffer);

// This is the same as the following.
// myCommandEncoder.copyBufferToBuffer(srcBuffer, 0, dstBuffer, 0, size);

WGSL workgroupUniformLoad অ্যাটমিকের পয়েন্টার ব্যবহার করে

ডেভেলপারদের সুবিধার জন্য WGSL-এ একটি নতুন workgroupUniformLoad(ptr) ওভারলোড যোগ করা হয়েছে। এটি ptr দ্বারা নির্দেশিত মানটিকে অ্যাটমিকভাবে লোড করে এবং ওয়ার্কগ্রুপের সমস্ত আহ্বানে তা ফেরত দেয়, যেখানে ptr হলো একটি ওয়ার্কগ্রুপ ভেরিয়েবলের ভিতরে থাকা একটি পয়েন্টার-টু-অ্যাটমিক। ইস্যু 408241039 দেখুন।

@group(0) @binding(0) var<storage, read_write> buffer : array<u32, 1>;

var<workgroup> wgvar : atomic<u32>;

@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_index) lid: u32) {
  if (lid == 0) {
    atomicStore(&(wgvar), 42u);
  }
  buffer[lid] = workgroupUniformLoad(&wgvar);
}

GPUAdapterInfo powerPreference অ্যাট্রিবিউট

ব্যবহারকারী যখন chrome://flags/#enable-webgpu-developer-features "WebGPU Developer Features" ফ্ল্যাগটি সক্রিয় করেন, তখন অ-মানক powerPreference GPUAdapterInfo স্ট্রিং অ্যাট্রিবিউটটি এখন উপলব্ধ হয়। সমর্থিত হলে, GPURequestAdapterOptions -এ ব্যবহৃত GPUPowerPreference মানের উপর নির্ভর করে powerPreference মানটি "low-power" বা "high-performance" হতে পারে। CL 6438860 দেখুন।

function checkPowerPreferenceForGpuDevice(device) {
  const powerPreference = device.adapterInfo.powerPreference;
  if (powerPreference === "high-performance") {
    // High-performance GPU detected. Enabling enhanced graphics settings.
  } else if (powerPreference === "low-power") {
    // Low-power GPU detected. Optimizing for battery life.
  }
}

GPURequestAdapterOptions-এর compatibilityMode অ্যাট্রিবিউটটি মুছে ফেলুন

Chrome 133-এ যোগ করা প্রমিত featureLevel অ্যাট্রিবিউটের পক্ষে পরীক্ষামূলক GPURequestAdapterOptions compatibilityMode অ্যাট্রিবিউটটি সরিয়ে দেওয়া হয়েছে। ইস্যু 366151404 দেখুন।

ভোরের আপডেট

ডেভেলপাররা C++ এর মতো ভাষায় webgpu.h ব্যবহার করে WebGPU প্রোজেক্ট তৈরি করতে পারেন, যা WebAssembly এবং নির্দিষ্ট প্ল্যাটফর্ম উভয়কেই টার্গেট করে। Dawn-এর সদ্য-প্রকাশিত "emdawnwebgpu" ("Emscripten Dawn WebGPU") ব্রাউজার API-এর মাধ্যমে সর্বশেষ মানসম্মত webgpu.h প্রয়োগ করে।

Emdawnwebgpu হলো Emscripten-এর (বর্তমানে রক্ষণাবেক্ষণহীন) বিল্ট-ইন বাইন্ডিং ( USE_WEBGPU )-এর একটি (রক্ষণাবেক্ষণকৃত) ফর্ক। সমস্ত নতুন ডেভেলপমেন্টের কাজ emdawnwebgpu-তেই করা হচ্ছে, এবং ডেভেলপাররা emdawnwebgpu-তে স্থানান্তরিত হওয়ার সাথে সাথে Emscripten-এর বিল্ট-ইন বাইন্ডিংগুলো সরিয়ে ফেলা হবে। Emdawnwebgpu-এর C হেডারটি Dawn-এর হেডারের খুব কাছাকাছি, অপরদিকে এর বিল্ট-ইন বাইন্ডিংগুলো উল্লেখযোগ্যভাবে পুরোনো।

Dawn-এর GitHub রিলিজ পেজ থেকে emdawnwebgpu ডাউনলোড করুন এবং এটি কীভাবে ব্যবহার করবেন সে সম্পর্কে তথ্যের জন্য প্যাকেজটির README.md পড়ুন। সোর্স ফাইলগুলো Dawn রিপোজিটরিতে পাওয়া যাবে।

সম্পূর্ণ নির্দেশিকার জন্য, “Build an app with WebGPU” এর হালনাগাদকৃত ডকুমেন্টেশনটি দেখুন।

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

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

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

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

ক্রোম ১৪৬

ক্রোম ১৪৫

ক্রোম ১৪৪

ক্রোম ১৪৩

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩