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

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

প্রকাশিত: 8 জানুয়ারী, 2025

টেক্সচার ভিউ ব্যবহার

GPU টেক্সচার ভিউ বর্তমানে তাদের সোর্স GPU টেক্সচার থেকে সমস্ত ব্যবহারের পতাকা উত্তরাধিকারসূত্রে পায়। এটি সমস্যাযুক্ত হতে পারে কারণ কিছু ভিউ ফরম্যাট নির্দিষ্ট ব্যবহারের সাথে বেমানান। এই সমস্যাটির সমাধান করার জন্য, ঐচ্ছিক usage সদস্যের সাথে createView() কল করা আপনাকে স্পষ্টভাবে সোর্স টেক্সচারের ব্যবহার ফ্ল্যাগের একটি উপসেট নির্দিষ্ট করতে দেয় যা নির্বাচিত ভিউ ফরম্যাটের সাথে সামঞ্জস্যপূর্ণ।

এই পরিবর্তনটি আগাম যাচাইকরণ এবং ভিউটি কীভাবে ব্যবহার করা হয় তার উপর আরও সূক্ষ্ম নিয়ন্ত্রণের অনুমতি দেয়। এটি অন্যান্য গ্রাফিক্স API-এর সাথেও সারিবদ্ধ করে যেখানে ব্যবহারের ফ্ল্যাগগুলি ভিউ তৈরিতে সাধারণ পরামিতি, অপ্টিমাইজেশানের সুযোগগুলি অফার করে।

নিম্নলিখিত স্নিপেট, ক্রোমেস্ট্যাটাস এন্ট্রি এবং ইস্যু 363903526 দেখুন।

const texture = myDevice.createTexture({
  size: [4, 4],
  format: "rgba8unorm",
  usage:
    GPUTextureUsage.RENDER_ATTACHMENT |
    GPUTextureUsage.TEXTURE_BINDING |
    GPUTextureUsage.STORAGE_BINDING,
  viewFormats: ["rgba8unorm-srgb"],
});

const view = texture.createView({
  format: 'rgba8unorm-srgb',
  usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});

32-বিট ফ্লোট টেক্সচারের মিশ্রণ

32-বিট ফ্লোটিং-পয়েন্ট টেক্সচার HDR রেন্ডারিংয়ের জন্য প্রয়োজনীয় রঙের মানগুলির একটি বিস্তৃত পরিসর সংরক্ষণ করতে এবং কালার ব্যান্ডিং আর্টিফ্যাক্টগুলি প্রতিরোধ করতে। যেমন বৈজ্ঞানিক দৃশ্যায়নে।

নতুন "float32-blendable" GPU বৈশিষ্ট্যটি "r32float" , "rg32float" এবং "rgba32float" বিন্যাস সহ GPU টেক্সচারকে মিশ্রিত করে তোলে৷ একটি রেন্ডার পাইপলাইন তৈরি করা যা যেকোনো float32-ফর্ম্যাট সংযুক্তির সাথে মিশ্রন ব্যবহার করে এই বৈশিষ্ট্যটি সহ একটি GPU ডিভাইসের অনুরোধ করার সময় এখন সম্ভব৷

নিম্নলিখিত স্নিপেট, ক্রোমেস্ট্যাটাস এন্ট্রি এবং ইস্যু 369649348 দেখুন।

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}
// Explicitly request 32-bit float textures blending support.
const device = await adapter.requestDevice({
  requiredFeatures: ["float32-blendable"],
});

// ... Creation of shader modules is omitted for readability.

// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
  vertex: { module: myVertexShaderModule },
  fragment: {
    module: myFragmentShaderModule,
    targets: [
      {
        format: "rgba32float",
        blend: { color: {}, alpha: {} },
      },
    ],
  },
  layout: "auto",
});

// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...

GPUDevice adapterInfo বৈশিষ্ট্য

এটি লাইব্রেরিগুলির জন্য গুরুত্বপূর্ণ যেগুলি প্রকৃত GPU সম্পর্কে তথ্য অ্যাক্সেস করতে ব্যবহারকারী-প্রদত্ত GPUDevice অবজেক্টগুলি গ্রহণ করে, কারণ তাদের GPU আর্কিটেকচারের উপর ভিত্তি করে অপ্টিমাইজ বা কার্যকর করার প্রয়োজন হতে পারে। যদিও GPUAdapter অবজেক্টের মাধ্যমে এই তথ্য অ্যাক্সেস করা সম্ভব, শুধুমাত্র GPUDevice থেকে এটি পাওয়ার কোনো সরাসরি উপায় নেই। এটি অসুবিধাজনক হতে পারে, কারণ এতে ব্যবহারকারীদের GPUDevice পাশাপাশি অতিরিক্ত তথ্য প্রদানের প্রয়োজন হতে পারে।

