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

François Beaufort
François Beaufort

ترکیب دو منبع

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

ویژگی جدید "dual-source-blending" WebGPU به شما امکان می‌دهد از مشخصه WGSL @blend_src در @location(0) برای نشان دادن شاخص منبع ترکیب و عوامل ترکیب زیر استفاده کنید: "src1"،‏ "one-minus-src1"،‏ "src1-alpha"، و "one-minus-src1-alpha". تکه‌کد زیر، ورودی chromestatus، و مشکل ۳۴۱۹۷۳۴۲۳ را ببینید.

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

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

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

این بهبودها که ازقبل در Android و ChromeOS دردسترس هستند، به‌تدریج به دستگاه‌های macOS که از WebGPU با زیرینه Metal پشتیبانی می‌کنند گسترش می‌یابند. مشکل ۴۲۲۵۱۰۱۶ را ببینید.

منسوخ شدن GPUAdapter requestAdapterInfo()‎

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

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

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

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

‫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 از بولی به WGPUOptionalBool تغییر می‌کند تا سه وضعیت ممکن آن (درست، نادرست، و تعریف‌نشده) را بهتر منعکس کند، همان‌طور که در JavaScript API است. برای کسب اطلاعات بیشتر، تکه‌کد زیر و webgpu-headers PR را ببینید.

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

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

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