תמיכה ב-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
כרגע באגי בכלי להצללה של מקטעים. בינתיים, כדאי להימנע מכך.
בנוסף, נוספו הפונקציות המובנות הבאות של קבוצת המשנה:
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
נכון לכל ההפעלות הפעילות בתת-הקבוצה.subgroupAny(value)
: הפונקציה מחזירה true אם הערך שלvalue
נכון לכל הפעלה פעילה בקבוצת המשנה.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
מההפעלה של הריבוע עם מזהה שווה ל-id
.id
חייב להיות ביטוי קבוע.quadSwapX(value)
: מחליפה את הערךvalue
בין הפעלות ב-4 נגד כיוון ה-X.quadSwapY(value)
: החלפה שלvalue
בין הקריאות ב-quad בכיוון Y.quadSwapDiagonal(value)
: החלפתvalue
בין הקריאות ברביעייה באלכסון.
עדכונים לגבי זריחה
המבנה wgpu::PrimitiveState
כולל עכשיו באופן ישיר את הגדרת הבקרה של חיתוך העומק, כך שאין צורך במבנה wgpu::PrimitiveDepthClipControl
נפרד. מידע נוסף מופיע בקטע הקוד הבא וב-webgpu-headers PR.
// Before
wgpu::PrimitiveState primitive = {};
wgpu::PrimitiveDepthClipControl depthClipControl;
depthClipControl.unclippedDepth = true;
primitive.nextInChain = &depthClipControl;
// Now
wgpu::PrimitiveState primitive = {};
primitive.unclippedDepth = true;
הסקירה הזו כוללת רק חלק מהנקודות העיקריות. אתם מוזמנים לעיין ברשימה המלאה של ההתחייבויות.
מה חדש ב-WebGPU
רשימה של כל מה שדיברנו עליו בסדרה מה חדש ב-WebGPU.
Chrome 131
- חיתוך מרחקים ב-WGSL
- GPUCanvasContext getConfiguration()
- אסור שתהיה הטיה של עומק בפרימיטיבים של קווים ונקודות
- פונקציות מובנות של סריקה כוללת לקבוצות משנה
- תמיכה ניסיונית בקריאה עקיפה עם מספר משיכות
- Shader module compilation option strict math
- הסרת השיטה requestAdapterInfo() של GPUAdapter
- עדכונים לגבי Dawn
Chrome 130
- שילוב של שני מקורות
- שיפורי זמן ההידור של המטאל
- הוצאה משימוש של requestAdapterInfo() של GPUAdapter
- עדכונים לגבי Dawn
Chrome 129
Chrome 128
- ניסוי עם תתי-קבוצות
- הוצאה משימוש של הגדרת הטיה של עומק לקווים ולנקודות
- הסתרת אזהרת DevTools על שגיאה שלא תועדה אם preventDefault
- קודם כל דגימת אינטרפולציה של WGSL
- עדכונים לגבי Dawn
Chrome 127
- תמיכה ניסיונית ב-OpenGL ES ב-Android
- מאפיין המידע של GPUAdapter
- שיפורים בתאימות הדדית של WebAssembly
- שיפור שגיאות של מקודד הפקודות
- עדכונים לגבי Dawn
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
- עדכונים לגבי Dawn
Chrome 121
- תמיכה ב-WebGPU ב-Android
- שימוש ב-DXC במקום ב-FXC לצורך הידור של שגיאות ב-Windows
- שאילתות של חותמות זמן בשלבי המחשוב והעיבוד
- נקודות כניסה שמוגדרות כברירת מחדל למודולים של תוכנת ההצללה
- תמיכה ב-display-p3 כמרחב צבע של GPUExternalTexture
- מידע על ערימות זיכרון
- עדכונים לגבי Dawn
Chrome 120
- תמיכה בערכי נקודה צפה (floating-point) של 16 ביט ב-WGSL
- מרחיבים את הגבולות
- שינויים במצב של סטאק עומק
- עדכונים במידע על המתאם
- כימות שאילתות חותמות זמן
- תכונות לניקוי האביב
Chrome 119
- טקסטורות צפות של 32 ביט שניתן לסנן
- פורמט קודקוד unorm10-10-10-2
- פורמט טקסטורה של IMAP10a2uint
- עדכונים לגבי זריחה
Chrome 118
- תמיכה ב-HTMLImageElement וב-ImageData ב-
copyExternalImageToTexture()
- תמיכה ניסיונית ברקמות אחסון לקריאה וכתיבה ולקריאה בלבד
- עדכונים לגבי Dawn
Chrome 117
- ביטול ההגדרה של מאגר הנקודות
- ביטול ההגדרה של קבוצת הקישור
- השתקת שגיאות שנובעות מיצירת צינור עיבוד נתונים אסינכררוני כשהמכשיר אבד
- עדכונים לגבי יצירת מודולים של שגיאות SPIR-V
- שיפור חוויית המפתחים
- אחסון צינורות עיבוד נתונים במטמון עם פריסה שנוצרה באופן אוטומטי
- עדכונים לגבי זריחה
Chrome 116
- שילוב WebCodecs
- מכשיר שאבד שהוחזר על ידי GPUAdapter
requestDevice()
- הפעלת הסרטון ב-
importExternalTexture()
צריכה להיות חלקה - תאימות למפרט
- שיפור חוויית המפתחים
- עדכונים לגבי Dawn
Chrome 115
- תוספים נתמכים לשפות של WGSL
- תמיכה ניסיונית ב-Direct3D 11
- קבלת GPU נפרד כברירת מחדל בחשמל AC
- שיפור חוויית המפתחים
- עדכונים לגבי Dawn
Chrome 114
- אופטימיזציה של JavaScript
- getCurrentTexture() ב-Canvas לא מוגדר מפעילה שגיאה מסוג InvalidStateError
- עדכונים מ-WGSL
- עדכונים לגבי Dawn