מה'חדש ב-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. לעיון בבעיה בזריחה:1705.

קבל GPU נפרד כברירת מחדל כאשר מחובר לחשמל

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

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

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

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

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

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

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

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

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

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

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

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

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

המתג של dump_shaders לניפוי באגים מאפשר לרשום ביומן ההצללות של WGSL והצללות העורפי מתורגמות. מעתה ואילך, כשתפעילו אותו לצורך ניפוי באגים, ה-HLSL יימחק אם הידור ייכשל. להצגת השחר:1681

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

לא הוגדר מאגר נתונים זמני של קודקוד

העברה של nullptr במקום wgpu::Buffer ל-SetVertexBuffer() ב-wgpu::RenderPassEncoder או ב-wgpu::RenderBundleEncoder מאפשרת לבטל את ההגדרה של מאגר נתונים זמני שהוגדר בעבר ביחידת קיבולת (Slot) נתונה. לעיון בעלות השחר: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

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

מה חדש ב-WebGPU

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

Chrome 125

Chrome 124

Chrome 123

גרסה 122 של Chrome

גרסה 121 של Chrome

Chrome 120

גרסה 119 של Chrome

גרסה 118 של Chrome

גרסה 117 של Chrome

גרסה 116 של Chrome

Chrome 115

Chrome 114

גרסה 113 של Chrome