এই সমস্যা সমাধানের জন্য, GPUAdapterInfo এখন GPUDevice adapterInfo বৈশিষ্ট্যের মাধ্যমে উন্মুক্ত করা হয়েছে। এগুলি বিদ্যমান GPUAdapter info বৈশিষ্ট্যের অনুরূপ।

নিম্নলিখিত স্নিপেট, ক্রোমেস্ট্যাটাস এন্ট্রি এবং ইস্যু 376600838 দেখুন।

function optimizeForGpuDevice(device) {
  if (device.adapterInfo.vendor === "amd") {
    // Use AMD-specific optimizations.
  } else if (device.adapterInfo.architecture.includes("turing")) {
    // Optimize for NVIDIA Turing architecture.
  }
}

অবৈধ বিন্যাসের সাথে ক্যানভাস প্রসঙ্গ কনফিগার করা জাভাস্ক্রিপ্ট ত্রুটি থ্রো

পূর্বে, জিপিইউ ক্যানভাস প্রসঙ্গের configure() পদ্ধতির সাথে একটি অবৈধ টেক্সচার বিন্যাস ব্যবহার করার ফলে একটি GPU বৈধতা ত্রুটি দেখা দেয়। এটি একটি JavaScript TypeError নিক্ষেপ করার জন্য পরিবর্তন করা হয়েছে। এটি এমন পরিস্থিতিতে বাধা দেয় যেখানে GPU ক্যানভাস প্রসঙ্গ ভুলভাবে কনফিগার করা সত্ত্বেও getCurrentTexture() একটি বৈধ GPU টেক্সচার প্রদান করে। আরও তথ্য 372837859 ইস্যুতে পাওয়া যাবে।

টেক্সচারের উপর নমুনা সীমাবদ্ধতা ফিল্টারিং

ফিল্টারিং নমুনা সহ "sint" , "uint" , এবং " depth" বিন্যাস টেক্সচার ব্যবহার করার আগে অনুমতি দেওয়া হয়েছিল। এটি এখন সঠিকভাবে একটি ফিল্টারিং স্যাম্পলারের সাথে একটি "sint" বা "uint" বিন্যাস টেক্সচার ব্যবহার করার অনুমতি দেয় না। মনে রাখবেন যে এটি বর্তমানে একটি সতর্কতা নির্গত করে যদি আপনি একটি ফিল্টারিং স্যাম্পলারের সাথে একটি " depth" টেক্সচার ব্যবহার করেন কারণ এটি ভবিষ্যতে অননুমোদিত হবে। সংখ্যা 376497143 দেখুন।

এই বিধিনিষেধগুলির অর্থ হল একটি নন-ফিল্টারিং স্যাম্পলারের সাথে একটি গভীরতার টেক্সচার ব্যবহার করার জন্য বাইন্ড গ্রুপ লেআউটগুলির ম্যানুয়াল তৈরির প্রয়োজন। কারণ "স্বয়ংক্রিয়" তৈরি করা বাইন্ড গ্রুপ লেআউটগুলি এখনও এই সংমিশ্রণটিকে সমর্থন করে না৷ স্পেক ইস্যু 4952 ভবিষ্যতে এই সীমাবদ্ধতা মোকাবেলার জন্য বিবেচনাধীন একটি প্রস্তাব রয়েছে।

বর্ধিত সাবগ্রুপ পরীক্ষা

সাবগ্রুপ পরীক্ষা , প্রাথমিকভাবে Chrome 131-এ শেষ হতে সেট করা হয়েছে, Chrome 133-এ প্রসারিত করা হয়েছে, 16 এপ্রিল, 2025-এ সমাপ্ত হয়েছে। প্রথম অরিজিন ট্রায়াল কর্মক্ষমতার উপর দৃষ্টি নিবদ্ধ করলেও, এতে গুরুত্বপূর্ণ বহনযোগ্যতা সুরক্ষার অভাব ছিল। এই সুরক্ষাগুলি এখন যোগ করা হবে, সম্ভাব্যভাবে বিদ্যমান কোডে ত্রুটি সৃষ্টি করবে।

