מה חדש ב-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 בנוסף לכל הטמעה של webgpu.h, במקום להיות מוגבלים לטעם של Dawn באמצעות webgpu_upstream_cpp_headers חדש. מידע נוסף

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

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

מה חדש ב-WebGPU

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

‫Chrome 155-156

‫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