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

François Beaufort
François Beaufort

منتشرشده: ۳۰ ژوئیه ۲۰۲۵

پشتیبانی از بافت سه‌بعدی برای قالب‌های فشرده BC و ASTC

ویژگی‌های "texture-compression-bc-sliced-3d" و "texture-compression-astc-sliced-3d" WebGPU از بافت‌های سه‌بعدی بااستفاده از قالب‌های «فشرده‌سازی بلوکی» (BC) و «فشرده‌سازی بافت مقیاس‌پذیر تطبیقی» (ASTC) پشتیبانی می‌کنند. این کار به شما امکان می‌دهد از قابلیت‌های فشرده‌سازی کارآمد قالب‌های BC و ASTC برای داده‌های بافت حجمی استفاده کنید و بدون ازدست دادن قابل‌توجه کیفیت دیداری، به‌طور چشمگیری ردپای حافظه و الزامات پهنای باند را کاهش دهید. این ویژگی به‌ویژه در زمینه‌هایی مانند تجسم علمی، تصویربرداری پزشکی، و تکنیک‌های رندرینگ پیشرفته ارزشمند است.

تکه کد زیر بررسی می‌کند که آیا آداپتور از بافت‌های سه‌بعدی با قالب‌های فشرده BC و ASTC پشتیبانی می‌کند یا نه و درصورت دردسترس بودن، دستگاهی با این ویژگی‌ها درخواست می‌کند.

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

const requiredFeatures = [];
if (adapter?.features.has("texture-compression-bc-sliced-3d")) {
  requiredFeatures.push(
    "texture-compression-bc",
    "texture-compression-bc-sliced-3d",
  );
}
if (adapter?.features.has("texture-compression-astc-sliced-3d")) {
  requiredFeatures.push(
    "texture-compression-astc",
    "texture-compression-astc-sliced-3d",
  );
}
const device = await adapter?.requestDevice({ requiredFeatures });

// Later on...
if (device.features.has("texture-compression-astc-sliced-3d")) {
  // Create a 3D texture using ASTC compression
} else if (device.features.has("texture-compression-bc-sliced-3d")) {
  // Create a 3D texture using BC compression
} else {
  // Fallback: Create an uncompressed 3D texture
}

با بررسی نمونه «حجم‌پردازی - بافت سه‌بعدی WebGPU» و دیدن ورودی chromestatus، اسکن‌های سه‌بعدی مغز را کاوش کنید.

اسکن‌های سه‌بعدی مغز بااستفاده از WebGPU پردازش شده است.
تصویر اسکن مغز از بافت سه‌بعدی با قالب فشرده ASTC.

ویژگی جدید «ویژگی‌ها و محدودیت‌های اصلی»

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

در آینده، وقتی حالت سازگاری WebGPU عرضه شود، ممکن است آداپتور یا دستگاهی این ویژگی را نداشته باشد تا نشان دهد که آداپتور یا دستگاه حالت سازگاری است و نه اصلی. وقتی این تنظیم در دستگاهی فعال شود، همه محدودیت‌های حالت سازگاری (ویژگی‌ها و محدودیت‌ها) برداشته می‌شود.

برای توضیح دقیق و استفاده در حالت سازگاری WebGPU، به توضیح‌دهنده و بخش زیر مراجعه کنید. مسئله ۴۱۸۰۲۵۷۲۱ را ببینید.

آزمایش معرفی ویژگی جدید برای حالت سازگاری WebGPU

‫WebGPU یک میانای برنامه‌سازی کاربردی قدرتمند است که برای گرافیک مدرن طراحی شده است و با فناوری‌هایی مثل Vulkan،‏ Metal، و Direct3D 12 هم‌راستا است. بااین‌حال، تعداد قابل‌توجهی از دستگاه‌ها هنوز از این APIهای جدیدتر پشتیبانی نمی‌کنند. برای مثال، در Windows،‏ ۳۱٪ از کاربران Chrome‏ Direct3D 11.1 یا بالاتر ندارند. در Android، ‏۱۵٪ از کاربران Android نسخه ۱.۱ Vulkan را ندارند، ازجمله ۱۰٪ که اصلاً Vulkan ندارند.

