מה חדש ב-WebGPU (Chrome125)

François Beaufort
François Beaufort

יכול להיות שמספר התכונות של WebGPU נראה לכם מצומצם הפעם, אבל בקרוב נציג כמה שיפורים משמעותיים. גרסאות עתידיות יכללו תכונות כמו שיפורים במהירות הידור של שגיאות, ושינויים במודל האסינכרוני של ההטמעה באמצעות WGPUFuture.

קבוצות משנה (תכונה בפיתוח)

התכונה 'קבוצות משנה' מאפשרת לבצע עיבוד מקבילי ברמת SIMD, ומאפשרת לשרשורים בתוך קבוצה לתקשר ולבצע פעולות מתמטיות קולקטיביות (לדוגמה, חישוב הסכום של 16 מספרים). כך אפשר לשתף נתונים בצורה יעילה מאוד בין שרשורים שונים.

ממשקי ה-API המודרניים של GPU תומכים בפעולות של קבוצות משנה, אבל פרטי השמות וההטמעה משתנים. צוות Chrome זיהה את הנקודות המשותפות ועכשיו הוא פועל כדי להפוך את התכונה הזו לתקנית. כדאי לעיין בהצעה ולהוסיף תגובה אם יש לכם שאלות.

יש הטמעה מינימלית ולא סטנדרטית של קבוצות משנה מאחורי הדגל 'תכונות ניסיוניות של פלטפורמת האינטרנט' ב-chrome://flags/#enable-experimental-web-platform-features, כדי שמפתחים יוכלו לנסות את התכונה ולשתף משוב, מאחר שהיתרונות בפועל עדיין לא הוכחו בהקשר של WebGPU.

כשהתכונה "chromium-experimental-subgroups" זמינה ב-GPUAdapter, צריך לבקש GPUDevice עם התכונה הזו כדי לקבל תמיכה בקבוצות משנה ניסיוניות ב-WGSL ולבדוק את המגבלות של minSubgroupSize ו-maxSubgroupSize.

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

  • subgroup_invocation_id: ערך מובנה של האינדקס של השרשור בתוך אותה תת-קבוצה.
  • subgroup_size: ערך מובנה לגישה לגודל של תת-קבוצה.
  • subgroupBallot(value): מחזירה קבוצה של שדות ביט, שבהם הביט התואם ל-subgroup_invocation_id הוא 1 אם value נכון לקריאה הפעילה הזו, ו-0 במקרים אחרים.
  • subgroupBroadcast(value, id): המערכת משדרת את הערך של value מהקריאה עם subgroup_invocation_id שתואם ל-id לכל הקריאות בתוך אותה קבוצת משנה. הערה: id חייב להיות קבוע בזמן הידור.

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

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

רינדור של פרוסה של טקסטורה תלת-ממדית

עכשיו אפשר לבצע עיבוד ישירות לפרוסות של טקסטורות תלת-ממדיות במעברי עיבוד, ולהרחיב את היכולות מעבר לעיבוד טקסטורות דו-ממדיות נפוצות, באמצעות המאפיין החדש depthSlice ב-GPURenderPassColorAttachment. התוספת הזו מאפשרת, למשל, ליצור סצנות ואפקטים מבוססי-ווקסלים על ידי רינדור ישירות למקאמים של טקסטורות תלת-ממדיות. בעיה dawn:1020

עדכונים של Dawn

רשימת ההצהרות המלאה

מה חדש ב-WebGPU

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

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