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

François Beaufort
François Beaufort

تاریخ انتشار: ۲۵ فوریه ۲۰۲۶

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

اگرچه WebGPU به‌گونه‌ای طراحی شده است که با میاناهای برنامه‌سازی کاربردی گرافیک مدرن مانند Vulkan،‏ Metal، و D3D12 هماهنگ باشد، بسیاری از کاربران سخت‌افزارهای قدیمی‌تری دارند که از این استانداردها پشتیبانی نمی‌کند. برای پر کردن این شکاف و اطمینان از دسترس‌پذیری گسترده، Chrome ویژگی اختیاری جدیدی به نام «حالت سازگاری» معرفی می‌کند.

این حالت به شما امکان می‌دهد WebGPU را در «میاناهای برنامه‌سازی کاربردی» گرافیکی قدیمی‌تر مثل OpenGL ES 3.1 اجرا کنید. با هدف‌یابی زیرمجموعه‌ای از مشخصات WebGPU که کمی محدود شده است، مطمئن می‌شوید که برنامه وب شما برای همه، از جدیدترین تجهیزات بازی گرفته تا رایانه‌های کیفی قدیمی‌تر و دستگاه‌های همراه، دردسترس است. این تیم درحالی‌که کار خود را با Android شروع کرده است، درحال بررسی پشتیبانی از دستگاه‌های دیگر مثل ChromeOS با OpenGL ES 3.1 و Windows با 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 اکنون از حالت سازگاری پشتیبانی می‌کنند. همچنین می‌توانید قصد ارسال را بخوانید.

پیوست‌های موقت

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

با اعلام بافت به‌عنوان گذرا (یا «بدون حافظه»)، GPU می‌داند که فقط به‌طور موقت به محتوای بافت نیاز دارد—به‌طور دقیق، فقط در گذر رندر فعلی. علاوه‌براین، ازآنجایی‌که محتویات بافت پس‌از گذر رندر دور ریخته می‌شود، ممکن است درایور اصلاً نیازی به تخصیص 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',
  });
}

نمونه Hello Triangle MSAA - WebGPU و قصد ارسال را ببینید.

افزونه WGSL texture_and_sampler_let

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

مثال زیر و قصد ارسال را ببینید.

@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);
}

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

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

  • ‫maxStorageBuffersPerShaderStage حداکثر از ۱۶ پشتیبانی می‌کند. مشکل ۳۶۶۱۵۱۳۹۸ را ببینید.

  • ‫maxSampledTexturesPerShaderStage از حداکثر ۴۸ پشتیبانی می‌کند. مشکل ۴۷۵۲۵۵۷۳۷ را ببینید.

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

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

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