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

François Beaufort
François Beaufort

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

תוסף WGSL subgroup_uniformity

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

אפשר לזהות את התכונה של התוסף הזה לשפה באמצעות navigator.gpu.wgslLanguageFeatures. אפשר לעיין בדוגמה הבאה ובכוונה להשיק.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_uniformity")) {
  throw new Error(`WGSL subgroup uniformity is 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 s<ubgroups;
  
  @gro>up(0) @binding(0) varstorage, read_write non_uniform: i32;

  fn main() {
    if (non_uniform == 42) {
      _ = subgroupElect();
    }
  }`,
}); // WGSL error: subgroupElect must only be called from subgroup uniform control flow.

מיפוי ניסיוני של מאגרים זמניים סינכרוניים בתהליכי Worker

כדי לבדוק דרכים אפשריות לצמצום החיכוך בין WebGPU לבין קוד האפליקציה, צוות Chrome בודק מיפוי סינכרוני של מאגרים בתוך workers. כחלק מהמאמץ הזה, יצרנו אב-טיפוס של שיטה ניסיונית חדשה mapSync() לGPUBuffer. השיטה הזו, שמוגבלת לעובדים, פועלת באופן דומה ל-mapAsync().

התכונה הזו ניסיונית, והמשוב שלכם חשוב לנו כדי לקבוע אם נציע אותה לתקנון. כדי לנסות את התכונה, מפעילים את Chrome באמצעות המתג --enable-features=WebGPUMapSyncOnWorkers ושולחים משוב על התועלת וההשפעה שלה. כדי להתחיל, אפשר לעיין בקטע הקוד הבא.

// Create a GPU buffer.
const buffer = device.createBuffer({
  size: 42,
  usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ,
});

// Map buffer synchronously when possible.
if ("mapSync" in GPUBuffer.prototype) {
  buffer.mapSync(GPUMapMode.READ);
} else {
  // Awaiting allows other code to run, which can cause application logic issues.
  await buffer.mapAsync(GPUMapMode.READ);
}

עדכונים של Dawn

התכונה wgpu::FeatureName::R8UnormStorage לא זמינה יותר. הוא הוחלף ב-wgpu::FeatureName::TextureFormatTier1, שמעכשיו מחליף אותו. מידע נוסף

התכונה wgpu::FeatureName::Snorm16TextureFormats הוסרה. היכולות שלו, למעט Resolve, נכללות עכשיו ברובן ב-wgpu::FeatureName::TextureFormatsTier1. מידע נוסף

גרסאות ליליות של קבצים בינאריים (בנוסף ל-Emdawnwebgpu) נוצרות עכשיו ב-GitHub וזמינות ב-google/dawn releases. הם מסופקים כשירות 'במידת האפשר' ולא חתומים או מובטחים על ידי Google או צוות Dawn.

נוספה תמיכה ב-wgpu::ExternalTexture ל-Emdawnwebgpu. שימו לב שאפשר לייבא אותו רק מקוד JavaScript (לדוגמה, EM_ASM), כי אי אפשר ליצור אותו ב-C/C++ בגלל הדרישה לאובייקט JavaScript כמו HTMLVideoElement או VideoFrame. דוגמאות קוד אפשר לראות בבעיה מספר 462477379 וב-SpotTests.cpp.

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

מה חדש ב-WebGPU

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

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