বিকাশকারীর অভিজ্ঞতা উন্নত করা

একটি সতর্কতা এখন DevTools-এ দৃশ্যমান হয় যখন Windows-এ requestAdapter() এর সাথে powerPreference বিকল্প ব্যবহার করা হয়। Chrome যখন দুটি ভিন্ন GPU ব্যবহার করতে এবং তাদের মধ্যে ফলাফলগুলিকে সংমিশ্রণ করতে জানে তখন এই সতর্কতাটি সরানো হবে৷ সংখ্যা 369219127 দেখুন।

খুব বড় একটি GPU বাফার তৈরি করার সময় GPU বাফারের আকার এখন ত্রুটি বার্তায় উপস্থিত থাকে। সংখ্যা 374167798 দেখুন।

16-বিট স্বাভাবিক টেক্সচার ফরম্যাটের জন্য পরীক্ষামূলক সমর্থন

16-বিট স্বাক্ষরিত স্বাভাবিকীকৃত এবং স্বাক্ষরবিহীন স্বাভাবিক টেক্সচার ফর্ম্যাটগুলি এখন যথাক্রমে "chromium-experimental-snorm16-texture-formats" এবং "chromium-experimental-unorm16-texture-formats" GPU বৈশিষ্ট্যগুলির পিছনে পরীক্ষামূলকভাবে উপলব্ধ রয়েছে যখন সেগুলি প্রমিতকরণের জন্য আলোচনা করা হচ্ছে .

এই বৈশিষ্ট্যগুলি COPY_SRC , COPY_DST , TEXTURE_BINDING , RENDER_ATTACHMENT ব্যবহার, মাল্টিস্যাম্পলিং এবং সমাধান করার ক্ষমতা সহ 16-বিট স্বাভাবিক টেক্সচার ফর্ম্যাটের জন্য সমর্থন যোগ করে৷ অতিরিক্ত ফর্ম্যাটগুলি হল "r16unorm" , "rg16unorm" , "rgba16unorm" "r16snorm" , "rg16snorm" , এবং "rgba16snorm"

যতক্ষণ না এই পরীক্ষামূলক বৈশিষ্ট্যগুলিকে প্রমিত করা হয়, ততক্ষণ chrome://flags/#enable-unsafe-webgpu "অনিরাপদ ওয়েবজিপিইউ সমর্থন" ফ্ল্যাগটিকে Chrome-এ উপলব্ধ করতে সক্ষম করুন৷

নিম্নলিখিত স্নিপেট এবং ইস্যু 374790898 দেখুন।

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
  throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});

// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
  size: [4, 4],
  format: "rgba16snorm",
  usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});

// Send the appropriate commands to the GPU...

ভোরের আপডেট

wgpu::Adapter এবং wgpu::Device থেকে EnumerateFeatures(FeatureName * features) পদ্ধতিগুলি GetFeatures(SupportedFeatures * features) ব্যবহারের পক্ষে অবমূল্যায়িত হয়েছে। সংখ্যা 368672123 দেখুন।

webgpu.h C API সমস্ত char const * একটি WGPUStringView কাঠামোতে পরিবর্তন করেছে যা একটি ভিউকে UTF-8 এনকোডেড স্ট্রিং-এ সংজ্ঞায়িত করে। এটি একটি দৈর্ঘ্যের সাথে মিলিত স্ট্রিং এর ডেটাতে একটি নির্দেশকের মত কাজ করে। এটি আপনাকে একটি স্ট্রিংয়ের অংশগুলিকে অনুলিপি করার প্রয়োজন ছাড়াই কাজ করতে দেয়। সংখ্যা 42241188 দেখুন।

এটি শুধুমাত্র কিছু মূল হাইলাইট কভার করে। কমিটের সম্পূর্ণ তালিকা দেখুন।

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

ওয়েবজিপিইউ সিরিজে নতুন কী কভার করা হয়েছে তার একটি তালিকা।

ক্রোম 132

ক্রোম 131

ক্রোম 130

ক্রোম 129

ক্রোম 128

ক্রোম 127

ক্রোম 126

ক্রোম 125

ক্রোম 124

ক্রোম 123

ক্রোম 122

ক্রোম 121

ক্রোম 120

ক্রোম 119

ক্রোম 118

ক্রোম 117

ক্রোম 116

ক্রোম 115

ক্রোম 114

ক্রোম 113