ویژگی‌های جدید WebGPU (کروم ۱۴۲)

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

منتشر شده: ۲۲ اکتبر ۲۰۲۵

قابلیت‌های پشتیبانی از فرمت بافت گسترش یافته است

ویژگی جدید GPU با نام "texture-formats-tier1" به توسعه‌دهندگان اجازه می‌دهد محتوای موجود را بدون نیاز به بازنویسی آن برای قابلیت‌های پایین‌تر WebGPU به وب منتقل کنند. این ویژگی از فرمت‌های بافت جدید "r16unorm" ، "r16snorm" "rg16unorm" "rg16unorm"، "rg16snorm" ، "rgba16unorm" و "rgba16snorm" با قابلیت‌های ضمیمه رندر، قابل ترکیب، نمونه‌برداری چندگانه و دسترسی به بافت ذخیره‌سازی "read-only" یا "write-only" پشتیبانی می‌کند. همچنین فرمت‌های بافت موجود "r8snorm" ، "rg8snorm" ، "rgba8snorm" با قابلیت‌های ضمیمه رندر، قابل ترکیب، نمونه‌برداری چندگانه و حل مسئله امکان‌پذیر می‌سازد. فرمت‌های بافت بیشتری نیز می‌توانند با دسترسی به بافت ذخیره‌سازی "read-only" یا "write-only" استفاده شوند.

ویژگی جدید "texture-formats-tier2" در پردازنده گرافیکی، امکان دسترسی "read-write" به بافت ذخیره‌سازی را برای فرمت‌های خاص فراهم می‌کند که برای پروژه‌هایی مانند پورت کردن Unreal Engine به وب بسیار مهم است. توجه داشته باشید که فعال کردن "texture-formats-tier2" در هنگام ایجاد دستگاه، به طور خودکار "texture-formats-tier1" نیز فعال می‌کند.

قطعه کد زیر و ورودی chromestatus را ببینید.

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

const requiredFeatures = [];
if (adapter.features.has("texture-format-tier1")) {
  requiredFeatures.push("texture-format-tier1");
}
if (adapter.features.has("texture-format-tier2")) {
  requiredFeatures.push("texture-format-tier2");
}
const device = await adapter.requestDevice({ requiredFeatures });

// Later on, when dealing with "r8unorm" texture formats for example...
if (device.features.has("texture-format-tier2")) {
  // Use "read-write" storage texture access...
} else if (device.features.has("texture-format-tier1")) {
  // Use "read-only" or "write-only" storage texture access...
} else {
  // Fallback: Use another texture format...
}

با تشکر فراوان از تیم اینتل به خاطر زحماتشان!

شاخص اولیه در WGSL

primitive_index یک مقدار WGSL داخلی است که به طور منحصر به فرد، primitive فعلی (به عنوان مثال، یک نقطه، خط یا مثلث) را که توسط یک fragment shader پردازش می‌شود، شناسایی می‌کند. این مقدار از ۰ شروع می‌شود، پس از پردازش هر primitive، ۱ واحد افزایش می‌یابد و بین هر نمونه ترسیم شده، به ۰ بازنشانی می‌شود.

وقتی ویژگی "primitive-index" در یک GPUAdapter موجود است، از یک GPUDevice با این ویژگی درخواست کنید تا پشتیبانی از شاخص اولیه را در WGSL دریافت کند، و این افزونه را به طور صریح در کد WGSL خود با enable primitive_index; فعال کنید. پس از فعال شدن، از مقدار عدد صحیح داخلی primitive_index در سایه‌زن قطعه خود برای دسترسی به داده‌های اولیه یا انجام منطقی که برای هر شکل هندسی متمایز در حال رندر متفاوت است، استفاده کنید، به عنوان مثال.

قطعه کد زیر یک سایه‌زن قطعه‌ای را نشان می‌دهد که دومین عنصر اولیه را به رنگ قرمز و سایر عناصر اولیه را به رنگ آبی رندر می‌کند.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("primitive-index")) {
  throw new Error("Primitive index support is not available");
}
// Explicitly request primitive index support.
const device = await adapter.requestDevice({
  requiredFeatures: ["primitive-index"],
});

const fragmentShaderModule = device.createShaderModule({ code: `
  enable primitive_index;

  @fragment
  fn main(@builtin(primitive_index) i : u32) -> @location(0) vec4f {
    if (i == 1) {
      return vec4f(1, 0, 0, 1);
    }
    return vec4f(0, 1, 0, 1);
  }`,
});
// Send the appropriate commands to the GPU...

با بررسی نمونه Primitive Picking و مشاهده ورودی chromestatus ، اطلاعات بیشتری کسب کنید.

مثلث‌های مدل قوری سه‌بعدی بر اساس مقادیر اولیه شاخص خود رنگ‌آمیزی شده‌اند.
نمونه‌ی انتخاب اولیه در حالت «شاخص‌های اولیه».

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

متغیر DAWN_BUILD_MONOLITHIC_LIBRARY CMake که برای مدیریت نوع کتابخانه یکپارچه مورد نیاز برای ساخت استفاده می‌شود، مقدار پیش‌فرض خود را از OFF به STATIC تغییر داده است، به طوری که به طور پیش‌فرض فایل‌های libwebgpu* تولید می‌شوند.

داون اکنون هنگام پیکربندی یک wgpu::Surface ، wgpu::PresentMode::Undefined به درستی مدیریت می‌کند. به شماره ۴۴۱۴۱۰۶۶۸ مراجعه کنید.

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

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

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

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