מה'חדש ב-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 התכונות הניסיוניות של שורת הפקודה. מידע נוסף

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

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

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

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

אם משתמשים במקש depth ב-GPUExtend3DDict, מוצגת אזהרה ב-DevTools Console כי המקש הנכון הוא depthOrArrayLayers. מידע נוסף

אזהרה מוצגת גם אם בGPUBlendComponent יש שילוב של חברים עם הרשאה מפורשת וחברים עם הרשאת ברירת מחדל. מידע נוסף

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

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

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

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

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

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

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

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

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

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

עדכונים של Dawn

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

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

// 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. מידע נוסף

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 149-150

‫Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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