الميزات الجديدة في WebGPU (Chrome 125)

François Beaufort
François Beaufort

قد يبدو عدد ميزات WebGPU قليلاً هذه المرة، ولكن بعض التطورات الرئيسية على وشك الظهور. ستتضمّن الإصدارات المستقبلية ميزات مثل تحسينات سرعة تجميع التظليل، وتغييرات على النموذج غير المتزامن للتنفيذ باستخدام WGPUFuture.

المجموعات الفرعية (ميزة قيد التطوير)

تتيح ميزة المجموعات الفرعية التوازي على مستوى SIMD، ما يسمح لسلاسل المحادثات ضمن مجموعة بالتواصل وإجراء عمليات رياضية جماعية (على سبيل المثال، حساب مجموع 16 رقمًا). ويوفّر ذلك شكلاً عالي الكفاءة لمشاركة البيانات بين سلاسل المحادثات.

تتوافق واجهات برمجة تطبيقات GPU الحديثة مع عمليات المجموعات الفرعية، ولكن تختلف تفاصيل التسمية والتنفيذ. حدّد فريق Chrome أوجه التشابه ويعمل الآن على توحيد هذه الميزة. يمكنك الاطّلاع على الاقتراح وإضافة تعليق إذا كانت لديك أسئلة.

هناك تنفيذ بسيط وغير موحّد للمجموعات الفرعية خلف علامة "ميزات تجريبية لمنصة الويب" في chrome://flags/#enable-experimental-web-platform-features ليتمكّن المطوّرون من تجربتها ومشاركة الملاحظات، لأنّه لم يتم إثبات المزايا في العالم الحقيقي بعد في سياق WebGPU.

عندما تتوفّر ميزة "chromium-experimental-subgroups" في GPUAdapter، اطلب GPUDevice باستخدام هذه الميزة للحصول على دعم تجريبي للمجموعات الفرعية في WGSL واطّلِع على الحدّين الأدنى والأقصى minSubgroupSize وmaxSubgroupSize.

عليك أيضًا تفعيل هذه الإضافة بشكلٍ صريح في رمز WGSL باستخدام enable chromium_experimental_subgroups. عند تفعيلها، يمكنك الوصول إلى الإضافات التالية:

  • subgroup_invocation_id: قيمة مضمّنة لمؤشر سلسلة المحادثات ضمن المجموعة الفرعية
  • subgroup_size: قيمة مضمّنة للوصول إلى حجم المجموعة الفرعية
  • subgroupBallot(value): تعرض مجموعة من حقول البتات حيث يكون البت المقابل لـ subgroup_invocation_id هو 1 إذا كانت value صحيحة لهذا الاستدعاء النشط و0 بخلاف ذلك.
  • subgroupBroadcast(value, id): تنشر value من الاستدعاء الذي يتطابق فيه subgroup_invocation_id مع id إلى جميع الاستدعاءات ضمن المجموعة الفرعية. ملاحظة: يجب أن يكون id ثابتًا في وقت التجميع.

يوفّر مقتطف الرمز البرمجي التالي أساسًا للتجربة واكتشاف إمكانات المجموعات الفرعية.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-subgroups")) {
  throw new Error("Experimental subgroups support is not available");
}
// Explicitly request experimental subgroups support.
const device = await adapter.requestDevice({
  requiredFeatures: ["chromium-experimental-subgroups"],
});

const shaderModule = device.createShaderModule({ code: `
  enable chromium_experimental_subgroups;

  @compute @workgroup_size(64) fn main(
      @builtin(global_invocation_id) global_id : vec3u,
      @builtin(subgroup_size) sg_size : u32,
      @builtin(subgroup_invocation_id) sg_id : u32) {
    // TODO: Use subgroupBallot() and subgroupBroadcast().
  }`,
});

العرض على شريحة من زخرفة ثلاثية الأبعاد

يمكنك الآن العرض مباشرةً على شريحة أو شرائح من الزخارف ثلاثية الأبعاد ضمن عمليات العرض، ما يوسّع إمكاناتها إلى ما هو أبعد من العرض الشائع للزخارف ثنائية الأبعاد، باستخدام العضو الجديد depthSlice في GPURenderPassColorAttachment. تتيح لك هذه الإضافة، على سبيل المثال، إنشاء مشاهد وتأثيرات مستندة إلى وحدات البكسل الحجمية من خلال العرض مباشرةً في وحدات تخزين الزخارف ثلاثية الأبعاد. راجِع المشكلة dawn:1020.

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

يمكنك الاطّلاع على القائمة الشاملة لعمليات الإرسال.

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