WebGPU (Chrome 133) এ নতুন কি আছে

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

প্রকাশিত: ২৯ জানুয়ারী, ২০২৫

অতিরিক্ত unorm8x4-bgra এবং 1-কম্পোনেন্ট ভার্টেক্স ফর্ম্যাট

"unorm8x4-bgra" ভার্টেক্স ফর্ম্যাট এবং নিম্নলিখিত 1-কম্পোনেন্ট ভার্টেক্স ফর্ম্যাটগুলি যোগ করা হয়েছে: "uint8" , "sint8" , "unorm8" , "snorm8" , "uint16" , "sint16" , "unorm16" , "snorm16" , এবং "float16""unorm8x4-bgra" ভার্টেক্স ফর্ম্যাটটি একই শেডার রেখে BGRA-এনকোডেড ভার্টেক্স রঙ লোড করা কিছুটা সুবিধাজনক করে তোলে। অতিরিক্তভাবে, 1-কম্পোনেন্ট ভার্টেক্স ফর্ম্যাট আপনাকে কেবল সেই ডেটা অনুরোধ করতে দেয় যা আগে 8 এবং 16-বিট ডেটা টাইপের জন্য কমপক্ষে দ্বিগুণ প্রয়োজন ছিল। chromestatus এন্ট্রি দেখুন এবং 376924407 ইস্যু করুন

অনির্ধারিত মান সহ অজানা সীমা অনুরোধ করার অনুমতি দিন

WebGPU API কে বিকশিত হওয়ার সাথে সাথে কম ভঙ্গুর করার জন্য, আপনি এখন GPU ডিভাইসের অনুরোধ করার সময় undefined মান সহ অজানা সীমা অনুরোধ করতে পারেন। এটি নিম্নলিখিত অ্যাপ্লিকেশন কোডে কার্যকর, উদাহরণস্বরূপ যেখানে someLimit আর বিদ্যমান না থাকলে adapter.limits.someLimit undefined হতে পারে। spec PR 4781 দেখুন।

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

const device = await adapter.requestDevice({
  requiredLimits: { someLimit: adapter.limits.someLimit }, // someLimit can be undefined
});

WGSL সারিবদ্ধকরণের নিয়ম পরিবর্তন

এখন আর কোনও স্ট্রাক্ট সদস্যের জন্য খুব ছোট অ্যালাইনমেন্ট মান প্রদান করা সম্ভব নয় কারণ এখন @align(n) সকল স্ট্রাক্টের জন্য RequiredAlignOf ভাগ করে। এই ব্রেকিং পরিবর্তনটি WGSL ভাষার ব্যবহারকে সহজ করে তোলে এবং এটিকে Firefox এবং Safari এর সাথে আরও সামঞ্জস্যপূর্ণ করে তোলে। আপনি Tint, Naga এবং WebKit কম্পাইলারের মধ্যে পার্থক্য দেখানোর নমুনা কোডটি spec PR- এ খুঁজে পেতে পারেন।

বাতিলের সাথে WGSL কর্মক্ষমতা বৃদ্ধি পায়

একটি জটিল স্ক্রিন-স্পেস রিফ্লেকশন (SSR) ইফেক্ট রেন্ডার করার সময় উল্লেখযোগ্য কর্মক্ষমতা হ্রাসের কারণে, discard স্টেটমেন্টের বাস্তবায়নে প্ল্যাটফর্ম-প্রদত্ত শব্দার্থবিদ্যা ব্যবহার করা হয় যাতে যখন এটি উপলব্ধ থাকে তখন একটি সহায়ক আমন্ত্রণে অবনতি ঘটে। এটি discard ব্যবহারকারী শেডারগুলির কর্মক্ষমতা উন্নত করে। সংখ্যা 372714384 দেখুন।

বাহ্যিক টেক্সচারের জন্য ভিডিওফ্রেম ডিসপ্লে সাইজ ব্যবহার করুন

WebGPU স্পেসিফিকেশন অনুসারে ভিডিওফ্রেম আমদানি করার সময় GPUExternalTexture এর আপাত আকার হিসেবে displayWidth এবং displayHeight মাত্রা ব্যবহার করা উচিত। তবে দৃশ্যমান আকারটি ভুলভাবে ব্যবহার করা হয়েছিল যার ফলে GPUExternalTexture এ textureLoad() ব্যবহার করার সময় সমস্যা তৈরি হয়েছিল। এটি এখন ঠিক করা হয়েছে। সমস্যা 377574981 দেখুন।

