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

François Beaufort
François Beaufort

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

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

שיפורים במשך הזמן לקימפול של 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().
אזהרה על תכונה שהוצאה משימוש (deprecated) עבור requestAdapterInfo() בכלי הפיתוח ל-Chrome.

עדכונים של Dawn

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

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

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

מה חדש ב-WebGPU

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

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