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

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

حد maxTextureArrayLayers را افزایش دهید

حداکثر مقدار مجاز برای عمق یا تعداد لایه یک بافت دو بعدی به طور پیش فرض 256 است. اکنون می توان با استفاده از محدودیت maxTextureArrayLayers در صورت پشتیبانی تا 2048 درخواست کرد. مثال زیر و شماره 42241514 را ببینید.

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 }
});

بهینه سازی بارگذاری بافر برای باطن Vulkan

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

بهینه‌سازی مسیر سریع نیازمند آن است که حافظه بافر میزبان قابل مشاهده و بدون هیچ گونه عملیات GPU معلق روی آن باشد. شماره 42242084 را ببینید.

بهبود زمان کامپایل شیدر

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

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

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

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

هر GPUCommandBuffer ارسال شده به GPUQueue با متد submit() باید منحصر به فرد باشد، در غیر این صورت یک خطای اعتبارسنجی ایجاد می شود. این یک اشکال مشخصات بود. به شماره 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++ wrapper webgpu_cpp.h اکنون فقط هدر است، استفاده از آن را ساده کرده و امکان یکپارچه سازی آسان تر با بسته های C++ جایگزین را فراهم می کند. به شماره 40195122 مراجعه کنید.

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

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

چه چیزی در WebGPU جدید است

فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.

کروم 126

کروم 125

کروم 124

کروم 123

کروم 122

کروم 121

کروم 120

کروم 119

کروم 118

کروم 117

کروم 116

کروم 115

کروم 114

کروم 113