מה חדש ב-WebGPU (גרסה 135 של Chrome)

François Beaufort
François Beaufort

תאריך פרסום: 26 במרץ 2025

אפשר ליצור פריסת פייפליין עם פריסת קבוצת כבילה null

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

לדוגמה, יכול להיות שתרצו ליצור פייפליין שמשתמש רק בפריסות של קבוצות קשירה 0 ו-2. אפשר להקצות את פריסת קבוצת הכריכה 1 לנתוני פרגמנט ואת פריסת קבוצת הכריכה 2 לנתוני קודקוד, ואז לבצע רינדור ללא הצללת פרגמנט. מידע נוסף

const bgl0 = myDevice.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = myDevice.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = myDevice.createBindGroupLayout({ entries: myVertexEntries });

// Create a pipeline layout that will be used to render without a fragment shader.
const myPipelineLayout = myDevice.createPipelineLayout({
  bindGroupLayouts: [bgl0, null, bgl2],
});

אפשר לתת לאזורי תצוגה לחרוג מגבולות יעדי הרינדור

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

const passEncoder = myCommandEncoder.beginRenderPass({
  colorAttachments: [
    {
      view: myColorTexture.createView(),
      loadOp: "clear",
      storeOp: "store",
    },
  ],
});

// Set a viewport that extends past the render target's bounds by 8 pixels
// in all directions.
passEncoder.setViewport(
  /*x=*/ -8,
  /*y=*/ -8,
  /*width=*/ myColorTexture.width + 16,
  /*height=*/ myColorTexture.height + 16,
  /*minDepth=*/ 0,
  /*maxDepth=*/ 1,
);

// Draw geometry and complete the render pass as usual.

גישה קלה יותר למצב התאימות הניסיוני ב-Android

הדגל chrome://flags/#enable-unsafe-webgpu לבדו מפעיל עכשיו את כל היכולות שנדרשות למצב התאימות הניסיוני של WebGPU ב-Android. במצב תאימות, אפשר לבקש GPUAdapter עם האפשרות featureLevel: "compatibility" ואפילו לקבל גישה לעורף של OpenGL ES במכשירים שאין בהם תמיכה ב-Vulkan. דוגמה ובעיה dawn:389876644.

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

הסרת המגבלה maxInterStageShaderComponents

כפי שהודענו בעבר, המגבלה maxInterStageShaderComponents הוסרה בגלל שילוב של גורמים:

  • יתירות עם maxInterStageShaderVariables: המגבלה הזו כבר משרתת מטרה דומה, והיא לשלוט בכמות הנתונים שמועברים בין שלבי ההצללה.
  • אי התאמות קלות: יש הבדלים קלים בדרך שבה מחושבות שתי המגבלות, אבל ההבדלים האלה קטנים ואפשר לנהל אותם ביעילות במסגרת המגבלה של maxInterStageShaderVariables.
  • פישוט: ההסרה של maxInterStageShaderComponents מייעלת את ממשק ה-shader ומפחיתה את המורכבות למפתחים. במקום לנהל שתי מגבלות נפרדות עם הבדלים קלים, הם יכולים להתמקד במגבלה המקיפה יותר שנקראת maxInterStageShaderVariables.

מידע נוסף זמין במאמר בנושא הודעה על כוונה להסיר תוכן ובבעיה מספר 364338810.

עדכונים של Dawn

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

המבנים של WGPURequiredLimits ו-WGPUSupportedLimits שוטחו ל-WGPULimits. מידע נוסף

השמות של המבנים הבאים שונו. מידע נוסף

  • האפשרות WGPUImageCopyBuffer נקראת WGPUTexelCopyBufferInfo עכשיו
  • האפשרות WGPUImageCopyTexture נקראת WGPUTexelCopyTextureInfo עכשיו
  • האפשרות WGPUTextureDataLayout נקראת WGPUTexelCopyBufferLayout עכשיו

המשתמשים subgroupMinSize ו-subgroupMaxSize נוספו למבנה WGPUAdapterInfo. מידע נוסף על בקשת משיכה של כותרות WebGPU

אפשר עכשיו לעקוב אחרי השימוש ב-Dawn API ב-Metal כשמריצים את התוכנית עם משתנה הסביבה DAWN_TRACE_FILE_BASE ששומר קובץ ‎ .gputrace שאפשר לטעון אותו מאוחר יותר ל-Metal Debugger של XCode. מידע נוסף זמין במאמר Debugging Dawn.

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

מה חדש ב-WebGPU

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

‫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