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

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

منتشر شده: ۲۵ فوریه ۲۰۲۶

پشتیبانی از حالت سازگاری WebGPU در OpenGL ES 3.1

در حالی که WebGPU برای هماهنگی با APIهای گرافیکی مدرن مانند Vulkan، Metal و D3D12 طراحی شده است، بسیاری از کاربران سخت‌افزار قدیمی‌تری دارند که از این استانداردها پشتیبانی نمی‌کند. برای پر کردن این شکاف و تضمین دسترسی گسترده، کروم یک ویژگی جدید به نام حالت سازگاری (compatibility mode) را معرفی می‌کند.

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

برای بسیاری از برنامه‌های وب، می‌توانید حالت سازگاری را با ارسال featureLevel: "compatibility" هنگام فراخوانی requestAdapter() فعال کنید. اگر دستگاه شما از Core WebGPU پشتیبانی کند، Chrome یک آداپتور با قابلیت Core را برمی‌گرداند، اما برنامه وب شما می‌داند که باید در محدوده سازگاری باقی بماند، مگر اینکه ویژگی "core-features-and-limits" را فعال کند (یا همه ویژگی‌های موجود را فعال کند). برنامه‌های پیچیده‌تر ممکن است برای قرار گرفتن در محدودیت‌های این حالت، به تنظیمات جزئی نیاز داشته باشند.

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

برای اطلاعات دقیق در مورد محدودیت‌های معماری خاص این حالت، به راهنمای اصول WebGPU مراجعه کنید. علاوه بر این، اکنون همه نمونه‌های WebGPU از حالت سازگاری پشتیبانی می‌کنند. همچنین می‌توانید intent to ship را مطالعه کنید.

پیوست‌های گذرا

شما می‌توانید از پرچم جدید TRANSIENT_ATTACHMENT GPUTextureUsage برای ایجاد پیوست‌های با حافظه کارآمد استفاده کنید. این امر باعث می‌شود عملیات رندر در حافظه کاشی باقی بماند، که از ترافیک VRAM جلوگیری می‌کند و می‌تواند از تخصیص VRAM برای بافت‌ها جلوگیری کند.

با اعلام یک بافت به عنوان گذرا (یا "بدون حافظه")، پردازنده گرافیکی می‌داند که فقط به طور موقت به محتوای بافت نیاز دارد - به طور خاص، فقط در مرحله رندر فعلی. علاوه بر این، از آنجا که محتوای بافت پس از مرحله رندر دور ریخته می‌شود، ممکن است درایور اصلاً نیازی به اختصاص VRAM برای آن نداشته باشد.

مثال زیر نحوه ایجاد یک بافت گذرا را نشان می‌دهد.

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

if ('TRANSIENT_ATTACHMENT' in GPUTextureUsage) {

  const transientTexture = device.createTexture({
    size: [42, 42],
    // The TRANSIENT_ATTACHMENT flag indicates the texture content is temporary,
    // potentially keeping it in fast on-chip memory.
    usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TRANSIENT_ATTACHMENT,
    format: 'rgba8unorm',
  });
}

به نمونه‌ی مثلث سلام MSAA - WebGPU و قصد ارسال مراجعه کنید.

افزونه‌ی texture_and_sampler_let مربوط به WGSL

افزونه‌ی زبان WGSL texture_and_sampler_let به شما امکان می‌دهد متغیرهای بافت یا نمونه‌بردار را به یک let درون یک سایه‌زن WGSL اختصاص دهید. این ویژگی در حال حاضر یک مکانیسم نامگذاری جایگزین ارائه می‌دهد و برای پشتیبانی بدون اتصال آماده می‌شود که در آن متدهایی که بافت‌ها یا نمونه‌بردارها را برمی‌گردانند، می‌توانند مستقیماً در متغیرهای محلی ذخیره شوند.

به مثال زیر و قصد ارسال (shipping) توجه کنید.

@group(0) @binding(0) var tex: texture_2d<f32>;
@group(1) @binding(0) var store : texture_storage_2d<r32float, read_write>;

@fragment fn main() {
    let a = tex;
    var res: vec4f = textureLoad(a, vec2i(1i), 0);

    textureStore(store, vec2i(0i), res);
}

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

سطوح محدودیت جدید زیر در دسترس هستند:

اعتبارسنجی SPIR-V به طور پیش‌فرض در اندروید فعال است تا یک لایه امنیتی اضافی ایجاد کند و از بی‌ثباتی درایور در اثر ورودی‌های نادرست جلوگیری کند. به شماره ۴۷۳۵۲۶۱۸۲ مراجعه کنید.

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

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

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

کروم ۱۴۶

کروم ۱۴۵

کروم ۱۴۴

کروم ۱۴۳

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