מה חדש ב-WebGPU‏ (Chrome 142)

François Beaufort
François Beaufort

תאריך פרסום: 22 באוקטובר 2025

יכולות התמיכה בפורמט טקסטורה הורחבו

תכונת ה-GPU החדשה texture-formats-tier1 מאפשרת למפתחים להעביר תוכן קיים לאינטרנט בלי לכתוב אותו מחדש כדי להתאים אותו ליכולות הנמוכות יותר של WebGPU. הוא תומך בפורמטים חדשים של טקסטורות "r16unorm", "r16snorm", "rg16unorm", "rg16snorm", "rgba16unorm" ו-"rgba16snorm" עם יכולות של צירוף רנדר, מיזוג ודגימה מרובה, וגישה לטקסטורות אחסון "read-only" או "write-only". הוא גם מאפשר שימוש בפורמטים קיימים של טקסטורות "r8snorm", ‏ "rg8snorm", ‏ "rgba8snorm" עם יכולות של צירוף לרינדור, מיזוג, דגימה מרובה ופתרון. אפשר להשתמש גם בפורמטים נוספים של טקסטורה עם גישה לטקסטורה של אחסון "read-only" או "write-only".

תכונת ה-GPU החדשה texture-formats-tier2 מאפשרת גישה לטקסטורות של אחסון בפורמטים ספציפיים, וזה חיוני לפרויקטים כמו העברה של Unreal Engine לאינטרנט."read-write" שימו לב: אם מפעילים את "texture-formats-tier2" כשיוצרים את המכשיר, "texture-formats-tier1" מופעל באופן אוטומטי.

אפשר לעיין בקטע הקוד הבא וברשומת ה-chromestatus.

const adapter = await navigator.gpu.requestAdapter();

const requiredFeatures = [];
if (adapter.features.has("texture-format-tier1")) {
  requiredFeatures.push("texture-format-tier1");
}
if (adapter.features.has("texture-format-tier2")) {
  requiredFeatures.push("texture-format-tier2");
}
const device = await adapter.requestDevice({ requiredFeatures });

// Later on, when dealing with "r8unorm" texture formats for example...
if (device.features.has("texture-format-tier2")) {
  // Use "read-write" storage texture access...
} else if (device.features.has("texture-format-tier1")) {
  // Use "read-only" or "write-only" storage texture access...
} else {
  // Fallback: Use another texture format...
}

תודה רבה לאנשי אינטל על העבודה שלהם!

אינדקס של פרימיטיב ב-WGSL

primitive_index הוא ערך מובנה ב-WGSL שמזהה באופן ייחודי את הפרימיטיב הנוכחי (לדוגמה, נקודה, קו או משולש) שעובר עיבוד על ידי shader של שבר. הוא מתחיל ב-0, גדל ב-1 אחרי שכל פרימיטיב מעובד, ומתאפס ל-0 בין כל מופע שמצויר.

כשהתכונה "primitive-index" זמינה ב-GPUAdapter, צריך לבקש GPUDevice עם התכונה הזו כדי לקבל תמיכה באינדקסים פרימיטיביים ב-WGSL, ולהפעיל את התוסף הזה באופן מפורש בקוד WGSL באמצעות enable primitive_index;. אחרי ההפעלה, אפשר להשתמש בערך השלם המובנה primitive_index ב-fragment shader כדי לגשת לנתונים של כל פרימיטיב או לבצע לוגיקה שמשתנה עבור כל צורה גיאומטרית נפרדת שעוברת עיבוד, למשל.

בקטע הקוד הבא מוצג shader של פרגמנט שמעבד את הפרימיטיב השני באדום ואת כל שאר הפרימיטיבים בכחול.

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

const fragmentShaderModule = device.createShaderModule({ code: `
  enable primitive_index;

  @fragment
  fn main(@builtin(primitive_index) i : u32) -> @location(0) vec4f {
    if (i == 1) {
      return vec4f(1, 0, 0, 1);
    }
    return vec4f(0, 1, 0, 1);
  }`,
});
// Send the appropriate commands to the GPU...

כדי לראות עוד דוגמאות, אפשר לעיין בדוגמה של בחירת פרימיטיבים וברשומת ה-chromestatus.

המשולשים במודל התלת-ממדי של קנקן התה צבועים על סמך ערכי האינדקס הפרימיטיביים שלהם.
הדוגמה Primitive Picking במצב primitive indexes.

עדכונים של Dawn

השתנה ערך ברירת המחדל של המשתנה DAWN_BUILD_MONOLITHIC_LIBRARY CMake שמשמש לטיפול בסוג של ספרייה מונוליטית לבנייה, מ-OFF ל-STATIC, כך שכברירת מחדל ייווצרו הקבצים libwebgpu*.

התבנית Dawn מטפלת עכשיו בצורה נכונה בהגדרת ברירת מחדל של wgpu::PresentMode::Undefined כשמגדירים wgpu::Surface. מידע נוסף

המידע הזה כולל רק נקודות עיקריות. רשימה מלאה של קומיטים

מה חדש ב-WebGPU

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

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