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

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

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

כשמשתמשים ב-GPUCommandEncoder if finish() שכבר הופעלה, מוצגת עכשיו הודעת שגיאה משופרת. מידע נוסף

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

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

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

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

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

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

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