מה חדש ב-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: 'תמיכה לא בטוחה ב-WebGPU', 'תכונות למפתחים של WebGPU' ו'הפעלת שורת הפקודה במכשירים ללא הרשאת root'.
  2. מפעילים את ניפוי הבאגים ב-USB במכשיר Android.
  3. מחברים את מכשיר Android לתחנת העבודה, מריצים את הפקודה adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' כדי להעדיף את הקצה העורפי של OpenGL ES על פני Vulkan ומפעילים מחדש את Chrome.

מאפיין המידע של 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(), המקור data ב-writeBuffer() והמקור data Pin writeTexture(). בעיה מס' 339049388

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

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

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

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

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

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

מה חדש ב-WebGPU

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

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