מה חדש ב-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 לאינטרנט. שימו לב שאם מפעילים את "texture-formats-tier2" כשיוצרים מכשיר, מופעל אוטומטית גם "texture-formats-tier1"."read-write"

אפשר לעיין בקטע הקוד הבא וברשומת ה-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...
}

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

אינדקס של פרימיטיב ב-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 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