מה חדש ב-WebGPU (Chrome {/7}130)

François Beaufort
François Beaufort

שילוב של שני מקורות

שילוב של שני פלטים של תוכנת ההצללה (shader) של מקטעים בתוך framebuffer אחד נקרא מיזוג מקורות כפול. הטכניקה הזו שימושית במיוחד לאפליקציות שדורשות פעולות מיזוג מורכבות, כמו פעולות שמבוססות על שיטות המיזוג של 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...

שיפורי זמן האיסוף של הצללים במתכת

צוות Chrome משפר את Tint, המהדר של שפת ה-shader של WebGPU, באמצעות הצגת ייצוג ביניים (IR) למכשירים שתומכים ב-WebGPU עם הקצה העורפי של Metal. ה-IR הזה, שנמצא בין עץ התחביר המופשט (AST) של Tint לבין כתב הקצה העורפי של המטאל, יהפוך את המהדר ליעיל יותר ובר-תחזוקה, ובסופו של דבר יועיל גם למפתחים וגם למשתמשים. בדיקות ראשוניות מראות שהגרסה החדשה של Tint מהירה יותר פי 10 בתרגום של תוכנות הצללה (shader) WGSL של Unity ל-MSL.

תרשים זרימה שבו מוצג התהליך של המרת קוד של שַדְר (shader) ב-WGSL להוראות ברמה נמוכה של GPU.
יצירת צינור עיבוד נתונים לעיבוד תמונה ב-macOS.

השיפורים האלה, שכבר זמינים ב-Android וב-ChromeOS, מורחבים בהדרגה למכשירי macOS שתומכים ב-WebGPU עם הקצה העורפי של Metal. ראו בעיה 42251016.

הוצאה משימוש של requestAdapterInfo()‎ של GPUAdapter

השיטה האסינכרונית requestAdapterInfo() של GPUAdapter היא מיותרת, כי מפתחים כבר יכולים לקבל את GPUAdapterInfo באופן סינכרוני באמצעות המאפיין info של GPUAdapter. לכן, השיטה הלא סטנדרטית GPUAdapter requestAdapterInfo() הוצאה משימוש. כוונה להוצאה משימוש

במסוף כלי הפיתוח מוצגת אזהרה על הוצאה משימוש של requestAdapterInfo().
אזהרה על תכונה שהוצאה משימוש עבור requestAdapterInfo() בכלים למפתחים ב-Chrome.

עדכונים של Dawn

ב-webgpu.h C API הוגדרו כמה מוסכמות מתן שמות למבני תוספים. ראו את שינויי השמות הבאים ובעיה 42241174.

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 כדי לשקף טוב יותר את שלושת המצבים האפשריים שלו (true, false ו-undefined) כמו ב-JavaScript API. מידע נוסף מופיע בקטע הקוד הבא וב-webgpu-headers PR.

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

הסקירה הזו כוללת רק חלק מהנקודות העיקריות. רשימת ההצהרות המלאה

מה חדש ב-WebGPU

רשימה של כל מה שנדון בסדרה מה חדש ב-WebGPU.

Chrome 131

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