מה חדש ב-WebGPU (Chrome125)

François Beaufort
François Beaufort

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

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

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

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

יש הטמעה מינימלית ולא סטנדרטית של קבוצות משנה מאחורי הדגל Experimental Web Platform Features (תכונות ניסיוניות של פלטפורמת האינטרנט) בכתובת 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 הוא true עבור הקריאה הפעילה הזו, אחרת היא 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().
  }`,
});

רינדור לפרוסה (slice) של טקסטורה תלת ממדית

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

עדכונים של Dawn

רשימה מלאה של קומיטים

מה חדש ב-WebGPU

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

‫Chrome 149-150

‫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