מה'חדש ב-WebGPU (Chrome {8/}115)

François Beaufort
François Beaufort

תוספי שפה נתמכים של WGSL

המאפיין wgslLanguageFeatures של האובייקט GPU מפרט את השמות של תוספי השפה הנתמכים ב-WGSL. תוספי שפה נתמכים של WGSL מופעלים באופן אוטומטי, ולכן אין צורך לבקש אותם במפורש. הרשימה הזו ריקה כרגע, אבל צפויות להופיע בה בעיות רבות בעתיד (לדוגמה, do-while loops). אפשר לעיין בissue dawn:1777.

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

תמיכה ניסיונית ב-Direct3D 11

צוות Chromium פועל להוספת תמיכה ב-WebGPU ל-Direct3D 11. עכשיו אפשר לבצע ניסויים מקומיים באמצעות הפעלת Chrome ב-Windows עם הדגלים של שורת הפקודה --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. מידע נוסף על בעיה dawn:1705

קבלת GPU נפרד כברירת מחדל בהפעלה באמצעות AC

במכשירי macOS עם שני מעבדי GPU, אם קוראים ל-requestAdapter() בלי האפשרות powerPreference, מעבד ה-GPU הנפרד מוחזר כשהמכשיר של המשתמש מחובר לחשמל. אחרת, מוחזר ה-GPU המובנה. שינוי 4499307

שיפור חוויית המפתחים

אזהרות חדשות בכלי הפיתוח

אם משתמשים במקש depth ב-GPUExtend3DDict, מוצגת אזהרה במסוף כלי הפיתוח, כי המקש הנכון הוא depthOrArrayLayers. מידע נוסף זמין בבעיה chromium:1440900.

התראה מופיעה גם אם בGPUBlendComponent יש חברים עם הגדרות בוטות וחברים עם הגדרות ברירת מחדל. מידע נוסף על בעיה dawn:1785

למרות ששליחות וציורים בגודל אפס הם תקינים, מפתחים מקבלים אזהרה כדי להימנע מהם ככל האפשר. לעיון בבעיה dawn:1786

הודעות שגיאה משופרות

הודעת שגיאה משופרת מוצגת עכשיו כשמשתמשים ב-GPUCommandEncoder if finish() כבר הופעל. מידע נוסף על בעיה dawn:1736

כששולחים מאגרי פקודות עם אובייקטים שהושמדו, התוויות של מאגרי הפקודות שנעשה בהם שימוש ב-submit() מוצגות עכשיו בהודעת השגיאה. מידע נוסף על בעיה dawn:1747

החלק הלא תקין במצב של תבנית העומק מצוין עכשיו בהודעת השגיאה במהלך אימות של depthStencil. מידע נוסף על בעיה dawn:1735

הודעת השגיאה של האימות minBindingSize כוללת עכשיו את הקבוצה ואת מספר הכריכה שנכשלו באימות, וגם את המאגר. מידע נוסף זמין במאמר בנושא בעיה dawn:1604.

הודעות השגיאה שמוחזרות על ידי השיטה mapAsync() באובייקט GPUBuffer שופרו כדי לעזור למפתחים בניפוי באגים. לדוגמה, issue chromium:1431622.

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

תוויות בכלי ניפוי באגים ב-macOS

המתג use_user_defined_labels_in_backend debug מאפשר להעביר תוויות של אובייקטים אל ה-backend כדי שיהיה אפשר לראות אותן בכלי ניפוי באגים ספציפיים לפלטפורמה, כמו RenderDoc, ‏ PIX או Instruments. מעכשיו, כשמפעילים ניפוי באגים ב-macOS, מקבלים חוויית ניפוי באגים משופרת. ראו issue dawn:1784

צילום מסך של אפליקציית Instruments ב-macOS עם תוויות בהתאמה אישית שמגיעות מ-WebGPU.
תוויות שהוגדרו על ידי המשתמש באפליקציית Instruments ב-macOS.

תיעוד HLSL אם ההידור נכשל

המתג dump_shaders debug מאפשר לכם לרשום ביומן תוכנות הצללה (shader) של WGSL שהוזנו ותוכנות הצללה (shader) של הקצה העורפי שתורגמו. מעכשיו, כשתפעילו את האפשרות הזו לצורך ניפוי באגים, קובץ ה-HLSL יישמר אם הקומפילציה תיכשל. ראו issue dawn:1681

עדכונים לגבי שעות השחר

ביטול ההגדרה של מאגר קודקודים

העברת nullptr במקום wgpu::Buffer אל SetVertexBuffer() ב-wgpu::RenderPassEncoder או ב-wgpu::RenderBundleEncoder מאפשרת לבטל את ההגדרה של מאגר קודקודים שהוגדר קודם במשבצת נתונה. לפרטים על בעיה dawn:1675

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

קבצים מצורפים זמניים

אפשר ליצור קבצים מצורפים שיאפשרו לפעולות של העברת רינדור להישאר בזיכרון של ה-Tile, וכך להימנע מתנועה של VRAM ואולי גם מהקצאת VRAM לטקסטורות, על ידי הגדרת השימוש ב-wgpu::TextureUsage::TransientAttachment. התכונה הזו נתמכת רק ב-Metal וב-Vulkan. למידע נוסף על הבעיה: 1695

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

בנייה ללא depot_tools

אפשרות חדשה של DAWN_FETCH_DEPENDENCIES CMake מאפשרת לאחזר תלות של Dawn באמצעות סקריפט Python שקורא קובצי DEPS, במקום לדרוש התקנה של depot_tools בכל הפרויקטים שתלויים בו. כאן אפשר לראות את השינוי 131750.

מה חדש ב-WebGPU

רשימה של כל הנושאים שמופיעים בסדרת המאמרים מה חדש ב-WebGPU.

Chrome 140

‫Chrome 139

‫Chrome 138

Chrome 137

Chrome 136

‫Chrome 135

‫Chrome 134

‫Chrome 133

‫Chrome 132

‫Chrome 131

‫Chrome 130

גרסה Chrome 129

‫Chrome 128

‫Chrome 127

‫Chrome 126

Chrome 125

‫Chrome 124

‫Chrome 123

‫Chrome 122

‫Chrome 121

‫Chrome 120

‫Chrome 119

‫Chrome 118

‫Chrome 117

Chrome 116

‫Chrome 115

‫Chrome 114

‫Chrome 113