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

תודה רבה לאנשי 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_BUILD_MONOLITHIC_LIBRARY CMake שמשמש לטיפול בסוג של ספרייה מונוליטית לבנייה, מ-OFF ל-STATIC, כך שכברירת מחדל ייווצרו קבצי libwebgpu*.

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

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

מה חדש ב-WebGPU

רשימה של כל הנושאים שמופיעים בסדרה What's New in WebGPU.

‫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