תאריך פרסום: 8 בינואר 2025
שימוש בתצוגת המרקם
נכון לעכשיו, תצוגות של טקסטורות של GPU יורשות את כל דגלים השימוש מטקסטורת ה-GPU המקורית. זה עלול לגרום לבעיות כי פורמטים מסוימים של תצוגה לא תואמים לשימושים מסוימים. כדי לפתור את הבעיה, אפשר להשתמש בקריאה ל-createView()
עם המאפיין האופציונלי usage
כדי לציין באופן מפורש קבוצת משנה של דגלים לשימוש של טקסטורת המקור שתואמים לפורמט התצוגה שנבחר.
השינוי הזה מאפשר אימות מראש ושליטה פרטנית יותר באופן השימוש בתצוגה. הוא תואם גם לממשקי API אחרים של גרפיקה שבהם דגלים של שימוש הם פרמטרים נפוצים ביצירת תצוגות, ומציעים הזדמנויות לאופטימיזציה.
אפשר לעיין בקטע הקוד הבא, ברשומה ב-chromestatus ובבעיה 363903526.
const texture = myDevice.createTexture({
size: [4, 4],
format: "rgba8unorm",
usage:
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.STORAGE_BINDING,
viewFormats: ["rgba8unorm-srgb"],
});
const view = texture.createView({
format: 'rgba8unorm-srgb',
usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});
מיזוג של טקסטורות של מספרים ממשיים (float) ב-32 ביט
טקסטורות של 32 ביט עם נקודה צפה הן חיוניות לעיבוד HDR כדי לשמור על טווח רחב של ערכי צבעים ולמנוע פגמים של פסי צבע. לדוגמה, בהמחשה מדעית.
התכונה החדשה של GPU "float32-blendable"
מאפשרת למזג טקסטורות של GPU בפורמטים "r32float"
, "rg32float"
ו-"rgba32float"
. עכשיו אפשר ליצור צינור עיבוד נתונים לעיבוד תמונה שמשתמש בערבוב עם כל קובץ מצורף בפורמט float32, כשמבקשים מכשיר GPU עם התכונה הזו.
אפשר לעיין בקטע הקוד הבא, ברשומה ב-chromestatus ובבעיה 369649348.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-blendable")) {
throw new Error("32-bit float textures blending support is not available");
}
// Explicitly request 32-bit float textures blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-blendable"],
});
// ... Creation of shader modules is omitted for readability.
// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
vertex: { module: myVertexShaderModule },
fragment: {
module: myFragmentShaderModule,
targets: [
{
format: "rgba32float",
blend: { color: {}, alpha: {} },
},
],
},
layout: "auto",
});
// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...
המאפיין adapterInfo
של GPUDevice
חשוב לספריות שמקבלות אובייקטים מסוג GPUDevice
מהמשתמשים לגשת למידע על ה-GPU הפיזי, כי יכול להיות שיהיה צורך לבצע אופטימיזציה או להטמיע פתרונות חלופיים על סמך ארכיטקטורת ה-GPU. אפשר לגשת למידע הזה דרך האובייקט GPUAdapter
, אבל אין דרך ישירה לקבל אותו מ-GPUDevice
בלבד. הדבר עלול להיות לא נוח, כי יכול להיות שהמשתמשים יצטרכו לספק מידע נוסף לצד GPUDevice
.
כדי לטפל בבעיה הזו, עכשיו אפשר לגשת ל-GPUAdapterInfo
דרך המאפיין GPUDevice
adapterInfo
. הם דומים למאפיין GPUAdapter
info
הקיים.
אפשר לעיין בקטע הקוד הבא, ברשומה ב-chromestatus ובבעיה 376600838.
function optimizeForGpuDevice(device) {
if (device.adapterInfo.vendor === "amd") {
// Use AMD-specific optimizations.
} else if (device.adapterInfo.architecture.includes("turing")) {
// Optimize for NVIDIA Turing architecture.
}
}
הגדרת הקשר של לוח הציור בפורמט לא תקין גורמת לשגיאת JavaScript
בעבר, שימוש בפורמט טקסטורה לא תקין בשיטה configure()
של הקשר הבד של GPU הוביל לשגיאת אימות של GPU. השינוי הוא הוספת הודעת שגיאה מסוג TypeError
ב-JavaScript. כך אפשר למנוע תרחישים שבהם getCurrentTexture()
מחזירה טקסטורה תקינה של GPU למרות שההקשר של קנבס ה-GPU מוגדר בצורה שגויה. מידע נוסף זמין בבעיה 372837859.
הגבלות על סינון של Sampler במרקמים
בעבר היה מותר להשתמש בפורמטים של טקסטורות "sint"
, "uint"
ו-depth"
עם דגימות סינון. עכשיו אסור להשתמש בטקסטורה בפורמט "sint"
או "uint"
עם Sampler לסינון. שימו לב שבשלב הזה מתקבלת אזהרה אם משתמשים ב-texture depth"
עם sampler לסינון, כי השימוש הזה לא יהיה מורשה בעתיד. בעיה 376497143
ההגבלות האלה מחייבות ליצור באופן ידני פריסות של קבוצות קישור כשמשתמשים בטקסטורת עומק עם Sampler ללא סינון. הסיבה לכך היא שפריסות הקבוצות המקושרות שנוצרות באופן 'אוטומטי' עדיין לא תומכות בשילוב הזה. בעיה ב-Spec 4952 מכילה הצעה שנמצאת בבדיקה כדי לטפל במגבלה הזו בעתיד.
ניסוי מורחב בקבוצות משנה
הניסוי בקבוצות משנה, שהיה אמור להסתיים בגרסת Chrome 131, הוארך עד גרסת Chrome 133 ויסתיים ב-16 באפריל 2025. בתקופת הניסיון הראשונה בגרסת המקור, התמקדו בביצועים, אבל חסרו בה אמצעי הגנה חיוניים להעברה. אמצעי ההגנה האלה יתווספו עכשיו, ויכול להיות שהם יגרמו לשגיאות בקוד הקיים.
שיפור חוויית המפתחים
עכשיו מוצגת אזהרה בכלי הפיתוח כשמשתמשים באפשרות powerPreference
עם requestAdapter()
ב-Windows. האזהרה הזו תוסר כשמערכת Chrome תדע להשתמש בשני מעבדי GPU שונים ולשלב ביניהם את התוצאות. בעיה מס' 369219127
גודל מאגר ה-GPU מופיע עכשיו בהודעת השגיאה כשיוצרים מאגר GPU גדול מדי. בעיה מס' 374167798
תמיכה ניסיונית בפורמטים של טקסטורות מנורמלות של 16 ביט
פורמטים של טקסטורות רגילות עם סימן ורגילות ללא סימן של 16 ביט זמינים עכשיו באופן ניסיוני, בהתאמה מאחורי התכונות "chromium-experimental-snorm16-texture-formats"
ו-"chromium-experimental-unorm16-texture-formats"
של המעבדים הגרפיים, בזמן שמתנהל דיון על סטנדרטיזציה שלהם.
התכונות האלה מוסיפות תמיכה בפורמטים של טקסטורות מנורמלות של 16 ביט עם שימושים מסוג COPY_SRC
, COPY_DST
, TEXTURE_BINDING
, RENDER_ATTACHMENT
, יכולות של דגימה מרובה ויכולות של פתרון. הפורמטים הנוספים הם "r16unorm"
, "rg16unorm"
, "rgba16unorm"
, "r16snorm"
, "rg16snorm"
ו-"rgba16snorm"
.
עד שהתכונות הניסיוניות האלה יהיו סטנדרטיות, צריך להפעיל את הדגל 'Unsafe WebGPU Support' בקטע chrome://flags/#enable-unsafe-webgpu
כדי שהן יהיו זמינות ב-Chrome.
אפשר לעיין בקטע הקוד הבא ובבעיה 374790898.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});
// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
size: [4, 4],
format: "rgba16snorm",
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
// Send the appropriate commands to the GPU...
עדכונים של Dawn
השיטות EnumerateFeatures(FeatureName * features)
מ-wgpu::Adapter
ומ-wgpu::Device
הוצאו משימוש, ועכשיו צריך להשתמש ב-GetFeatures(SupportedFeatures * features)
. בעיה מס' 368672123
ב-webgpu.h C API, כל ה-char const *
השתנו למבנה WGPUStringView
שמגדיר תצוגה של מחרוזת בקידוד UTF-8. הוא פועל כמו פוינטר לנתוני המחרוזת, יחד עם אורך. כך אפשר לעבוד עם חלקים ממחרוץ בלי להעתיק אותו. בעיה מס' 42241188
כאן מפורטות רק כמה מהנקודות העיקריות. רשימת ההצהרות המלאה
מה חדש ב-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