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

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

منتشر شده: ۲۳ آوریل ۲۰۲۵

GPUAdapterInfo ویژگی آداپتور برگشتی است

ویژگی بولی GPUAdapterInfo isFallbackAdapter نشان می‌دهد که آیا یک GPUAdapter محدودیت‌های عملکردی قابل توجهی در ازای سازگاری گسترده‌تر، رفتار قابل پیش‌بینی‌تر یا بهبود حریم خصوصی دارد یا خیر. این افزودن ضروری بود زیرا کتابخانه‌هایی که اشیاء GPUDevice ارائه شده توسط کاربر را می‌پذیرند، نمی‌توانستند از طریق ویژگی adapterInfo در GPUDevice به این اطلاعات دسترسی داشته باشند. به مثال زیر و شماره 403172841 مراجعه کنید.

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

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

از آنجایی که کروم هنوز پشتیبانی از آداپتورهای جایگزین را ارائه نکرده است، isFallbackAdapter در حال حاضر همیشه روی دستگاه‌های کاربران false است. ما در حال بررسی این هستیم که آیا می‌توان ویژگی isFallbackAdapter در GPUAdapter را منسوخ و حذف کرد یا خیر. به intent to ship مراجعه کنید.

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

تیم کروم با اضافه کردن یک نمایش میانی (IR) برای دستگاه‌هایی که از WebGPU با بک‌اند D3D12 پشتیبانی می‌کنند، به بهبود Tint، کامپایلر زبان سایه‌زن WebGPU، ادامه می‌دهد. این IR که بین درخت نحوی انتزاعی (AST) Tint و نویسنده بک‌اند HLSL قرار می‌گیرد، کامپایلر را کارآمدتر و قابل نگهداری‌تر می‌کند و در نهایت به نفع توسعه‌دهندگان و کاربران خواهد بود. آزمایش‌های اولیه نشان می‌دهد که نسخه جدید Tint هنگام ترجمه سایه‌زن‌های WGSL یونیتی به HLSL تا 10 برابر سریع‌تر است.

یک فلوچارت فرآیند تبدیل کد سایه‌زن WGSL به دستورالعمل‌های سطح پایین GPU را نشان می‌دهد.
ایجاد خط لوله رندر در ویندوز.

این بهبودها - که در حال حاضر در اندروید، ChromeOS و macOS قابل دسترسی هستند - به تدریج به دستگاه‌های ویندوزی که از WebGPU با بک‌اند D3D12 پشتیبانی می‌کنند، گسترش می‌یابند. به شماره 42251045 مراجعه کنید.

تصاویر بوم را ذخیره و کپی کنید

کاربران کروم اکنون می‌توانند روی یک بوم WebGPU کلیک راست کرده و به گزینه‌های منوی زمینه مانند «ذخیره تصویر به عنوان…» یا «کپی تصویر» دسترسی پیدا کنند. به شماره ۴۰۹۰۲۴۷۴ مراجعه کنید.

کاربر منوی زمینه "ذخیره تصویر به عنوان ..." را انتخاب کرد.

محدودیت‌های حالت سازگاری را بردارید

ویژگی آزمایشی "core-features-and-limits" در صورت موجود بودن روی GPUDevice، با فعال بودن پرچم chrome://flags/#enable-unsafe-webgpu تمام محدودیت‌های حالت سازگاری (ویژگی‌ها و محدودیت‌ها) را برمی‌دارد. به شماره ۳۹۵۸۵۵۱۷ مراجعه کنید.

درخواست یک GPUAdapter با گزینه featureLevel: "compatibility" به مرورگر اشاره می‌کند که حالت سازگاری آزمایشی WebGPU را انتخاب کند. در صورت موفقیت، آداپتور حاصل "compatibility-defaulting" خواهد بود. در غیر این صورت، "core-defaulting" خواهد بود که مشابه استفاده از گزینه featureLevel: "core" است. علاوه بر این، فراخوانی requestDevice() بدون requiredFeatures و requiredLimits ، یک GPUDevice با قابلیت‌های پیش‌فرض GPUAdapter درخواست می‌کند.

آداپتورهای پیش‌فرض هسته همیشه از ویژگی "core-features-and-limits" پشتیبانی می‌کنند و به طور خودکار در GPUDevices ایجاد شده از آنها فعال می‌شود. برای آداپتورهای پیش‌فرض سازگاری، ویژگی "core-features-and-limits" ممکن است پشتیبانی شود و می‌توان آن را در GPUDevices ایجاد شده از آنها درخواست کرد. هر دو نوع آداپتور ممکن است از ویژگی‌هایی مانند "float32-blendable" نیز پشتیبانی کنند که در هر دو حالت هسته و سازگاری اختیاری است.

مثال زیر برای برنامه‌ای است که به "float32-blendable" نیاز دارد و در صورت وجود، از استفاده از ویژگی‌های اصلی پشتیبانی می‌کند، اما در صورت عدم وجود ویژگی‌های اصلی، فقط از ویژگی‌های سازگاری استفاده می‌کند.

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

ویژگی‌های آزمایشی featureLevel و isCompatibilityMode در GPUAdapter به نفع ویژگی "core-features-and-limits" حذف شده‌اند. به شماره ۳۹۵۸۵۵۱۶ مراجعه کنید.

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

وضعیت فراخوانی enum InstanceDropped به CallbackCancelled تغییر نام داده شده است تا مشخص شود که فراخوانی لغو شده است، اما پردازش پس‌زمینه مرتبط با این رویداد، مانند کامپایل خط لوله، ممکن است هنوز در حال اجرا باشد. نام جدید کاربرد عمومی‌تری دارد، در صورتی که بعداً مکانیسم لغو دیگری اضافه شود. به شماره ۵۲۰ مراجعه کنید.

متغیر شمارشی wgpu::PopErrorScopeStatus::EmptyStack که نشان می‌دهد پشته محدوده خطا قابل حذف نیست، به wgpu::PopErrorScopeStatus::Error تغییر نام داده است (که کاربرد عمومی‌تری نیز دارد). فراخوانی مجدد اکنون شامل یک پیام توضیح خطای مربوطه نیز می‌شود تا به اشکال‌زدایی کمک کند. به شماره ۳۶۹ مراجعه کنید.

این فقط برخی از نکات برجسته کلیدی را پوشش می‌دهد. لیست جامع کامیت‌ها را بررسی کنید.

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

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

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