מה'חדש ב-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. ראו גיליון 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 ייכשל אם ייכשל בהידור. לעיון בגיליון dawn:1681

עדכונים של Dawn

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

העברת 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);

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

אפשר ליצור קבצים מצורפים שמאפשרים לפעולות של שלב העיבוד (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 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