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

François Beaufort
François Beaufort

תאריך פרסום: 15 בספטמבר 2026

תוסף buffer_view של WGSL

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

מטעמי בטיחות ופשטות ההטמעה, אפשר לגשת לסוגים שפורשו מחדש רק באמצעות הפונקציות המובנות הבאות:

  • bufferView<T>() מפרש את הזיכרון בהיסט ספציפי של בייט כפוינטר לסוג T.
  • bufferArrayView<T>() יוצרת מצביע למערך מוגבל עם מספר אלמנטים מפורש.
  • bufferLength() מחזירה את גודל הבאפר בבייטים.

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

requires buffer_view;

//  +-------------------+-----------------------------+----------------------------+
//  | Byte 0 .. 3       | Byte 4 .. (4 + N - 1)       | Byte (4 + N) .. End        |
//  +-------------------+-----------------------------+----------------------------+
//  | indices_size (u32)| indices (array<u32, count>) | vertices (array<f32>)      |
//  +-------------------+-----------------------------+----------------------------+
@group(0) @binding(0) var<storage> indices_and_vertices : buffer;

fn unpack_and_process_geometry() {
  let indices_size = *bufferView<u32>(&indices_and_vertices, 0);

  let indices = bufferArrayView<array<u32>>(&indices_and_vertices, 4, indices_size);
  let vertices = bufferView<array<f32>>(&indices_and_vertices, indices_size + 4);
  ...
}

אפשר גם לעיין בהצעה לגבי תצוגת מאגר לפרטים נוספים, ולנסות את הדוגמה של Wireframe WebGPU.

תוסף WGSL swizzle_assignment

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

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

if (!navigator.gpu.wgslLanguageFeatures.has("swizzle_assignment")) {
  throw new Error(`WGSL swizzle assignment is not available`);
}

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

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

  @vertex
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
    var position = vec4f(0.0, 0.0, 0.0, 1.0);
    position.xy = vec2f(10.0, 20.0); // Swizzle assignment

    return position;
  }`,
});

עדכונים בתוספים של WGSL

התוסף לשפה texture-formats-tier1, למרות שהוא נתמך בקוד WGSL, לא מופה כראוי ל-navigator.gpu.wgslLanguageFeatures (כ-texture_formats_tier1) ב-JavaScript. הבעיה הזו במיפוי נפתרה. ראו Chromium CL 8159562.

התוסף subgroups language מופעל עכשיו באופן אוטומטי כשמפעילים את subgroup_size_control ב-WGSL. מידע נוסף

עדכונים של Dawn

התכונה הניסיונית החדשה wgpu::FeatureName::BufferMapWriteExtendedUsages מאפשרת ליצור מאגר זמני עם wgpu::BufferUsage::MapWrite בשילוב עם כל wgpu::BufferUsage אחר, חוץ מ-wgpu::BufferUsage::MapRead, כדי לכתוב ישירות למאגר זמני שניתן למיפוי וגם לשימוש ב-GPU. כך אפשר להימנע משימוש במאגר זמני להעברה ומביצוע העתקה נוספת ב-Vulkan וב-D3D12 backends. מידע נוסף זמין במאמר Buffer Map Write Extended Usages ובבעיה dawn:386255678.

עכשיו אפשר להשתמש בwebgpu_cpp.h bindings בנוסף לכל הטמעה של webgpu.h, במקום להיות מוגבלים ל-flavor של Dawn, באמצעות webgpu_upstream_cpp_headers חדש. מידע נוסף

כדי להשתמש ב-Dawn, מעכשיו צריך macOS 13.0 ואילך. מידע נוסף

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

מה חדש ב-WebGPU

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

‫Chrome 153-154

‫Chrome 151-152

‫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