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

François Beaufort
François Beaufort

تاريخ النشر: 7 يناير 2026

إضافة WGSL subgroup_id

تتيح لك إضافة لغة WGSL subgroup_id استخدام القيم المضمّنة الجديدة التالية في مجموعات العمل عند تفعيل الإضافة 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.
  }`,
});

إضافة WGSL uniform_buffer_standard_layout

تتيح إضافة لغة WGSL uniform_buffer_standard_layout استخدام قيود تنسيق الذاكرة نفسها في المخازن الموحّدة كما في مخازن التخزين، ما يسهّل مشاركة هياكل البيانات في كلا النوعين من المخازن. وهذا يعني أنّه لم يعُد مطلوبًا أن تكون مخازن البيانات الموحّدة متوافقة مع 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.

إشعارات الفجر

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

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

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

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

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