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

François Beaufort
François Beaufort

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

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

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

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

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

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

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

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

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

ב-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 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