שילוב של שני מקורות
שילוב של שני פלטים של תוכנת ההצללה (shader) של מקטעים בתוך 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...
שיפורי זמן האיסוף של הצללים במתכת
צוות Chrome משפר את Tint, המהדר של שפת ה-shader של WebGPU, באמצעות הצגת ייצוג ביניים (IR) למכשירים שתומכים ב-WebGPU עם הקצה העורפי של Metal. ה-IR הזה, שנמצא בין עץ התחביר המופשט (AST) של Tint לבין כתב הקצה העורפי של המטאל, יהפוך את המהדר ליעיל יותר ובר-תחזוקה, ובסופו של דבר יועיל גם למפתחים וגם למשתמשים. בדיקות ראשוניות מראות שהגרסה החדשה של Tint מהירה יותר פי 10 בתרגום של תוכנות הצללה (shader) WGSL של Unity ל-MSL.
השיפורים האלה, שכבר זמינים ב-Android וב-ChromeOS, מורחבים בהדרגה למכשירי macOS שתומכים ב-WebGPU עם הקצה העורפי של Metal. ראו בעיה 42251016.
הוצאה משימוש של requestAdapterInfo() של GPUAdapter
השיטה האסינכרונית requestAdapterInfo()
של GPUAdapter היא מיותרת, כי מפתחים כבר יכולים לקבל את GPUAdapterInfo באופן סינכרוני באמצעות המאפיין info
של GPUAdapter. לכן, השיטה הלא סטנדרטית GPUAdapter requestAdapterInfo()
הוצאה משימוש. כוונה להוצאה משימוש
עדכונים של 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. מידע נוסף מופיע בקטע הקוד הבא וב-webgpu-headers PR.
wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default
הסקירה הזו כוללת רק חלק מהנקודות העיקריות. רשימת ההצהרות המלאה
מה חדש ב-WebGPU
רשימה של כל מה שנדון בסדרה מה חדש ב-WebGPU.
Chrome 131
- חיתוך מרחקים ב-WGSL
- GPUCanvasContext getConfiguration()
- פרימיטיבים של נקודה וקווים לא יכולים להיות עם הטיית עומק
- פונקציות מובנות של סריקה כוללת לקבוצות משנה
- תמיכה ניסיונית בריבוי שרטוטים עקיפים
- Shader module compilation option strict math
- הסרת השיטה requestAdapterInfo() של GPUAdapter
- עדכונים לגבי זריחה
Chrome 130
- שילוב של שני מקורות
- שיפורי זמן הידור של שפות Shader ב-Metal
- הוצאה משימוש של requestAdapterInfo() של GPUAdapter
- עדכונים לגבי Dawn
Chrome 129
Chrome 128
- ניסוי עם תתי-קבוצות
- הוצאה משימוש של הגדרת הטיה של עומק לקווים ולנקודות
- הסתרת אזהרת DevTools על שגיאה שלא תועדה אם preventDefault
- WGSL מבצעת אינטרפולציה של הדגימה קודם ואז
- עדכונים לגבי Dawn
Chrome 127
- תמיכה ניסיונית ב-OpenGL ES ב-Android
- מאפיין המידע של GPUAdapter
- שיפורים בתאימות הדדית של WebAssembly
- שיפור שגיאות של מקודד הפקודות
- עדכונים לגבי Dawn
Chrome 126
- הגדלת המגבלה של maxTextureArrayLayers
- אופטימיזציה של העלאת מאגר נתונים זמני לקצה העורפי של Vulkan
- שיפורים בזמן הידור של שגיאות (shader)
- מאגרי הפקודות שנשלחים חייבים להיות ייחודיים
- עדכונים לגבי זריחה
Chrome 125
Chrome 124
- טקסטורות אחסון לקריאה בלבד ולקריאה וכתיבה
- תמיכה בעובדי שירות ובעובדים משותפים
- מאפיינים חדשים של פרטי מתאם
- תיקוני באגים
- עדכונים לגבי זריחה
Chrome 123
- תמיכה בפונקציות מובנות של DP4a ב-WGSL
- פרמטרים בלתי מוגבלים של מצביע ב-WGSL
- תחביר פשוט יותר לביטול ההפניה למשתנים מורכבים ב-WGSL
- מצב נפרד לקריאה בלבד של אספקטים של תבנית ועומק
- עדכונים לגבי Dawn
Chrome 122
- הרחבת פוטנציאל החשיפה באמצעות מצב תאימות (תכונה בשלבי פיתוח)
- הגדלת המגבלה של maxVertexAttributes
- עדכונים לגבי זריחה
Chrome 121
- תמיכה ב-WebGPU ב-Android
- שימוש ב-DXC במקום ב-FXC לצורך הידור של שגיאות ב-Windows
- שאילתות של חותמות זמן בשלבי המחשוב והעיבוד
- נקודות כניסה שמוגדרות כברירת מחדל למודולים של תוכנת ההצללה
- תמיכה ב-display-p3 כמרחב צבע של GPUExternalTexture
- מידע על ערמות זיכרון
- עדכונים לגבי Dawn
Chrome 120
- תמיכה בערכים של נקודה צפה (floating-point) באורך 16 ביט ב-WGSL
- מעבר למגבלות
- שינויים במצב העומק של סטנסיל
- עדכונים במידע על המתאם
- קידוד נתונים של שאילתות עם חותמות זמן
- תכונות לניקוי האביב
Chrome 119
- טקסטורות צפות של 32 ביט שניתן לסנן
- פורמט קודקוד unorm10-10-10-2
- פורמט טקסטורה של rgb10a2uint
- עדכונים לגבי זריחה
Chrome 118
- תמיכה ב-HTMLImageElement וב-ImageData ב-
copyExternalImageToTexture()
- תמיכה ניסיונית במרקם האחסון לקריאה בלבד ולקריאה בלבד
- עדכונים לגבי Dawn
Chrome 117
- הסרה של מאגר נתונים זמני של קודקודים
- ביטול ההגדרה של קבוצת הקישור
- השתקת שגיאות שנובעות מיצירת צינור עיבוד נתונים אסינכררוני כשהמכשיר אבד
- עדכונים לגבי יצירת מודולים של שגיאות SPIR-V
- שיפור חוויית המפתחים
- אחסון צינורות עיבוד נתונים במטמון עם פריסה שנוצרה באופן אוטומטי
- עדכונים לגבי Dawn
Chrome 116
- שילוב של קודק WebCodec
- מכשיר שאבד שהוחזר על ידי GPUAdapter
requestDevice()
- שמירה על הפעלה חלקה של סרטונים אם מתבצעת קריאה ל-
importExternalTexture()
- תאימות למפרט
- שיפור חוויית הפיתוח
- עדכונים לגבי Dawn
Chrome 115
- תוספים נתמכים לשפת WGSL
- תמיכה ניסיונית ב-Direct3D 11
- קבלת GPU נפרד כברירת מחדל בחשמל AC
- שיפור חוויית הפיתוח
- עדכונים לגבי זריחה
Chrome 114
- אופטימיזציה של JavaScript
- getCurrentTexture() ב-Canvas לא מוגדר מפעילה שגיאה מסוג InvalidStateError
- עדכונים מ-WGSL
- עדכונים לגבי זריחה