الميزات الجديدة في WebGPU (الإصداران 153 و154 من Chrome)

François Beaufort
François Beaufort

تاريخ النشر: 15 سبتمبر 2026

إضافة buffer_view إلى WGSL

يتيح امتداد لغة WGSL buffer_view تفسير بيانات متغيّر موحّد أو متغيّر تخزين أو متغيّر مجموعة عمل على أنّها أنواع مختلفة متعددة. ويوفّر هذا النمط مجموعة واسعة من الاستخدامات، بدءًا من الاستخدامات التقليدية لتغيير نوع البيانات، وصولاً إلى تقسيم متغير إلى عدة متغيرات منطقية.

للحفاظ على الأمان وتسهيل التنفيذ، لا يمكن الوصول إلى الأنواع المعاد تفسيرها إلا باستخدام الدوال المضمّنة التالية:

  • تفسّر bufferView<T>() الذاكرة عند إزاحة بايت معيّنة كمؤشر إلى النوع T.
  • تنشئ bufferArrayView<T>() مؤشر صفيف محدودًا مع عدد عناصر صريح.
  • تعرض bufferLength() حجم المخزن المؤقت بالبايت.

يمكن رصد توفّر إضافة اللغة هذه في JavaScript باستخدام navigator.gpu.wgslLanguageFeatures. يُنصح باستخدام توجيه requires للإشارة إلى احتمال عدم إمكانية نقل الرمز البرمجي مع requires buffer_view في أعلى رمز تظليل 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.

إضافة swizzle_assignment إلى WGSL

استجابةً لأحد الميزات الأكثر طلبًا من المنتدى، يتيح لك امتداد WGSL swizzle_assignment الكتابة مباشرةً إلى عمليات تبديل ترتيب المتجهات، ما يتيح لك تعديل مكوّنات متعددة في عبارة واحدة. يقلّل هذا التنسيق بشكل كبير من الرمز النموذجي ويحسّن من إمكانية قراءة أداة التظليل، مع جعل WGSL متوافقًا مع لغات التظليل الأخرى.

يمكن رصد توفّر إضافة اللغة هذه في JavaScript باستخدام navigator.gpu.wgslLanguageFeatures. يُنصح باستخدام توجيه requires للإشارة إلى احتمال عدم إمكانية نقل الرمز البرمجي مع requires swizzle_assignment في أعلى رمز تظليل 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 بشكل صحيح بـ navigator.gpu.wgslLanguageFeatures (مثل texture_formats_tier1) في JavaScript، على الرغم من أنّها متوافقة مع رمز WGSL. تم الآن حلّ مشكلة الربط هذه. يمكنك الاطّلاع على Chromium CL 8159562.

يتم الآن تفعيل إضافة اللغة subgroups تلقائيًا عند تفعيل subgroup_size_control في WGSL. راجِع المشكلة dawn:545285663.

تعديلات الفجر

تتيح لك الميزة التجريبية الجديدة wgpu::FeatureName::BufferMapWriteExtendedUsages إنشاء مخزن مؤقت باستخدام wgpu::BufferUsage::MapWrite مع أي wgpu::BufferUsage آخر، باستثناء wgpu::BufferUsage::MapRead، للكتابة مباشرةً في مخزن مؤقت قابل للتخطيط ويمكن استخدامه أيضًا في وحدة معالجة الرسومات، ما يؤدي إلى إلغاء المخزن المؤقت المرحلي والنسخة الإضافية في الخلفيات المستندة إلى Vulkan وD3D12. لمزيد من المعلومات، يُرجى الاطّلاع على الاستخدامات الموسّعة لكتابة خريطة المخزن المؤقت والمشكلة dawn:386255678.

يمكنك الآن استخدام روابط webgpu_cpp.h فوق أي عملية تنفيذ webgpu.h بدلاً من ربطها بنسخة Dawn من خلال استخدام webgpu_upstream_cpp_headers الجديدة. يمكنك الاطّلاع على المشكلة رقم 596 في webgpu-headers.

يتطلّب تطبيق Dawn الآن الإصدار 13.0 من نظام التشغيل macOS أو إصدارًا أحدث. راجِع Dawn CL 334415.

هذا يشمل بعض النقاط الرئيسية فقط. يمكنك الاطّلاع على قائمة عمليات الدمج الشاملة لمزيد من التفاصيل.

الميزات الجديدة في WebGPU

قائمة بكل ما تم تناوله في سلسلة الميزات الجديدة في 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