שילוב של שני מקורות
שילוב של שני פלט של שובר פיקסלים ב-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.
השיפורים האלה, שכבר זמינים ב-Android וב-ChromeOS, מורחבים בהדרגה למכשירי macOS שתומכים ב-WebGPU עם הקצה העורפי של Metal. ראו בעיה 42251016.
הוצאה משימוש של requestAdapterInfo() של GPUAdapter
השיטה האסינכרונית requestAdapterInfo()
של GPUAdapter מיותרת כי מפתחים כבר יכולים לקבל את GPUAdapterInfo באופן סינכרוני באמצעות המאפיין GPUAdapter info
. לכן, השיטה הלא סטנדרטית requestAdapterInfo()
של GPUAdapter הוצאה משימוש. כוונה להוצאה משימוש
עדכונים של 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 130
- שילוב של שני מקורות
- שיפורי זמן ההידור של המטאל
- הוצאה משימוש של requestAdapterInfo() של GPUAdapter
- עדכונים לגבי זריחה
Chrome 129
Chrome 128
- ניסוי עם תתי-קבוצות
- הוצאה משימוש של הגדרה של הטיית עומק לקווים ולנקודות
- הסתרת האזהרה של כלי הפיתוח לגבי שגיאה שלא תועדה אםpreventDefault
- WGSL מבצעת אינטרפולציה של הדגימה קודם ואז
- עדכונים לגבי Dawn
Chrome 127
- תמיכה ניסיונית ב-OpenGL ES ב-Android
- מאפיין המידע של GPUAdapter
- שיפורים בתאימות הדדית של WebAssembly
- שיפור שגיאות של מקודד הפקודות
- עדכונים לגבי זריחה
Chrome 126
- הגדלת המגבלה של maxTextureArrayLayers
- אופטימיזציה של העלאה למאגר לצד העורפי של Vulkan
- שיפורים בזמן הידור של שגיאות (shader)
- מאגרי הפקודות שנשלחים חייבים להיות ייחודיים
- עדכונים לגבי Dawn
Chrome 125
Chrome 124
- טקסטורות אחסון לקריאה בלבד ולקריאה-כתיבה
- תמיכה ב-Service Workers וב-Shared Workers
- מאפיינים חדשים של פרטי מתאם
- תיקוני באגים
- עדכונים לגבי Dawn
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
- טקסטורות של מספרים ממשיים (float) ב-32 ביט שניתן לסנן
- פורמט unorm10-10-10-2 קודקוד
- פורמט טקסטורה של rgb10a2uint
- עדכונים לגבי Dawn
Chrome 118
- תמיכה ב-HTMLImageElement וב-ImageData ב-
copyExternalImageToTexture()
- תמיכה ניסיונית ברקמות אחסון לקריאה וכתיבה ולקריאה בלבד
- עדכונים לגבי Dawn
Chrome 117
- ביטול ההגדרה של מאגר הנקודות
- ביטול ההגדרה של קבוצת קישור
- השתקת שגיאות שנובעות מיצירת צינור עיבוד נתונים אסינכררוני כשהמכשיר אבד
- עדכונים לגבי יצירת מודולים של שגיאות SPIR-V
- שיפור חוויית הפיתוח
- אחסון צינורות עיבוד נתונים במטמון עם פריסה שנוצרה באופן אוטומטי
- עדכונים לגבי Dawn
Chrome 116
- שילוב WebCodecs
- המכשיר שאבד הוחזר על ידי GPUAdapter
requestDevice()
- הפעלת הסרטון ב-
importExternalTexture()
צריכה להיות חלקה - תאימות מפרטת
- שיפור חוויית הפיתוח
- עדכונים לגבי Dawn
Chrome 115
- תוספים נתמכים לשפת WGSL
- תמיכה ניסיונית ב-Direct3D 11
- קבלת GPU נפרד כברירת מחדל בחשמל AC
- שיפור חוויית המפתחים
- עדכונים לגבי Dawn
Chrome 114
- אופטימיזציה של JavaScript
- getCurrentTexture() בבד ציור שלא הוגדר גורם לשגיאה InvalidStateError
- עדכונים מ-WGSL
- עדכונים לגבי זריחה