מספר התכונות של WebGPU עשוי להיות מעט דל הפעם, אבל כמה חידושים משמעותיים נמצאים ממש מעבר לפינה! גרסאות עתידיות יכללו תכונות כמו שיפור מהירות ההידור של תוכנת ההצללה (shader) ושינויים במודל האסינכרוני של ההטמעה באמצעות 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
: ערך מובנה לאינדקס של ה-thread בתוך קבוצת המשנה.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 128
- התנסות עם תתי-קבוצות
- הוצאה משימוש של הגדרה של הטיית עומק לקווים ולנקודות
- הסתרת האזהרה של כלי הפיתוח לגבי שגיאה שלא תועדה אםpreventDefault
- קודם כל דגימת אינטרפולציה של WGSL
- עדכונים לגבי זריחה
Chrome 127
- תמיכה ניסיונית ב-OpenGL ES ב-Android
- מאפיין המידע של GPUAdapter
- שיפורים ב-WebAssembly יכולת פעולה הדדית
- שיפור בשגיאות מקודד פקודות
- עדכונים לגבי זריחה
Chrome 126
- הגדלת המגבלה של maxTextureArrayLayers
- אופטימיזציה של העלאת מאגר נתונים זמני לקצה העורפי של Vulkan
- שיפורים בזמן האיסוף של Shader
- מאגרי הפקודות שנשלחים חייבים להיות ייחודיים
- עדכונים לגבי זריחה
Chrome 125
Chrome 124
- טקסטורות אחסון לקריאה בלבד ולקריאה-כתיבה
- תמיכה בעובדי שירות ובעובדים משותפים
- מאפיינים חדשים של פרטי מתאמים
- תיקוני באגים
- עדכונים לגבי זריחה
Chrome 123
- תמיכה בפונקציות מובנות של DP4a ב-WGSL
- פרמטרים בלתי מוגבלים של מצביע ב-WGSL
- תחביר תחבירי לביטול התייחסויות של מרוכבים ב-WGSL
- מצב קריאה בלבד נפרד להבטי שבלונה ובעומק
- עדכונים לגבי זריחה
Chrome 122
- הרחבת פוטנציאל החשיפה באמצעות מצב תאימות (תכונה בשלבי פיתוח)
- הגדלת המגבלה של maxVertexAttributes
- עדכונים לגבי זריחה
Chrome 121
- תמיכה ב-WebGPU ב-Android
- שימוש ב-DXC במקום ב-FXC להידור של תוכנת ההצללה ב-Windows
- שאילתות חותמות זמן באישורי מחשוב ועיבוד
- נקודות כניסה שמוגדרות כברירת מחדל למודולים של תוכנת ההצללה
- תמיכה ב-Display-p3 כמרחב צבעים של GPUExternalTexture
- מידע על ערימות זיכרון
- עדכונים לגבי זריחה
Chrome 120
- תמיכה בערכי נקודה צפה (floating-point) של 16 ביט ב-WGSL
- מרחיבים את הגבולות
- שינויים במצב העומק של סטנסיל
- עדכונים במידע על מתאם
- כימות שאילתות חותמות זמן
- תכונות לניקוי האביב
Chrome 119
- טקסטורות צפות של 32 ביט שניתן לסנן
- פורמט unorm10-10-10-2 קודקוד
- פורמט טקסטורה של IMAP10a2uint
- עדכונים לגבי זריחה
Chrome 118
- תמיכה ב-HTMLImageElement וב-ImageData ב-
copyExternalImageToTexture()
- תמיכה ניסיונית במרקם האחסון לקריאה בלבד ולקריאה בלבד
- עדכונים לגבי זריחה
Chrome 117
- ביטול הגדרה של מאגר נתונים זמני של קודקודים
- ביטול ההגדרה של קבוצת קישור
- השתקת שגיאות מיצירה של צינור עיבוד נתונים אסינכרוני כשהמכשיר אבד
- עדכונים ליצירת מודול של תוכנת ההצללה (shader) SPIR-V
- שיפור חוויית הפיתוח
- שמירה במטמון של צינורות עיבוד נתונים באמצעות פריסה שנוצרת באופן אוטומטי
- עדכונים לגבי זריחה
Chrome 116
- שילוב של קודק WebCodec
- המכשיר שאבד הוחזר על ידי GPUAdapter
requestDevice()
- הפעלת הסרטון ב-
importExternalTexture()
צריכה להיות חלקה - תאימות מפרטת
- שיפור חוויית הפיתוח
- עדכונים לגבי זריחה
Chrome 115
- תוספים נתמכים לשפות של WGSL
- תמיכה ניסיונית ב-Direct3D 11
- קבלת GPU נפרד כברירת מחדל בחיבור לחשמל
- שיפור חוויית הפיתוח
- עדכונים לגבי זריחה
Chrome 114
- אופטימיזציה של JavaScript
- getCurrentTexture() בבד ציור שלא הוגדר גורם לשגיאה InvalidStateError
- עדכונים ל-WGSL
- עדכונים לגבי זריחה