טקסטורות אחסון לקריאה בלבד ולקריאה וכתיבה
סוג הקישור של טקסטורות האחסון מאפשר לשיחות לקרוא מטקסטורות האחסון בלי להוסיף את השימוש ב-TEXTURE_BINDING
, ולבצע פעולות קריאה וכתיבה מעורבות בפורמטים מסוימים. כשתוסף השפה "readonly_and_readwrite_storage_textures"
של WGSL נמצא ב-navigator.gpu.wgslLanguageFeatures
, עכשיו אפשר להגדיר את הגישה של GPUStorageTexture
ל-"read-write"
או ל-"read-only"
כשיוצרים פריסה של קבוצת קישור. בעבר, האפשרות הזו הייתה מוגבלת ל-"write-only"
.
לאחר מכן, קוד ה-WGSL של ה-shader יכול להשתמש במאפיין הגישה read_write
ו-read
עבור טקסטורות אחסון, הפונקציות המובנות textureLoad()
ו-textureStore()
פועלות בהתאם, ופונקציה מובנית חדשה textureBarrier()
זמינה לסנכרון של גישות לזיכרון טקסטורה בקבוצת עבודה.
מומלץ להשתמש בהנחיה של requires כדי לסמן את האפשרות לבעיות בהעברה באמצעות requires readonly_and_readwrite_storage_textures;
בחלק העליון של קוד ה-WGSL של ה-shader. ראו את הדוגמה הבאה וגם את הבעיה dawn:1972.
if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
throw new Error("Read-only and read-write storage textures are not available");
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const bindGroupLayout = device.createBindGroupLayout({
entries: [{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
storageTexture: {
access: "read-write", // <-- New!
format: "r32uint",
},
}],
});
const shaderModule = device.createShaderModule({ code: `
requires readonly_and_readwrite_storage_textures;
@group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_id) local_id: vec3u) {
var data = textureLoad(tex, vec2i(local_id.xy));
data.x *= 2;
textureStore(tex, vec2i(local_id.xy), data);
}`
});
// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.
תמיכה בקובצי שירות (service worker) ובעובדים משותפים
WebGPU ב-Chrome מעלה את רמת התמיכה ב-Web Workers לשלב הבא, ומציע עכשיו תמיכה גם ב-service workers וגם ב-shared workers. אפשר להשתמש בקובצי שירות (service workers) כדי לשפר את המשימות ברקע ואת היכולות אופליין, ובכוח עבודה משותף (shared workers) כדי לשתף משאבים ביעילות בין סקריפטים. בעיה chromium:41494731
כדאי לעיין בתוסף לדוגמה ל-Chrome ובתוסף WebLLM ל-Chrome כדי לראות איך משתמשים ב-WebGPU ב-service worker של תוסף.
מאפיינים חדשים של פרטי המתאם
מאפייני המידע הלא סטנדרטיים של המתאם d3dShaderModel
ו-vkDriverVersion
זמינים עכשיו בקריאה ל-requestAdapterInfo()
אם המשתמש הפעיל את הדגל 'WebGPU Developer Features' ב-chrome://flags/#enable-webgpu-developer-features
. מתי התכונה נתמכת:
הערך
d3dShaderModel
הוא מספר המודל המקסימלי של שפת שדרוג הקוד (shader) של D3D שנתמך. לדוגמה, הערך 62 מציין שהדרייבר הנוכחי תומך ב-HLSL SM 6.2. במסמכי התיעוד ובבעיה dawn:1254.השדה
vkDriverVersion
הוא מספר הגרסה של מנהל ה-Vulkan שצוין על ידי הספק. במסמכי התיעוד ובבעיה chromium:327457605.
תיקוני באגים
יצירת שני צינורות עיבוד נתונים עם קבוצות קישור תואמות באמצעות layout: "auto"
, ואז יצירת קבוצת קישור עם צינור עיבוד הנתונים הראשון ושימוש בה בצינור עיבוד הנתונים השני, גורמים עכשיו להודעת השגיאה GPUValidationError. ההרשאה הזו הייתה באג בהטמעה, ותוקנה עכשיו באמצעות בדיקות מתאימות. ראו issue dawn:2402.
עדכונים של Dawn
ב-Dawn API, פונקציית ה-callback של השגיאה שלא תועדה שהוגדרה באמצעות wgpuDeviceSetUncapturedErrorCallback
לא נקראת עכשיו אחרי אובדן מכשיר ה-GPU. התיקון הזה תואם את Dawn למפרט של JavaScript API ולהטמעה של Blink. בעיה dawn:2459
כאן מפורטות רק כמה מהנקודות העיקריות. רשימת ההצהרות המלאה
מה חדש ב-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
- שיפורים בזמן הידור של שגיאות (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