موارد جدید در WebGPU (Chrome 126)

فرانسوا بوفور
François Beaufort

افزایش محدودیت maxTextureArrayLayers

حداکثر مقدار مجاز برای عمق یا تعداد لایه‌های یک بافت دوبعدی به طور پیش‌فرض ۲۵۶ است. اکنون می‌توان با استفاده از محدودیت maxTextureArrayLayers در صورت پشتیبانی، تا ۲۰۴۸ درخواست داد. به مثال زیر و شماره ۴۲۲۴۱۵۱ مراجعه کنید.

const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxTextureArrayLayers < 30) {
  // When the desired limit isn't supported, take action to either fall back to
  // a code path that does not require the higher limit or notify the user that
  // their device does not meet minimum requirements.
}

// Request highest limit of max texture array layers attributes.
const device = await adapter.requestDevice({
  requiredLimits: { maxTextureArrayLayers: 2048 }
});

بهینه‌سازی آپلود بافر برای بک‌اند ولکان

اکنون یک مسیر سریع هنگام فراخوانی متد writeBuffer() از GPUQueue برای بک‌اند Vulkan در دسترس است. اکنون داده‌ها می‌توانند مستقیماً در بافر مقصد نوشته شوند و نیاز به کپی و همگام‌سازی اضافی را از بین ببرند. این بهینه‌سازی، ترافیک حافظه مورد نیاز برای آپلود داده‌ها به GPU را کاهش می‌دهد.

بهینه‌سازی مسیر سریع مستلزم آن است که حافظه بافر از نظر میزبان قابل مشاهده باشد و هیچ عملیات GPU در حال انتظاری روی آن انجام نشود. به شماره ۴۲۲۴۲۰۸۴ مراجعه کنید.

بهبود زمان کامپایل سایه‌زن

تیم کروم در حال افزایش کارایی Tint ، کامپایلر زبان شیدر WebGPU، است. Tint در حال حاضر درخت سینتکس انتزاعی (AST) کد شیدر را چندین بار قبل از تولید کد ماشین تغییر می‌دهد، فرآیندی که در برخی پلتفرم‌ها منابع زیادی مصرف می‌کند. برای بهینه‌سازی این امر، یک نمایش میانی (IR) جدید به همراه بک‌اندهای طراحی مجدد شده که از آن استفاده می‌کنند، معرفی شده است. هدف این تغییر، تسریع کامپایل شیدر است.

ایجاد خط لوله رندر شامل تبدیل WGSL به SPIR-V با کامپایلر Tint و سپس به ISA با کامپایلر Driver است.
ایجاد خط لوله رندر در ChromeOS.

این پیشرفت‌ها که از قبل در اندروید قابل دسترسی بودند، به تدریج به دستگاه‌های ChromeOS که از WebGPU با رابط Vulkan پشتیبانی می‌کنند، گسترش می‌یابند. به شماره 42250751 مراجعه کنید.

بافرهای دستور ارسالی باید منحصر به فرد باشند

هر GPUCommandBuffer که با متد submit() به GPUQueue ارسال می‌شود، باید منحصر به فرد باشد، در غیر این صورت یک خطای اعتبارسنجی ایجاد می‌شود. این یک اشکال در مشخصات بود. به شماره 42241492 مراجعه کنید.

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

const commandEncoder = device.createCommandEncoder();
const commandBuffer = commandEncoder.finish();

device.queue.submit([commandBuffer, commandBuffer]);
// ⚠️ Validation fails because command buffers are not unique.

به‌روزرسانی‌های سپیده‌دم

بسته‌بندی C++ webgpu_cpp.h اکنون فقط سرصفحه است که استفاده از آن را ساده کرده و ادغام آسان‌تر با بسته‌بندی‌های جایگزین C++ را امکان‌پذیر می‌سازد. به شماره ۴۰۱۹۵۱۲۲ مراجعه کنید.

API مربوط به زبان C در webgpu.h دیگر مفهوم اشیاء Swapchain را نشان نمی‌دهد. این تغییر برای هماهنگی نزدیک با API جاوا اسکریپت است. پیکربندی داخلی اکنون از طریق متد Configure() شیء جدید wgpu::Surface انجام می‌شود که در معرض تغییرات آینده است. به مثالی در مستندات « ساخت یک برنامه با WebGPU» مراجعه کنید. به شماره 42241264 مراجعه کنید.

لیست جامع کامیت‌ها را بررسی کنید.

ویژگی‌های جدید WebGPU

فهرستی از تمام مواردی که در مجموعه «ویژگی‌های جدید WebGPU» پوشش داده شده است.

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