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

François Beaufort
François Beaufort

תאריך פרסום: 7 בינואר 2026

תוסף WGSL subgroup_id

התוסף לשפת WGSL‏ subgroup_id מאפשר לכם להשתמש בערכים המובנים החדשים הבאים בקבוצות עבודה כשהתוסף subgroups מופעל:

  • subgroup_id: מספק את המזהה של קבוצת המשנה של הפעלה בתוך קבוצת העבודה הנוכחית.
  • num_subgroups: מחזירה את מספר תתי-הקבוצות שקיימות בקבוצת העבודה.

בעבר, כדי ליצור אינדקס לזיכרון באמצעות מזהי הפעלה של תת-קבוצות, היה צריך לשחזר מזהה של תת-קבוצה (בדרך כלל באמצעות פעולות אטומיות) כדי למנוע חפיפה בגישה לזיכרון. עכשיו אפשר להשתמש ב-subgroup_id כדי למלא את החצי השני של המשוואה הזו. מכיוון שהפונקציונליות הזו עדיין לא זמינה ב-backend של D3D, היא מודמת שם. אפשר ליצור שוויון ל-local_invocation_index בתור subgroup_invocation_id + subgroup_size * subgroup_id. שימו לב שיכול להיות שיהיו מקרים שבהם תת-הקבוצות לא מלאות.

אפשר לזהות את התכונה של תוסף השפה באמצעות navigator.gpu.wgslLanguageFeatures. מומלץ להשתמש בהוראת requires כדי לציין את האפשרות לאי-ניידות באמצעות requires subgroup_id; בחלק העליון של קוד ה-WGSL shader. אפשר לעיין בדוגמה הבאה ובהצהרה על כוונה להשיק.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_id")) {
  throw new Error(`WGSL subgroup_id and num_subgroups built-in values are not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  requires subgroup_id;

  @compute @workgroup_size(64, 1, 1)
  fn main(@builtin(subgroup_id) subgroup_id : u32,
          @builtin(num_subgroups) num_subgroups : u32) {
    // TODO: Use subgroup_id and num_subgroups values.
  }`,
});

התוסף WGSL uniform_buffer_standard_layout

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

אפשר לזהות את התכונה של תוסף השפה באמצעות navigator.gpu.wgslLanguageFeatures. מומלץ להשתמש בהוראת requires כדי לציין את האפשרות לאי-ניידות באמצעות requires uniform_buffer_standard_layout; בחלק העליון של קוד ה-WGSL shader. אפשר לעיין בדוגמה הבאה ובהצהרה על כוונה להשיק.

if (!navigator.gpu.wgslLanguageFeatures.has("uniform_buffer_standard_layout")) {
  throw new Error(`WGSL uniform buffer standard layout is not available`);
}

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

const shaderModule = device.createShaderModule({ code: `
  requires uniform_buffer_standard_layout;

  struct S {
      x: f32
  }
  struct Uniforms {
      a: S,
      b: f32
      // b is at offset 4. Without standard layout, alignment rules would
      // force b to be at offset 16 (or a multiple of 16), and you would have
      // to add extra fields or use an @align attribute.
  }

  @group(0) @binding(0) var<uniform> u: Uniforms;

  @fragment fn fs_main() -> @location(0) vec4<f32> {
      return vec4<f32>(u.a.x);
  }`,
});

‫WebGPU ב-Linux

צוות Chrome משיק בזהירות את WebGPU ל-Linux, ומתחיל בתמיכה במעבדי GPU של Intel Gen12+, אבל יש תוכנית ראשונית להרחיב את התמיכה הזו לעוד מכשירים (AMD,‏ NVIDIA). ההטמעה הזו משתמשת בארכיטקטורה שבה WebGPU משתמש ב-Vulkan, ושאר Chromium נשאר ב-OpenGL, תוך שימוש בנתיבי קוד טובים ומוכרים. מידע נוסף

שיפור המהירות של writeBuffer ו-writeTexture

בוצעו אופטימיזציות ב-writeBuffer() וב-writeTexture() ב-Chrome, וכתוצאה מכך הביצועים השתפרו עד פי 2 לעומת הגרסה הקודמת, בהתאם לגודל הנתונים שמועברים. השינוי הזה משפיע גם על כל המשתמשים בהטמעה של Dawn Wire. ראו בעיה מספר 441900745.

עדכונים של Dawn

צוות ה-GPU של Android פרסם את גרסת האלפא הראשונה של קישורי Kotlin ל-WebGPU ב-Android, שזמינים באמצעות Jetpack. חבילת androidx.webgpu מעניקה למפתחי Android גישה לממשק API מודרני של GPU באמצעות Kotlin, ועוקפת את הבעיות הישנות של OpenGL או את המורכבות של Vulkan – פיתוח מרתק לאקוסיסטם!

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

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