این امر برای توسعه‌دهندگانی که می‌خواهند دسترسی برنامه خود را به حداکثر برسانند، چالش ایجاد می‌کند. آن‌ها اغلب مجبور می‌شوند چندین پیاده‌سازی (برای مثال، WebGPU و WebGL) توسعه دهند، با WebGPU اصلی مخاطبان محدودتری را بپذیرند، یا به WebGL پایبند بمانند و از ویژگی‌های پیشرفته WebGPU مانند محاسبات GPU محروم شوند.

نمایش تصویری حالت سازگاری WebGPU.
حالت سازگاری WebGPU دسترسی را گسترش می‌دهد.

حالت سازگاری WebGPU با ارائه نسخه انتخابی و کمی محدودشده از WebGPU API، راه‌حلی ارائه می‌دهد. این حالت برای اجرای میاناهای برنامه‌سازی کاربردی گرافیکی قدیمی‌تر مثل OpenGL ES 3.1 و Direct3D11 طراحی شده است و دسترسی برنامه شما را به دستگاه‌هایی که از میاناهای برنامه‌سازی کاربردی گرافیکی مدرن و صریح موردنیاز WebGPU اصلی پشتیبانی نمی‌کنند به‌طور قابل‌توجهی گسترش می‌دهد.

ازآنجایی‌که حالت سازگاری زیرمجموعه‌ای از WebGPU است، برنامه‌هایی که با آن ساخته می‌شوند برنامه‌های «اصلی» WebGPU معتبر نیز هستند. این یعنی حتی در مرورگرهایی که به‌طور خاص از حالت سازگاری پشتیبانی نمی‌کنند، بدون مشکل اجرا خواهند شد.

برای بسیاری از برنامه‌های پایه، فعال کردن حالت سازگاری به سادگی ارسال featureLevel: "compatibility" هنگام فراخوانی requestAdapter() است. برنامه‌های پیچیده‌تر ممکن است برای قرار گرفتن در محدودیت‌های حالت، نیاز به اصلاحات جزئی داشته باشند. نمونه WebGPU تولید Mipmap نمونه خوبی است.

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({
  featureLevel: "compatibility",
});

const hasCore = adapter?.features.has("core-features-and-limits");
const device = await adapter?.requestDevice({
  requiredFeatures: (hasCore ? ["core-features-and-limits"] : []),
});

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

فعال کردن ویژگی

به‌طور پیش‌فرض، حالت سازگاری WebGPU در Chrome فعال نیست، اما می‌توان با فعال کردن صریح این قابلیت، آن را در Chrome 139 آزمایش کرد. با فعال کردن پرچم «ویژگی‌های آزمایشی پلاتفرم وب» در chrome://flags/#enable-experimental-web-platform-features می‌توانید آن را به‌صورت محلی فعال کنید.

برای فعال کردن آن برای همه بازدیدکنندگان برنامه، آزمایش ویژگی‌های جدید درحال انجام است و قرار است در Chrome 145 (۲۱ آوریل ۲۰۲۶) پایان یابد. برای شرکت در دوره آزمایشی، به پست شروع به کار با دوره‌های آزمایشی مبدأ مراجعه کنید.

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

یک متغیر مستقل message به تابع WGPUQueueWorkDoneCallback اضافه شده است تا با دیگر توابع برگشتی که وضعیت را نیز می‌گیرند سازگارتر باشد. webgpu-headers PR را ببینید.

وقتی emdawnwebgpu با -sSHARED_MEMORY پیوند داده می‌شود، فایل webgpu.cpp آن نیز با این پرچم کامپایل می‌شود. به Dawn CL 244075 مراجعه کنید.

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

ویژگی‌های جدید 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