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

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

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

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

‫Chrome 149-150

Chrome 147-148

‫Chrome 146

Chrome 145

‫Chrome 144

Chrome 143

الإصدار 142 من Chrome

‫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