תמיכה ב-HDR עם מצב מיפוי גוונים על קנבס
למפתחי אתרים יש אפשרויות מוגבלות להעברת תוכן HDR, והם מסתמכים בעיקר על הרכיבים <img>
ו-<video>
. עם זאת, הרכיב <canvas>
נשאר מוגבל ל-SDR. כדי ליצור תוכן HDR דינמי בתוך קנבס, צריך לקודד את התוכן שלו כתמונה HDR לפני שמציגים אותו (לדוגמה, אפשר לעיין בהדגמה הזו).
הפרמטר החדש GPUCanvasToneMappingMode
בהגדרות הלוח של WebGPU מאפשר עכשיו ל-WebGPU לצייר צבעים בהירים יותר מלבן (#FFFFFF
). הוא עושה זאת באמצעות המצבים הבאים:
"standard"
: ברירת המחדל מגבילה את התוכן לטווח ה-SDR של המסך. המצב הזה מתקבל על ידי צמצום כל ערכי הצבע במרחב הצבע של המסך למרווח[0, 1]
."extended"
: פותח את מלוא טווח ה-HDR של המסך. המצב הזה תואם ל-"standard"
בטווח[0, 1]
במסך. הלחיצה או ההקרנה מתבצעות לטווח הדינמי המורחב של המסך, אבל לא ל-[0, 1]
.
בקטע הקוד הבא מוסבר איך להגדיר קנבס לטווח דינמי רחב.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");
context.configure({
device,
format: "rgba16float",
toneMapping: { mode: "extended" },
});
כדי לבדוק את HDR עם WebGPU, אפשר לעיין בדוגמה לחלקיקים (HDR) ובדוגמה ל-WebGPU HDR, ולקרוא את הערך ב-chromestatus.
תמיכה מורחבת בתת-קבוצות
בעקבות ההכרזה על ניסויים בקבוצות משנה, הפונקציות המובנות של קבוצות המשנה זמינות עכשיו לשימוש גם ב-compute shaders וגם ב-fragment shaders. הם כבר לא מוגבלים רק ל-compute shaders. בעיה מס' 354738715
שימו לב שהערך המובנה subgroup_size
פגום כרגע ב-fragment shaders. בינתיים, כדאי להימנע מכך.
בנוסף, נוספו הפונקציות המובנות הבאות של קבוצת המשנה:
subgroupAdd(value)
: הפונקציה מחזירה את הסכום של כל הקריאות הפעילותvalue
בקבוצת המשנה.subgroupExclusiveAdd(value)
: הפונקציה מחזירה את הסכום הכולל של כל הקריאות הפעילותvalue
בקבוצת המשנה.subgroupMul(value)
: הפונקציה מחזירה את המכפלה של כל הקריאות הפעילותvalue
בקבוצת המשנה.subgroupExclusiveMul(value)
: הפונקציה מחזירה את המכפלה הבלעדית של כל הקריאות הפעילותvalue
בקבוצת המשנה.subgroupAnd(value)
: הפונקציה מחזירה את הפעולה הבינארית AND של כל הקריאות הפעילותvalue
בקבוצת המשנה.subgroupOr(value)
: הפונקציה מחזירה את או(&) הבינארי של כל הקריאות הפעילותvalue
בקבוצת המשנה.subgroupXor(value)
: הפונקציה מחזירה את הפונקציה XOR הבינארית של כל ההפעלות הפעילותvalue
בקבוצת המשנה.subgroupMin(value)
: הפונקציה מחזירה את הערך המינימלי של כל הקריאות הפעילותvalue
בקבוצת המשנה.subgroupMax(value)
: הפונקציה מחזירה את הערך המקסימלי של כל הקריאות הפעילותvalue
בקבוצת המשנה.subgroupAll(value)
: הפונקציה מחזירה את הערך true אם הערך שלvalue
הוא true לכל ההפעלות הפעילות בתת-הקבוצה.subgroupAny(value)
: הפונקציה מחזירה את הערך true אם הערך שלvalue
הוא true לכל קריאה פעילה בקבוצת המשנה.subgroupElect()
: הפונקציה מחזירה את הערך true אם הערך שלsubgroup_invocation_id
בקריאה הזו הוא הנמוך ביותר מבין הערכים של הקריאות הפעילות בקבוצת המשנה.subgroupBroadcastFirst(value)
: משדרת אתvalue
מהקריאה הפעילה עם הערך הנמוך ביותר שלsubgroup_invocation_id
בקבוצת המשנה לכל הקריאות הפעילות האחרות.subgroupShuffle(value, id)
: הפונקציה מחזירה את הערךvalue
מהקריאה הפעילה ש-subgroup_invocation_id
שלה תואם ל-id
.subgroupShuffleXor(value, mask)
: הפונקציה מחזירה את הערךvalue
מהקריאה הפעילה ש-subgroup_invocation_id
שלה תואם ל-subgroup_invocation_id ^ mask
.mask
חייב להיות אחיד באופן דינמי.subgroupShuffleUp(value, delta)
: הפונקציה מחזירה את הערךvalue
מהקריאה הפעילה ש-subgroup_invocation_id
שלה תואם ל-subgroup_invocation_id - delta
.subgroupShuffleDown(value, delta)
: הפונקציה מחזירה את הערךvalue
מהקריאה הפעילה ש-subgroup_invocation_id
שלה תואם ל-subgroup_invocation_id + delta
.quadBroadcast(value, id)
: משדר אתvalue
מהקריאה של ה-quad עם המזההid
.id
חייב להיות ביטוי קבוע.quadSwapX(value)
: החלפה שלvalue
בין הקריאות ב-quad בכיוון X.quadSwapY(value)
: החלפה שלvalue
בין הקריאות ב-quad בכיוון Y.quadSwapDiagonal(value)
: החלפתvalue
בין הקריאות ברביעייה באלכסון.
עדכונים בנושא Dawn
המבנה wgpu::PrimitiveState
כולל עכשיו באופן ישיר את הגדרת הבקרה של חיתוך העומק, כך שאין צורך במבנה wgpu::PrimitiveDepthClipControl
נפרד. מידע נוסף זמין בקטע הקוד הבא ובבקשת ה-PR של webgpu-headers.
// Before
wgpu::PrimitiveState primitive = {};
wgpu::PrimitiveDepthClipControl depthClipControl;
depthClipControl.unclippedDepth = true;
primitive.nextInChain = &depthClipControl;
// Now
wgpu::PrimitiveState primitive = {};
primitive.unclippedDepth = true;
כאן מפורטות רק חלק מהנקודות העיקריות. רשימת ההצהרות המלאה
מה חדש ב-WebGPU
רשימה של כל מה שנדון בסדרה מה חדש ב-WebGPU.
Chrome 138
- קיצור דרך לשימוש במאגר כמשאב קישור
- שינויים בדרישות לגבי גודל מאגרים שממופים בזמן היצירה
- דוח ארכיטקטורה של מעבדי GPU מהדורות האחרונות
- הוצאה משימוש של המאפיין isFallbackAdapter ב-GPUAdapter
- עדכונים לגבי Dawn
Chrome 137
- שימוש בתצוגת טקסטורה לקישור של externalTexture
- העתקה של מאגרים בלי לציין את האופסים והגודל
- WGSL workgroupUniformLoad using pointer to atomic
- המאפיין powerPreference של GPUAdapterInfo
- הסרת המאפיין compatibilityMode של GPURequestAdapterOptions
- עדכונים לגבי Dawn
Chrome 136
- המאפיין isFallbackAdapter של GPUAdapterInfo
- שיפורים בזמן הידור של שגיאות ב-D3D12
- שמירה והעתקה של תמונות על קנבס
- הגבלות במצב תאימות של Lift
- עדכונים לגבי Dawn
Chrome 135
- אישור ליצירת פריסה של צינור עיבוד נתונים עם פריסה של קבוצת קישור null
- מתן אפשרות לחלונות תצוגה להרחיב מעבר לגבולות של יעדי הרינדור
- גישה קלה יותר למצב התאימות הניסיוני ב-Android
- הסרת המגבלה maxInterStageShaderComponents
- עדכונים לגבי Dawn
Chrome 134
- שיפור עומסי העבודה של למידת המכונה באמצעות קבוצות משנה
- הסרת התמיכה בסוגי מרקמים שניתנים לסינון באמצעות רכיבי float כרכיבים שניתן למזג
- עדכונים לגבי Dawn
Chrome 133
- פורמטים נוספים של קודקודים מסוג unorm8x4-bgra וקודקודים עם רכיב אחד
- איך מאפשרים לבקש מגבלות לא ידועות עם ערך לא מוגדר
- שינויים בכללי היישור של WGS84
- שיפור בביצועים של WGSL באמצעות ביטול
- שימוש ב-displaySize של VideoFrame לצורך טקסטורות חיצוניות
- טיפול בתמונות עם כיוונים שאינם ברירת המחדל באמצעות copyExternalImageToTexture
- שיפור חוויית המפתחים
- הפעלת מצב תאימות באמצעות featureLevel
- ניקוי של תכונות ניסיוניות של קבוצות משנה
- הוצאה משימוש של המגבלה maxInterStageShaderComponents
- עדכונים לגבי Dawn
Chrome 132
- שימוש בתצוגת טקסטורה
- מיזוג של מרקמים מסוג float ב-32 ביט
- המאפיין adapterInfo של GPUDevice
- הגדרת הקשר של לוח הציור בפורמט לא חוקי גורמת לשגיאת JavaScript
- הגבלות על סינון של טקסטורות
- ניסוי עם תת-קבוצות מורחבות
- שיפור חוויית המפתחים
- תמיכה ניסיונית בפורמטים של טקסטורות מנורמלות ב-16 ביט
- עדכונים לגבי Dawn
Chrome 131
- חיתוך מרחקים ב-WGSL
- GPUCanvasContext getConfiguration()
- אסור שתהיה הטיה של עומק בפרימיטיבים של נקודות וקווים
- פונקציות מובנות של סריקה כוללת לקבוצות משנה
- תמיכה ניסיונית בקריאה עקיפה עם כמה משיכות
- Shader module compilation option strict math
- הסרת השיטה requestAdapterInfo() של GPUAdapter
- עדכונים לגבי Dawn
Chrome 130
- שילוב של שני מקורות
- שיפורי זמן הידור של שגיאות ב-Metal
- הוצאה משימוש של requestAdapterInfo() של GPUAdapter
- עדכונים לגבי Dawn
Chrome 129
Chrome 128
- ניסוי עם תתי-קבוצות
- הוצאה משימוש של הגדרת הטיה של עומק לקווים ולנקודות
- הסתרת אזהרת DevTools על שגיאה שלא תועדה אם preventDefault
- WGSL מבצעת אינטרפולציה של הדגימה קודם ואז
- עדכונים לגבי Dawn
Chrome 127
- תמיכה ניסיונית ב-OpenGL ES ב-Android
- מאפיין המידע של GPUAdapter
- שיפורים בתאימות הדדית של WebAssembly
- שיפור שגיאות של מקודד הפקודות
- עדכונים לגבי Dawn
Chrome 126
- הגדלת המגבלה של maxTextureArrayLayers
- אופטימיזציה של העלאה למאגר לצד העורפי של Vulkan
- שיפורים בזמן הידור של שגיאות (shaders)
- מאגרי הפקודות שנשלחים חייבים להיות ייחודיים
- עדכונים לגבי Dawn
Chrome 125
Chrome 124
- טקסטורות אחסון לקריאה בלבד ולקריאה וכתיבה
- תמיכה ב-Service Workers וב-Shared Workers
- מאפיינים חדשים של פרטי מתאם
- תיקוני באגים
- עדכונים לגבי Dawn
Chrome 123
- תמיכה בפונקציות מובנות של DP4a ב-WGSL
- פרמטרים של מצביע ללא הגבלה ב-WGSL
- תחביר פשוט יותר לביטול ההפניה לרכיבים ב-WGSL
- מצב נפרד לקריאה בלבד של אספקטים של תבנית ועומק
- עדכונים לגבי Dawn
Chrome 122
- הרחבת פוטנציאל החשיפה באמצעות מצב תאימות (תכונה בפיתוח)
- הגדלת המגבלה של maxVertexAttributes
- עדכונים לגבי Dawn
Chrome 121
- תמיכה ב-WebGPU ב-Android
- שימוש ב-DXC במקום ב-FXC לצורך הידור של שגיאות ב-Windows
- שאילתות של חותמות זמן בשלבי המחשוב והעיבוד
- נקודות כניסה שמוגדרות כברירת מחדל למודולי Shader
- תמיכה ב-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() ב-Canvas לא מוגדר מפעילה שגיאה מסוג InvalidStateError
- עדכונים מ-WGSL
- עדכונים לגבי Dawn