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

François Beaufort
François Beaufort

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

שילוב של שני פלט של שובר פיקסלים ב-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...

שיפורים בזמן הידור של שגיאות ב-Metal

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

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

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

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

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

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

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