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

François Beaufort
François Beaufort

מיזוג של שני מקורות

שילוב של שני פלטים של shader של פרגמנט לתוך framebuffer יחיד נקרא מיזוג של שני מקורות. הטכניקה הזו שימושית במיוחד לאפליקציות שדורשות פעולות מיזוג מורכבות, כמו אלה שמבוססות על מצבי מיזוג של Porter-Duff. החלפת מעברי רינדור עוקבים במעבר רינדור יחיד מאפשרת לשפר את הביצועים והגמישות של מיזוג מקורות כפולים.

התכונה החדשה "dual-source-blending" WebGPU מאפשרת להשתמש במאפיין WGSL @blend_src ב-@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...

שיפורים במשך הזמן לקימפול של Shader ב-Metal

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

תרשים זרימה שמראה את תהליך ההמרה של קוד הצללה של WGSL להוראות ברמה נמוכה של GPU.
יצירת פייפליין של עיבוד ב-macOS.

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

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

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

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

עדכונים של Dawn

ב-API של C‏, webgpu.h, הוגדרו כמה מוסכמות למתן שמות למבני נתונים של תוספים. אפשר לעיין בשינויים הבאים בשמות ובבעיה מספר 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.

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

המידע הזה כולל רק נקודות עיקריות. רשימה מלאה של קומיטים

מה חדש ב-WebGPU

רשימה של כל הנושאים שמופיעים בסדרת המאמרים מה חדש ב-WebGPU.

‫Chrome 149-150

‫Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

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