מה חדש ב-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],
});

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

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

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: המגבלה הזו כבר משמשת למטרה דומה, היא קובעת את כמות הנתונים המועברים בין שלבי ה-shader.
  • אי-התאמות קלות: יש הבדלים קלים באופן שבו שתי המגבלות מחושבות, אבל ההבדלים האלה הם קלים וניתן לנהל אותם ביעילות במסגרת המגבלה maxInterStageShaderVariables.
  • פשטות: הסרת maxInterStageShaderComponents משפרת את ממשק ה-shader ומפחיתה את המורכבות עבור המפתחים. במקום לנהל שתי מגבלות נפרדות עם הבדלים עדינים, הם יכולים להתמקד במגבלה maxInterStageShaderVariables שמתאימה יותר לשם שלה ומקיפה יותר.

ראו כוונה להסרה ובעיה 364338810.

עדכונים בנושא Dawn

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

המבנים WGPURequiredLimits ו-WGPUSupportedLimits פורסים ל-WGPULimits. בעיה 374263404

השמות של המבנים הבאים השתנו. בעיה מס' 42240793

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

המאפיינים subgroupMinSize ו-subgroupMaxSize נוספו למבנה WGPUAdapterInfo. בקטע webgpu-headers PR

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

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

מה חדש ב-WebGPU

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

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