מה' חדש ב-WebGPU (Chrome126)

François Beaufort
François Beaufort

הגדלת המגבלה של maxTextureArrayLayers

כברירת מחדל, הערך המקסימלי המותר עבור העומק או ספירת השכבות של מרקם דו-ממדי הוא 256. עכשיו אפשר לבקש עד 2048 באמצעות המגבלה maxTextureArrayLayers כשהיא נתמכת. בדוגמה הבאה אפשר לראות את הבעיה 42241514.

const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxTextureArrayLayers < 30) {
  // When the desired limit isn't supported, take action to either fall back to
  // a code path that does not require the higher limit or notify the user that
  // their device does not meet minimum requirements.
}

// Request highest limit of max texture array layers attributes.
const device = await adapter.requestDevice({
  requiredLimits: { maxTextureArrayLayers: 2048 }
});

אופטימיזציה של העלאת מאגר נתונים זמני לקצה העורפי של Vulkan

נתיב מהיר זמין עכשיו כשמפעילים את השיטה writeBuffer() של GPUQueue עבור הקצה העורפי של Vulkan. ניתן עכשיו לכתוב את הנתונים ישירות למאגר היעד, ללא צורך בעותק נוסף ובסנכרון. האופטימיזציה הזו מצמצמת את תנועת הזיכרון הדרושה להעלאת נתונים ל-GPU.

כדי לבצע אופטימיזציה של הנתיב המהיר, צריך שהזיכרון של המאגר הזמני יהיה גלוי למארח וללא פעולות GPU בהמתנה. לעיון בבעיה 42242084.

שיפורים בזמן ההידור של הצללית

צוות Chrome משפר את היעילות של Tint, המהדר של שפת ההצללה של WebGPU. בשלב זה, הגוון משנה את עץ התחביר המופשט של קוד ההצללה (AST) מספר פעמים לפני יצירת קוד מכונה – תהליך שדורש משאבים רבים בפלטפורמות מסוימות. כדי לבצע את האופטימיזציה הזו, אנחנו מוסיפים ייצוג ביניים (IR) חדש, וגם קצוות עורפיים בעיצוב מחודש שמוגדר בו. השינוי הזה נועד להאיץ את הקומפילציה של תוכנת הצללה (shader).

ביצירת צינור עיבוד נתונים מתבצע המרה של WGSL ל-SPIR-V באמצעות מהדר Tint, ולאחר מכן ל-ISA באמצעות המהדר של מנהל ההתקן.
עיבוד של יצירת צינור עיבוד נתונים ב-ChromeOS.

השיפורים האלה, שכבר זמינים ב-Android, מרחיבים בהדרגה את השימוש במכשירי ChromeOS שתומכים ב-WebGPU עם הקצה העורפי Vulkan. לעיון בבעיה 42250751.

מאגרי הפקודות שנשלחו חייבים להיות ייחודיים

כל GPUCommandBuffer שנשלח אל GPUQueue באמצעות השיטה submit() חייב להיות ייחודי, אחרת תיווצר שגיאת אימות. זה היה באג במפרט. לעיון בבעיה 42241492.

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const commandEncoder = device.createCommandEncoder();
const commandBuffer = commandEncoder.finish();

device.queue.submit([commandBuffer, commandBuffer]);
// ⚠️ Validation fails because command buffers are not unique.

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

ה-wrapper של C++ webgpu_cpp.h מיועד כעת לכותרת בלבד, והופך את השימוש בו לפשוט יותר ומאפשר שילוב קל יותר עם wrappers חלופיים של C++. יש לעיין בבעיה 40195122.

ה-webgpu.h C API לא חושף יותר את הרעיון של אובייקטים של Swapchain. השינוי הזה מתבצע כדי להתאים בצורה מדויקת ל-JavaScript API. ההגדרה הפנימית מתבצעת עכשיו באמצעות השיטה Configure() של אובייקט wgpu::Surface החדש, שכפופה לשינויים עתידיים. אתה יכול לראות דוגמה במסמכי התיעוד בנושא בניית אפליקציה באמצעות WebGPU. לעיון בבעיה 42241264.

כדאי לעיין ברשימת ההתחייבויות המקיפה.

מה חדש ב-WebGPU

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

גרסה 126 של Chrome

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