מה חדש ב-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. מידע נוסף

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

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

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

עדכונים לגבי שעות השחר

ב-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. מידע נוסף זמין בקטע הקוד הבא ובבקשת ה-PR של webgpu-headers.

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

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

מה חדש ב-WebGPU

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

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