copyExternalImageToTexture ব্যবহার করে অ-ডিফল্ট ওরিয়েন্টেশন সহ ছবিগুলি পরিচালনা করুন

copyExternalImageToTexture() GPUQueue পদ্ধতিটি একটি ছবি বা ক্যানভাসের বিষয়বস্তু একটি টেক্সচারে কপি করার জন্য ব্যবহৃত হয়। এটি এখন নন-ডিফল্ট ওরিয়েন্টেশন সহ ছবিগুলিকে সঠিকভাবে পরিচালনা করে। আগে যখন উৎসটি "from-image" imageOrientation সহ একটি ImageBitmap বা নন-ডিফল্ট ওরিয়েন্টেশন সহ একটি ছবি ছিল তখন এটি ছিল না। সংখ্যা 384858956 দেখুন।

ডেভেলপারের অভিজ্ঞতা উন্নত করা হচ্ছে

adapter.limits যখন উচ্চ মান দেখায় তখন অবাক হওয়ার কিছু থাকে, কিন্তু আপনি বুঝতে পারেন না যে GPU ডিভাইসের অনুরোধ করার সময় আপনাকে স্পষ্টভাবে উচ্চতর সীমার অনুরোধ করতে হবে। এটি করতে ব্যর্থ হলে পরবর্তীতে অপ্রত্যাশিতভাবে সীমা অতিক্রম করতে পারে।

আপনাকে সাহায্য করার জন্য, ত্রুটি বার্তাগুলিকে ইঙ্গিত দিয়ে প্রসারিত করা হয়েছে যা আপনাকে requestDevice() কল করার সময় requiredLimits এ কোনও সীমা নির্দিষ্ট না থাকলে স্পষ্টভাবে একটি উচ্চ সীমা অনুরোধ করতে বলে। সমস্যা 42240683 দেখুন।

নিচের উদাহরণটি আপনাকে DevTools কনসোলে লগ করা একটি উন্নত ত্রুটি বার্তা দেখায় যখন একটি GPU বাফার তৈরি করা হয় যার আকার ডিফল্ট সর্বোচ্চ বাফার আকার ডিভাইস সীমা অতিক্রম করে।

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

// Create a GPU buffer with a size exceeding the default max buffer size device limit.
const size = device.limits.maxBufferSize + 1;
const buffer = device.createBuffer({ size, usage: GPUBufferUsage.MAP_READ });

device.queue.submit([]);
⚠️ Buffer size (268435457) exceeds the max buffer size limit (268435456). This adapter supports a higher maxBufferSize of 4294967296, which can be specified in requiredLimits when calling requestDevice(). Limits differ by hardware, so always check the adapter limits prior to requesting a higher limit.
- While calling [Device].CreateBuffer([BufferDescriptor]).

featureLevel এর সাথে সামঞ্জস্যতা মোড সক্ষম করুন

পরীক্ষামূলক সামঞ্জস্য মোডে একটি GPU অ্যাডাপ্টারের অনুরোধ করা এখন স্ট্যান্ডার্ডাইজড featureLevel বিকল্পটি "compatibility" তে সেট করে সম্ভব। "core" (ডিফল্ট) এবং "compatibility" স্ট্রিংগুলিই একমাত্র অনুমোদিত মান। নিম্নলিখিত উদাহরণ এবং spec PR 4897 দেখুন।

// Request a GPU adapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (adapter?.featureLevel === "compatibility") {
  // Any devices created from this adapter will support only compatibility mode.
}

featureLevel বিকল্পটি নন-স্ট্যান্ডার্ডাইজড compatibilityMode বিকল্পটি প্রতিস্থাপন করে এবং নন-স্ট্যান্ডার্ডাইজড featureLevel অ্যাট্রিবিউটটি isCompatibilityMode অ্যাট্রিবিউটটি প্রতিস্থাপন করে।

যেহেতু এটি এখনও পরীক্ষামূলক, তাই আপাতত আপনাকে chrome://flags/#enable-unsafe-webgpu ওয়েবসাইটে "Unsafe WebGPU Support" ফ্ল্যাগটি ব্যবহার করে Chrome চালাতে হবে। এটি ব্যবহার করতে webgpureport.org দেখুন।

পরীক্ষামূলক উপগোষ্ঠীর বৈশিষ্ট্য পরিষ্কারকরণ

