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

François Beaufort
François Beaufort

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

החבר wgslLanguageFeatures באובייקט GPU מציג את השמות של תוספות השפה הנתמכות ב-WGSL. תוספים נתמכים של שפות WGSL מופעלים באופן אוטומטי, לכן אין צורך לבקש אותם במפורש. הרשימה הזו ריקה כרגע, אבל צפויים להתווסף לה הרבה ערכים בעתיד (לדוגמה, do-while loops). אפשר לעיין בבעיה 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. issue dawn:1705

שימוש במעבדי GPU נפרדים כברירת מחדל בחשמל AC

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

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

אזהרות חדשות ב-DevTools

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

תופיע גם אזהרה אם ב-GPUBlendComponent יש שילוב של חברים עם הגדרת ברירת מחדל וחברים עם הגדרת תוכן בוטה. issue dawn:1785

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

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

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

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

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

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

הודעות השגיאה שמוחזרות על ידי השיטה mapAsync() באובייקט GPUBuffer שופרו כדי לעזור למפתחים לנפות באגים. דוגמה לדוח כזה מופיעה בהמשך, ואפשר למצוא דוגמה נוספת בבעיה 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 לניפוי באגים מאפשר להעביר תוויות של אובייקטים לקצה העורפי, כדי שניתן יהיה לראות אותן בכלים לניפוי באגים ספציפיים לפלטפורמה, כמו RenderDoc,‏ PIX או Instruments. מעכשיו, חוויית ניפוי הבאגים ב-macOS תהיה טובה יותר כשמפעילים אותה לניפוי באגים. ראו issue dawn:1784

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

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

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

עדכונים של Dawn

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

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

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

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

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

אפשר ליצור קבצים מצורפים שמאפשרים לפעולות של שלב העיבוד (render pass) להישאר בזיכרון המשבצות, וכך למנוע תנועה ב-VRAM ולמנוע את הקצאת ה-VRAM לתמונות הטקסטורה. לשם כך, צריך להגדיר את השימוש ב-wgpu::TextureUsage::TransientAttachment. התכונה הזו נתמכת רק ב-Metal וב-Vulkan. issue dawn: 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

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

מה חדש ב-WebGPU

רשימה של כל מה שנדון בסדרה מה חדש ב-WebGPU.

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