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

François Beaufort
François Beaufort

Published: January 7, 2026

إضافة subgroup_id في لغة WGSL

تتيح لك إضافة subgroup_id في لغة WGSL استخدام القيم المضمّنة الجديدة التالية في مجموعات العمل عند تفعيل إضافة subgroups:

  • subgroup_id: يوفّر رقم تعريف المجموعة الفرعية للاستدعاء ضمن مجموعة العمل الحالية.
  • num_subgroups: يعرض عدد المجموعات الفرعية في مجموعة العمل.

في السابق، كان عليك إعادة إنشاء رقم تعريف المجموعة الفرعية (عادةً من خلال العمليات الذرية) لفهرسة الذاكرة باستخدام أرقام تعريف استدعاء المجموعة الفرعية لتجنُّب تداخل عمليات الوصول إلى الذاكرة. يمكنك الآن استخدام subgroup_id لملء النصف الآخر من هذه المعادلة. بما أنّ هذه الوظيفة غير متاحة بعد على واجهة D3D الخلفية، يتم محاكاتها هناك. من المفترض أن يكون من الآمن إنشاء معادلة لـ local_invocation_index على النحو التالي: subgroup_invocation_id + subgroup_size * subgroup_id. يُرجى العِلم أنّه قد تكون هناك حالات لا تكون فيها المجموعات الفرعية كاملة.

يمكن رصد هذه الإضافة في اللغة باستخدام navigator.gpu.wgslLanguageFeatures. ننصحك باستخدام توجيه `requires` للإشارة إلى احتمال عدم إمكانية نقل الرمز البرمجي باستخدام requires subgroup_id; في أعلى رمز تظليل WGSL. انظر المثال التالي والنية في طرحه.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_id")) {
  throw new Error(`WGSL subgroup_id and num_subgroups built-in values are 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 subgroups;
  requires subgroup_id;

  @compute @workgroup_size(64, 1, 1)
  fn main(@builtin(subgroup_id) subgroup_id : u32,
          @builtin(num_subgroups) num_subgroups : u32) {
    // TODO: Use subgroup_id and num_subgroups values.
  }`,
});

إضافة uniform_buffer_standard_layout في لغة WGSL

تتيح إضافة uniform_buffer_standard_layout في لغة WGSL استخدام مخازن البيانات الموحّدة لقيود تنسيق الذاكرة نفسها التي تستخدمها مخازن البيانات، ما يسهّل مشاركة هياكل البيانات في كلا النوعَين من المخازن. يعني ذلك أنّه لم يعُد مطلوبًا أن يكون لمخازن البيانات الموحّدة محاذاة بمقدار 16 بايت لعناصر الصفيف، أو أن يتم توسيع إزاحات الهيكل المتداخل إلى مضاعفات 16 بايت.

يمكن رصد هذه الإضافة في اللغة باستخدام navigator.gpu.wgslLanguageFeatures. ننصحك باستخدام توجيه `requires` للإشارة إلى احتمال عدم إمكانية نقل الرمز البرمجي باستخدام requires uniform_buffer_standard_layout; في أعلى رمز تظليل WGSL. انظر المثال التالي والنية في طرحه.

if (!navigator.gpu.wgslLanguageFeatures.has("uniform_buffer_standard_layout")) {
  throw new Error(`WGSL uniform buffer standard layout is not available`);
}

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

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

  struct S {
      x: f32
  }
  struct Uniforms {
      a: S,
      b: f32
      // b is at offset 4. Without standard layout, alignment rules would
      // force b to be at offset 16 (or a multiple of 16), and you would have
      // to add extra fields or use an @align attribute.
  }

  @group(0) @binding(0) var<uniform> u: Uniforms;

  @fragment fn fs_main() -> @location(0) vec4<f32> {
      return vec4<f32>(u.a.x);
  }`,
});

WebGPU على Linux

يطرح فريق Chrome WebGPU بعناية على Linux، بدءًا من دعم وحدات معالجة الرسومات من Intel Gen12+، ولكن مع خطة مؤقتة لتوسيع نطاقها ليشمل المزيد من الأجهزة (AMD وNVIDIA). يستخدم هذا التنفيذ بنية تستخدم فيها WebGPU Vulkan، بينما يظلّ باقي Chromium على OpenGL، ما يؤدي إلى استخدام مسارات الرموز البرمجية الجيدة المعروفة حاليًا. يُرجى الاطّلاع على المشكلة 442791440.

تحسين سرعة writeBuffer وwriteTexture

تم تحسين writeBuffer() وwriteTexture() في Chrome، ما أدّى إلى تحسين الأداء بنسبة تصل إلى الضعف مقارنةً بالإصدار السابق، وذلك حسب حجم البيانات التي يتم نقلها. يؤثّر هذا التغيير في جميع مستخدمي تنفيذ Dawn Wire أيضًا. يُرجى الاطّلاع على المشكلة 441900745.

آخر الأخبار في Dawn

نشر فريق Android GPU أول إصدار ألفا من روابط Kotlin لـ WebGPU على Android، والذي يتوفّر باستخدام Jetpack. تمنح حزمة androidx.webgpu مطوّري Android إمكانية الوصول إلى واجهة برمجة تطبيقات حديثة لوحدة معالجة الرسومات باستخدام Kotlin، ما يتجاوز المشاكل القديمة في OpenGL أو تعقيد Vulkan، وهو تطوّر مثير في النظام الأساسي.

لا يغطي هذا القسم سوى بعض النقاط الرئيسية. يمكنك الاطّلاع على القائمة الشاملة لعمليات الإرسال.

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

في ما يلي قائمة بكل ما تم تناوله في سلسلة "الميزات الجديدة في WebGPU".

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