অবচিত "chromium-experimental-subgroups" এবং "chromium-experimental-subgroup-uniform-control-flow" পরীক্ষামূলক উপগোষ্ঠী বৈশিষ্ট্যগুলি সরানো হয়েছে। সংখ্যা 377868468 দেখুন।

সাবগ্রুপ নিয়ে পরীক্ষা-নিরীক্ষা করার সময় এখন আপনার যা প্রয়োজন তা হলো "subgroups" পরীক্ষামূলক বৈশিষ্ট্য। "subgroups-f16" পরীক্ষামূলক বৈশিষ্ট্যটি বন্ধ করে দেওয়া হয়েছে এবং শীঘ্রই এটি সরানো হবে। আপনার অ্যাপ্লিকেশন যখন "shader-f16" এবং "subgroups" উভয় বৈশিষ্ট্যের জন্য অনুরোধ করে তখন আপনি সাবগ্রুপের সাথে f16 মান ব্যবহার করতে পারেন। সংখ্যা 380244620 দেখুন।

maxInterStageShaderComponents সীমা অবমূল্যায়ন করুন

maxInterStageShaderComponents সীমাটি বিভিন্ন কারণের কারণে অবচিত হয়েছে:

  • maxInterStageShaderVariables এর সাথে রিডানডেন্সি: এই সীমাটি ইতিমধ্যেই একই উদ্দেশ্যে কাজ করে, শেডার পর্যায়ের মধ্যে পাস করা ডেটার পরিমাণ নিয়ন্ত্রণ করে।
  • ছোটখাটো অসঙ্গতি: যদিও দুটি সীমা গণনা করার পদ্ধতিতে সামান্য পার্থক্য রয়েছে, এই পার্থক্যগুলি সামান্য এবং maxInterStageShaderVariables সীমার মধ্যে কার্যকরভাবে পরিচালনা করা যেতে পারে।
  • সরলীকরণ: maxInterStageShaderComponents অপসারণ করলে শেডার ইন্টারফেস সহজতর হয় এবং ডেভেলপারদের জন্য জটিলতা হ্রাস পায়। সূক্ষ্ম পার্থক্য সহ দুটি পৃথক সীমা পরিচালনা করার পরিবর্তে, তারা আরও উপযুক্তভাবে নামকরণ করা এবং ব্যাপক maxInterStageShaderVariables উপর ফোকাস করতে পারে।

লক্ষ্য হল Chrome 135 থেকে এটি সম্পূর্ণরূপে অপসারণ করা। intent to deprecate and issue 364338810 দেখুন।

ভোরের আপডেট

wgpu::Device::GetAdapterInfo(adapterInfo) আপনাকে সরাসরি wgpu::Device থেকে অ্যাডাপ্টারের তথ্য পেতে দেয়। 376600838 সংখ্যাটি দেখুন।

কম্পিউট স্টেটকে ভার্টেক্স এবং ফ্র্যাগমেন্ট স্টেটের সাথে সামঞ্জস্যপূর্ণ করার জন্য WGPUProgrammableStageDescriptor struct এর নাম পরিবর্তন করে WGPUComputeState করা হয়েছে। সংখ্যা 379059434 দেখুন।

wgpu::VertexStepMode::VertexBufferNotUsed enum মানটি সরানো হয়েছে। একটি ভার্টেক্স বাফার লেআউট যা ব্যবহার করা হয় না তা এখন {.stepMode=wgpu::VertexStepMode::Undefined, .attributeCount=0} দিয়ে প্রকাশ করা যেতে পারে। সংখ্যা 383147017 দেখুন।

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

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

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

ক্রোম ১৪২

ক্রোম ১৪১

ক্রোম ১৪০

ক্রোম ১৩৯

ক্রোম ১৩৮

ক্রোম ১৩৭

ক্রোম ১৩৬

ক্রোম ১৩৫

ক্রোম ১৩৪

ক্রোম ১৩৩

ক্রোম ১৩২

ক্রোম ১৩১

ক্রোম ১৩০

ক্রোম ১২৯

ক্রোম ১২৮

ক্রোম ১২৭

ক্রোম ১২৬

ক্রোম ১২৫

ক্রোম ১২৪

ক্রোম ১২৩

ক্রোম ১২২

ক্রোম ১২১

ক্রোম ১২০

ক্রোম ১১৯

ক্রোম ১১৮

ক্রোম ১১৭

ক্রোম ১১৬

ক্রোম ১১৫

ক্রোম ১১৪

ক্রোম ১১৩