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

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

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

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

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

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

WebGPU API এর বিকাশের সাথে সাথে এটিকে কম ভঙ্গুর করতে, আপনি এখন GPU ডিভাইসের অনুরোধ করার সময় undefined মান সহ অজানা সীমার অনুরোধ করতে পারেন। এটি নিম্নলিখিত অ্যাপ্লিকেশন কোডে দরকারী উদাহরণস্বরূপ যেখানে adapter.limits.someLimit undefined হতে পারে যদি someLimit আর বিদ্যমান না থাকে। বিশেষ পিআর 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 ভাগ করে। এই ব্রেকিং পরিবর্তন ডাব্লুজিএসএল ভাষার ব্যবহারকে সহজ করে এবং এটিকে ফায়ারফক্স এবং সাফারির সাথে আরও সামঞ্জস্যপূর্ণ করে তোলে। আপনি স্পেক PR- এ Tint, Naga এবং WebKit কম্পাইলারের মধ্যে পার্থক্য দেখানো নমুনা কোড খুঁজে পেতে পারেন।

বাতিলের সাথে WGSL কার্যক্ষমতা লাভ করে

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

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

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

CopyExternalImageToTexture ব্যবহার করে অ-ডিফল্ট অভিযোজন সহ চিত্রগুলি পরিচালনা করুন

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

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

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

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

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

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]).

ফিচার লেভেলের সাথে সামঞ্জস্যপূর্ণ মোড সক্ষম করুন

পরীক্ষামূলক সামঞ্জস্যতা মোডে একটি GPU অ্যাডাপ্টারের অনুরোধ করা এখন মানসম্মত featureLevel বিকল্পটিকে "compatibility" তে সেট করে সম্ভব৷ "core" (ডিফল্ট) এবং "compatibility" স্ট্রিং শুধুমাত্র অনুমোদিত মান। নিম্নলিখিত উদাহরণ এবং স্পেক 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 "অনিরাপদ ওয়েবজিপিইউ সমর্থন" পতাকা সহ 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 অপসারণ shader ইন্টারফেসকে স্ট্রীমলাইন করে এবং বিকাশকারীদের জন্য জটিলতা কমায়। সূক্ষ্ম পার্থক্য সহ দুটি পৃথক সীমা পরিচালনা করার পরিবর্তে, তারা আরও উপযুক্তভাবে নামযুক্ত এবং ব্যাপক maxInterStageShaderVariables উপর ফোকাস করতে পারে।

লক্ষ্য হল Chrome 135-এ এটিকে সম্পূর্ণরূপে মুছে ফেলা। 364338810 অবমূল্যায়ন এবং ইস্যু করার উদ্দেশ্য দেখুন।

ভোরের আপডেট

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

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

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

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

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

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

ক্রোম 133

ক্রোম 132

ক্রোম 131

ক্রোম 130

ক্রোম 129

ক্রোম 128

ক্রোম 127

ক্রোম 126

ক্রোম 125

ক্রোম 124

ক্রোম 123

ক্রোম 122

ক্রোম 121

ক্রোম 120

ক্রোম 119

ক্রোম 118

ক্রোম 117

ক্রোম 116

ক্রোম 115

ক্রোম 114

ক্রোম 113