ویژگی‌های جدید WebGPU (Chrome 126)

François Beaufort
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 }
});

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

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

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

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

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

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

این بهبودها که ازقبل در Android دردسترس هستند، به‌تدریج به دستگاه‌های ChromeOS که از WebGPU با زیرینه Vulkan پشتیبانی می‌کنند گسترش می‌یابند. مشکل ۴۲۲۵۰۷۵۱ را ببینید.

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

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

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++ را امکان‌پذیر می‌کند. مشکل ۴۰۱۹۵۱۲۲ را ببینید.

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

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

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

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

‫۱۵۵-۱۵۶ Chrome

‫۱۵۳-۱۵۴ Chrome

Chrome 151-152

‫۱۴۹-۱۵۰ Chrome

‫۱۴۷-۱۴۸ Chrome

‫۱۴۶ Chrome

‫Chrome 145

‫۱۴۴ Chrome

‫۱۴۳ Chrome

‫۱۴۲ Chrome

Chrome 141

‫۱۴۰ Chrome

Chrome 139

‫Chrome 138

Chrome 137

‫Chrome 136

‫۱۳۵ Chrome

‫۱۳۴ Chrome

‫Chrome 133

‫۱۳۲ Chrome

‫۱۳۱ Chrome

‫Chrome 130

‫Chrome 129

‫Chrome 128

‫Chrome 127

‫Chrome 126

‫Chrome 125

‫Chrome 124

‫Chrome 123

‫Chrome 122

Chrome 121

‫Chrome 120

‫Chrome 119

‫Chrome 118

Chrome 117

‫Chrome 116

‫Chrome 115

Chrome 114

‫Chrome 113