الميزات الجديدة في 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 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