מה חדש ב-WebGPU (Chrome {/7}127)

François Beaufort
François Beaufort

תמיכה ניסיונית ב-OpenGL ES ב-Android

עכשיו אפשר לגשת אל GPUAdapter מהקצה העורפי של OpenGL ES כשמבקשים את מצב התאימות הניסיוני של WebGPU ב-Chrome ל-Android. זה שימושי במיוחד למכשירי Android שאין בהם תמיכה ב-Vulkan 1.1 ומעלה. אפשר לעיין בדוגמה הבאה ובבעיה dawn:1545.

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
בדף הדוח של WebGPU מוצגים פרטים של GPUAdapter מהקצה העורפי של OpenGL ES במכשיר Android.
פרטי מתאם OpenGL ES בכתובת webgpureport.org

התכונה הזו עדיין ניסיונית, ולכן צריך לבצע את השלבים הבאים:

  1. מפעילים את הדגלים הבאים ב-Chrome: Unsafe WebGPU Support (תמיכה לא בטוחה ב-WebGPU),‏ WebGPU Developer Features (תכונות למפתחים ב-WebGPU) ו-Enable command line on non-rooted devices (הפעלת שורת פקודה במכשירים ללא גישת Root).
  2. מפעילים את ניפוי הבאגים ב-USB במכשיר Android.
  3. מחברים את מכשיר Android לתחנת העבודה, מריצים את adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' כדי להעדיף את קצה העורף של OpenGL ES על פני Vulkan ומפעילים מחדש את Chrome.

המאפיין info של GPUAdapter

עכשיו אפשר לקבל מידע מזהה על מתאם באופן סינכרוני באמצעות המאפיין info של GPUAdapter. בעבר, הדרך היחידה לקבל מידע על המתאם הייתה באמצעות קריאה לשיטה האסינכרונית requestAdapterInfo() של GPUAdapter. עם זאת, השיטה requestAdapterInfo() הוסרה ממפרט WebGPU ותוסר מ-Chrome בהמשך השנה כדי לתת למפתחי אתרים מספיק זמן לבצע את המעבר הנדרש. אפשר לעיין בדוגמה הבאה, סטטוס Chrome ובעיה מספר 335383516.

const adapter = await navigator.gpu.requestAdapter();
const info = adapter.info;

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

שיפורים ביכולת הפעולה ההדדית של WebAssembly

כדי להתאים את המערכת למעבר של ערימות WebAssembly ישירות אל WebGPU, הגדלים של ארגומנטי BufferSource הבאים כבר לא מוגבלים ל-2GB: ‏ dynamicOffsetsData ב-setBindGroup(),‏ source data ב-writeBuffer() ו-source data Pin writeTexture(). מידע נוסף

שיפור השגיאות במקודד הפקודות

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

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

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

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

עדכונים של Dawn

‫C API‏ webgpu.h כבר לא חושף את wgpuSurfaceGetPreferredFormat(), המקבילה ב-C של wgpu::Surface::GetPreferredFormat() ב-Dawn. במקום זאת, צריך להשתמש ב-wgpu::Surface::GetCapabilities() כדי לקבל את רשימת הפורמטים הנתמכים, ואז להשתמש ב-formats[0] כדי לקבל את פורמט הטקסטורה המועדף עבור המשטח הזה. בינתיים, קריאה ל-wgpu::Surface::GetPreferredFormat() מפיקה אזהרה על הוצאה משימוש. ראו issue 290.

עכשיו אפשר לראות את השימושים הנתמכים בטקסטורה של משטח דרך wgpu::SurfaceCapabilities::usages כשקוראים ל-wgpu::Surface::GetCapabilities(). הם תמיד צפויים לכלול את wgpu::TextureUsage::RenderAttachment. ראו בעיה מספר 301.

המידע הזה כולל רק נקודות עיקריות. רשימה מלאה של קומיטים

מה חדש ב-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