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

François Beaufort
François Beaufort

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

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

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

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

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

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

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

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

הודעות שגיאה טובות יותר

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

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

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

הודעת השגיאה minBindingSize של האימות מדווחת עכשיו על הקבוצה והמספר של הקישור שנכשל באימות, וגם על מאגר הנתונים הזמני. ראו גיליון 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 או Instrument. מעכשיו, אפשר להפעיל ב-macOS חוויית ניפוי באגים טובה יותר לניפוי באגים. לעיון בגיליון dawn:1784

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

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

מתג ניפוי הבאגים dump_shaders מאפשר לרשום ביומן תוכנות הצללה (shader) של WGSL ורכיבי הצללה מתורגמים לקצה העורפי. מעכשיו, אם מפעילים את האפשרות לניפוי באגים, ה-HLSL ייכשל אם ייכשל בהידור. לעיון בגיליון 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);

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

אפשר ליצור קבצים מצורפים שמאפשרים לפעולות העברה של רינדור להישאר בזיכרון של כרטיסי המידע, וכך להימנע מתנועת 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 מאפשרת לאחזר יחסי תלות של שחר באמצעות סקריפט Python שקורא קובצי DEPS, במקום לדרוש התקנה של depot_tools בכל הפרויקטים שתלויים בו. ראו שינוי 131750.

מה חדש ב-WebGPU

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

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