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

François Beaufort
François Beaufort

פורסם: 26 במרץ 2025

אפשר ליצור פריסת צינור עם פריסת קבוצת איגוד null

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

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

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.

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

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

המבנים של WGPURequiredLimits ו-WGPUSupportedLimits שוטחו ל-WGPULimits. ראו בעיה 374263404.

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

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

המשתמשים subgroupMinSize ו-subgroupMaxSize נוספו למבנה WGPUAdapterInfo. ראו webgpu-headers PR.

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

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

מה חדש ב-WebGPU

רשימה של כל הנושאים שמופיעים בסדרת המאמרים מה חדש ב-WebGPU.

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