מספר התכונות של WebGPU עשוי להיות מעט דל הפעם, אבל כמה חידושים משמעותיים נמצאים ממש מעבר לפינה! גרסאות עתידיות יכללו תכונות כמו שיפורים במהירות הידור של שגיאות, ושינויים במודל האסינכרוני של ההטמעה באמצעות WGPUFuture.
קבוצות משנה (תכונה בפיתוח)
התכונה של תת-קבוצות מאפשרת מקבילות ברמת ה-SIMD, וכך מאפשרת לשרשורים בתוך קבוצה לתקשר ולבצע פעולות מתמטיות קולקטיביות (לדוגמה, חישוב סכום של 16 מספרים). הפתרון הזה מספק צורה יעילה במיוחד של שיתוף נתונים בין שרשורים.
ממשקי ה-API המודרניים של GPU תומכים בפעולות של קבוצות משנה, אבל פרטי השמות וההטמעה משתנים. צוות Chrome זיהה את הנקודות המשותפות ועכשיו הוא פועל כדי להפוך את התכונה הזו לתקנית. כדאי לעיין בהצעה ולהוסיף תגובה אם יש לכם שאלות.
יש הטמעה מינימלית ולא סטנדרטית של קבוצות משנה מאחורי הדגל 'תכונות ניסיוניות של פלטפורמת האינטרנט' ב-chrome://flags/#enable-experimental-web-platform-features
, כדי שמפתחים יוכלו לנסות את התכונות האלה ולשתף משוב, מאחר שהיתרונות בפועל עדיין לא הוכחו בהקשר של WebGPU.
כשהתכונה "chromium-experimental-subgroups"
זמינה ב-GPUAdapter
, צריך לבקש GPUDevice
עם התכונה הזו כדי לקבל תמיכה בקבוצות משנה ניסיוניות ב-WGSL ולבדוק את המגבלות של minSubgroupSize
ו-maxSubgroupSize
.
בנוסף, צריך להפעיל את התוסף הזה בקוד WGSL באופן מפורש באמצעות enable chromium_experimental_subgroups
. כשהתכונה הזו מופעלת, אתם מקבלים גישה לתוספים הבאים:
subgroup_invocation_id
: ערך מובנה של האינדקס של השרשור בתוך אותה תת-קבוצה.subgroup_size
: ערך מובנה לגישה לגודל של תת-קבוצה.subgroupBallot(value):
מחזירה קבוצה של שדות ביט, שבהם הביט התואם ל-subgroup_invocation_id
הוא 1 אםvalue
נכון לקריאה הפעילה הזו, ו-0 במקרים אחרים.subgroupBroadcast(value, id)
: המערכת משדרת את הערך שלvalue
מהקריאה עםsubgroup_invocation_id
שתואם ל-id
לכל הקריאות בתוך אותה קבוצת משנה. הערה:id
חייב להיות קבוע בזמן הידור.
קטע הקוד הבא מספק בסיס לניסוי ולגילוי הפוטנציאל של קבוצות משנה.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-subgroups"],
});
const shaderModule = device.createShaderModule({ code: `
enable chromium_experimental_subgroups;
@compute @workgroup_size(64) fn main(
@builtin(global_invocation_id) global_id : vec3u,
@builtin(subgroup_size) sg_size : u32,
@builtin(subgroup_invocation_id) sg_id : u32) {
// TODO: Use subgroupBallot() and subgroupBroadcast().
}`,
});
עיבוד לפרוסה של טקסטורה תלת-ממדית
עכשיו אפשר לבצע עיבוד ישירות לפרוסות של טקסטורות תלת-ממדיות במעברי עיבוד, ולהרחיב את היכולות מעבר לעיבוד טקסטורות דו-ממדיות נפוצות, באמצעות המאפיין החדש depthSlice
ב-GPURenderPassColorAttachment
. התוספת הזו מאפשרת, למשל, ליצור סצנות ואפקטים מבוססי-ווקסלים על ידי רינדור ישירות למקאמים של טקסטורות תלת-ממדיות. בעיה dawn:1020
עדכונים לגבי זריחה
מה חדש ב-WebGPU
רשימה של כל מה שדיברנו עליו בסדרה מה חדש ב-WebGPU.
Chrome 131
- חיתוך מרחקים ב-WGSL
- GPUCanvasContext getConfiguration()
- פרימיטיבים של נקודה וקווים לא יכולים להיות עם הטיית עומק
- פונקציות מובנות של סריקה הכללה עבור תתי-קבוצות
- תמיכה ניסיונית בקריאה עקיפה עם מספר משיכות
- אפשרות של הידור של מודול Shader במתמטיקה מחמירה
- הסרת השיטה requestAdapterInfo() של GPUAdapter
- עדכונים לגבי Dawn
Chrome 130
- שילוב מקורות כפול
- שיפורי זמן הידור של שפות Shader ב-Metal
- הוצאה משימוש של requestAdapterInfo() של GPUAdapter
- עדכונים לגבי Dawn
Chrome 129
Chrome 128
- ניסוי עם תתי-קבוצות
- הוצאה משימוש של הגדרת הטיה של עומק לקווים ולנקודות
- הסתרת האזהרה של כלי הפיתוח לגבי שגיאה שלא תועדה אםpreventDefault
- WGSL מבצעת אינטרפולציה של הדגימה קודם ואז
- עדכונים לגבי Dawn
Chrome 127
- תמיכה ניסיונית ב-OpenGL ES ב-Android
- מאפיין המידע של GPUAdapter
- שיפורים בתאימות הדדית של WebAssembly
- שיפור שגיאות של מקודד הפקודות
- עדכונים לגבי Dawn
Chrome 126
- הגדלת המגבלה של maxTextureArrayLayers
- אופטימיזציה של העלאת מאגר נתונים זמני לקצה העורפי של Vulkan
- שיפורים בזמן הידור של שגיאות (shader)
- מאגרי הפקודות שנשלחים חייבים להיות ייחודיים
- עדכונים לגבי Dawn
Chrome 125
Chrome 124
- טקסטורות אחסון לקריאה בלבד ולקריאה-כתיבה
- תמיכה בעובדי שירות ובעובדים משותפים
- מאפיינים חדשים של פרטי מתאם
- תיקוני באגים
- עדכונים לגבי זריחה
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
- שיפור חוויית המפתחים
- עדכונים לגבי זריחה
Chrome 114
- אופטימיזציה של JavaScript
- getCurrentTexture() ב-Canvas לא מוגדר מפעילה שגיאה מסוג InvalidStateError
- עדכונים מ-WGSL
- עדכונים לגבי Dawn