מה חדש ב-WebGPU (Chrome125)

François Beaufort
François Beaufort

יכול להיות שמספר התכונות של WebGPU ייראה דליל הפעם, אבל כמה שיפורים משמעותיים כבר בדרך! גרסאות עתידיות יכללו תכונות כמו שיפורים במהירות ההידור של shader ושינויים במודל האסינכרוני של ההטמעה באמצעות 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 הוא 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().
  }`,
});

Render to slice of 3D texture

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

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

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

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