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

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

ترکیب دو منبعی

ترکیب دو خروجی سایه‌زن قطعه‌ای در یک فریم‌بافر واحد، ترکیب دو منبعی نامیده می‌شود. این تکنیک به ویژه برای برنامه‌هایی که نیاز به عملیات ترکیب پیچیده دارند، مانند برنامه‌هایی که مبتنی بر حالت‌های ترکیب Porter-Duff هستند، مفید است. با جایگزینی مراحل رندر بعدی با یک مرحله رندر واحد، ترکیب دو منبعی می‌تواند عملکرد و انعطاف‌پذیری را افزایش دهد.

ویژگی جدید "dual-source-blending" در WebGPU به شما امکان می‌دهد از ویژگی @blend_src در WGSL در @location(0) برای مشخص کردن شاخص منبع ترکیب و فاکتورهای ترکیب زیر استفاده کنید: "src1" ، "one-minus-src1" ، "src1-alpha" و "one-minus-src1-alpha" . به قطعه کد زیر، ورودی chromestatus و شماره 341973423 مراجعه کنید.

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

const code = `
  enable dual_source_blending;

  struct FragOut {
    @location(0) @blend_src(0) color : vec4f,
    @location(0) @blend_src(1) blend : vec4f,
  }

  @fragment fn main() -> FragOut {
    var output : FragOut;
    output.color = vec4f(1.0, 1.0, 1.0, 1.0);
    output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
    return output;
  }
`;

const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...

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

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

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

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

منسوخ شدن تابع GPUAdapter requestAdapterInfo()

متد ناهمزمان (asynchronous requestAdapterInfo() در GPUAdapter زائد است، زیرا توسعه‌دهندگان می‌توانند از قبل GPUAdapterInfo را به صورت همزمان با استفاده از ویژگی info GPUAdapter دریافت کنند. از این رو، متد غیر استاندارد requestAdapterInfo() در GPUAdapter اکنون منسوخ شده است. برای منسوخ شدن به intent مراجعه کنید.

کنسول DevTools یک هشدار منسوخ شدن تابع requestAdapterInfo() نمایش می‌دهد.
هشدار ویژگی منسوخ‌شده برای requestAdapterInfo() در Chrome DevTools.

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

رابط برنامه‌نویسی کاربردی webgpu.h در زبان C، برخی قراردادهای نامگذاری برای ساختارهای افزونه تعریف کرده است. به تغییرات نام و مشکل ۴۲۲۴۱۱۷۴ در ادامه مراجعه کنید.

افزونه‌های WGPURenderPassDescriptor
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
افزونه‌های WGPUShaderModuleDescriptor
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
افزونه‌های توصیفگر WGPUSurfaceDescriptor
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

نوع ویژگی depthWriteEnabled مربوط به WGPUDepthStencilState از boolean به WGPUOptionalBool تغییر می‌کند تا سه حالت ممکن خود (true، false و undefined) را مانند API جاوا اسکریپت بهتر منعکس کند. برای کسب اطلاعات بیشتر، به قطعه کد زیر و webgpu-headers PR مراجعه کنید.

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

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

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

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

کروم ۱۴۲

کروم ۱۴۱

کروم ۱۴۰

کروم ۱۳۹

کروم ۱۳۸

کروم ۱۳۷

کروم ۱۳۶

کروم ۱۳۵

کروم ۱۳۴

کروم ۱۳۳

کروم ۱۳۲

کروم ۱۳۱

کروم ۱۳۰

کروم ۱۲۹

کروم ۱۲۸

کروم ۱۲۷

کروم ۱۲۶

کروم ۱۲۵

کروم ۱۲۴

کروم ۱۲۳

کروم ۱۲۲

کروم ۱۲۱

کروم ۱۲۰

کروم ۱۱۹

کروم ۱۱۸

کروم ۱۱۷

کروم ۱۱۶

کروم ۱۱۵

کروم ۱۱۴

کروم ۱۱۳