יכול להיות שמספר התכונות של 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
עדכונים של Dawn
מה חדש ב-WebGPU
רשימה של כל מה שנדון בסדרה מה חדש ב-WebGPU.
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
- שילוב של שני מקורות
- שיפורי זמן הידור של שפות 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)
- מאגרי הפקודות שנשלחים חייבים להיות ייחודיים
- עדכונים לגבי 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