מה'חדש ב-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. מידע נוסף

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

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

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

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

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

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

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

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

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

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

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

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

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

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

אתם יכולים ליצור קבצים מצורפים שיאפשרו לפעולות של העברת רנדור להישאר בזיכרון של ה-tile, וכך למנוע תנועה ב-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

רשימה של כל הנושאים שמופיעים בסדרת המאמרים What's New in WebGPU.

‫Chrome 155-156

‫Chrome 153-154

‫Chrome 151-152

‫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