מה חדש ב-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

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

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

מה חדש ב-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