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

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

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

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

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

এটি ভিডিও ইফেক্ট পাইপলাইনে শেডার লজিককে সহজ করে তোলে যেখানে GPUExternalTexture (সোর্স ভিডিওর জন্য) এবং GPUTextureView (ইন্টারমিডিয়েট প্রসেসিংয়ের জন্য) উভয়কেই পরিচালনা করতে হয়। এটি টেক্সচার কোথা থেকে এসেছে তার উপর নির্ভর করে শেডারগুলিকে গতিশীলভাবে কম্পাইল করার প্রয়োজনীয়তাও হ্রাস করে। Intent to Ship দেখুন: WebGPU: externalTexture বাইন্ডিংয়ের জন্য 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 ওয়ার্কগ্রুপ ইউনিফর্মলোড পরমাণুর পয়েন্টার ব্যবহার করে

ডেভেলপারদের সুবিধার্থে 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 দেখুন।

ভোরের আপডেট

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

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

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

সম্পূর্ণ নির্দেশিকার জন্য, আপডেট করা " WebGPU দিয়ে একটি অ্যাপ তৈরি করুন" ডকুমেন্টেশনটি দেখুন।

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

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

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

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