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

François Beaufort
François Beaufort

التوافق مع النطاق العالي الديناميكية (HDR) في وضع ربط درجات الألوان على لوحة العرض

تتوفّر لمطوّري الويب خيارات محدودة لعرض محتوى HDR، إذ يعتمدون بشكل أساسي على العنصرَين <img> و<video>، بينما يظلّ العنصر <canvas> مقتصرًا على محتوى SDR. ويتطلّب إنشاء محتوى HDR ديناميكي داخل لوحة العرض ترميز محتوياتها كصورة HDR قبل عرضها (للاطّلاع على مثال، راجِع هذا العرض التوضيحي).

تتيح المَعلمة الجديدة GPUCanvasToneMappingMode في إعدادات لوحة العرض WebGPU الآن لواجهة برمجة التطبيقات WebGPU رسم ألوان أكثر سطوعًا من الأبيض (#FFFFFF)، وذلك من خلال الأوضاع التالية:

  • "standard": يقتصر السلوك التلقائي على نطاق SDR للشاشة. يتم تحقيق هذا الوضع من خلال حصر جميع قيم الألوان في مساحة ألوان الشاشة على الفاصل الزمني [0, 1].

  • "extended": يتيح استخدام النطاق الكامل لدقة HDR على الشاشة. يتطابق هذا الوضع مع "standard" في نطاق [0, 1] على الشاشة. يتم التثبيت أو العرض على النطاق الديناميكي الموسّع للشاشة وليس على [0, 1].

يوضّح لك مقتطف الرمز التالي كيفية ضبط لوحة عرض لنطاق الديناميكية العالية.

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

const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");

context.configure({
  device,
  format: "rgba16float",
  toneMapping: { mode: "extended" },
});

يمكنك استكشاف تكنولوجيا "النطاق العالي الديناميكية" (HDR) باستخدام WebGPU من خلال الاطّلاع على نموذج الجسيمات (HDR) ومثال WebGPU HDR، والاطّلاع على إدخال chromestatus.

كمبيوتر محمول مزوّد بشاشة HDR تعرض صورة زاهية
عينة "الجسيمات" (نطاق عالي الديناميكية) معروضة على شاشة نطاق عالي الديناميكية

إتاحة المجموعات الفرعية الموسّعة

بعد الإعلان عن تجربة المجموعات الفرعية، أصبحت وظائف المجموعات الفرعية المضمّنة متاحة للاستخدام في كل من برامج تظليل الحساب وبرامج تظليل الأجزاء، ولم تعُد مقتصرة على برامج تظليل الحساب فقط. يمكنك الاطّلاع على المشكلة 354738715.

يُرجى العِلم أنّ القيمة المضمّنة subgroup_size تتضمّن أخطاء حاليًا في برامج تظليل الأجزاء. تجنَّبها في الوقت الحالي.

بالإضافة إلى ذلك، تمت إضافة دوال مضمّنة خاصة بالمجموعات الفرعية:

  • subgroupAdd(value): تعرض هذه السمة مجموع جميع عمليات الاستدعاء النشطة value في المجموعة الفرعية.
  • subgroupExclusiveAdd(value): تعرض مجموع عمليات الفحص الحصرية لجميع عمليات الاستدعاء النشطة value في المجموعة الفرعية.
  • subgroupMul(value): تعرض ناتج ضرب جميع عمليات الاستدعاء النشطة value في المجموعة الفرعية.
  • subgroupExclusiveMul(value): تعرض هذه السمة حاصل ضرب عمليات البحث الحصرية لجميع عمليات الاستدعاء النشطة value في المجموعة الفرعية.

  • subgroupAnd(value): تعرض عملية AND الثنائية لجميع عمليات الاستدعاء النشطة value على مستوى المجموعة الفرعية.
  • subgroupOr(value): تعرض هذه السمة قيمة OR الثنائية لجميع عمليات الاستدعاء النشطة value في المجموعة الفرعية.
  • subgroupXor(value): تعرض هذه السمة قيمة XOR الثنائية لجميع عمليات الاستدعاء النشطة values في المجموعة الفرعية.

  • subgroupMin(value): تعرض الحدّ الأدنى لجميع عمليات الاستدعاء النشطة values في المجموعة الفرعية.
  • subgroupMax(value): تعرض الحد الأقصى لقيمة جميع عمليات الاستدعاء النشطة value في المجموعة الفرعية.

  • subgroupAll(value): تعرض القيمة "صحيح" إذا كانت قيمة value صحيحة لجميع عمليات الاستدعاء النشطة في المجموعة الفرعية.
  • subgroupAny(value): تعرض القيمة "صحيح" إذا كانت قيمة value صحيحة لأي استدعاء نشط في المجموعة الفرعية.

  • subgroupElect(): تعرض القيمة "صحيح" إذا كان هذا الاستدعاء يتضمّن أدنى قيمة subgroup_invocation_id بين الاستدعاءات النشطة في المجموعة الفرعية.
  • subgroupBroadcastFirst(value): يبث value من عملية الاستدعاء النشطة التي تتضمّن أقل قيمة subgroup_invocation_id في المجموعة الفرعية إلى جميع عمليات الاستدعاء النشطة الأخرى.

  • subgroupShuffle(value, id): تعرض هذه السمة value من عملية الاستدعاء النشطة التي تتطابق فيها subgroup_invocation_id مع id.
  • subgroupShuffleXor(value, mask): تعرض هذه السمة value من عملية الاستدعاء النشطة التي تتطابق فيها subgroup_invocation_id مع subgroup_invocation_id ^ mask. يجب أن تكون mask موحّدة بشكل ديناميكي.
  • subgroupShuffleUp(value, delta): تعرض هذه السمة value من عملية الاستدعاء النشطة التي تتطابق فيها subgroup_invocation_id مع subgroup_invocation_id - delta.
  • subgroupShuffleDown(value, delta): تعرض هذه السمة value من عملية الاستدعاء النشطة التي تتطابق فيها subgroup_invocation_id مع subgroup_invocation_id + delta.

  • quadBroadcast(value, id): يبثّ value من استدعاء المربّع الذي يحمل المعرّف id. يجب أن يكون id تعبيرًا ثابتًا.
  • quadSwapX(value): تبدّل value بين عمليات الاستدعاء في المربع في الاتجاه X.
  • quadSwapY(value): يبدّل value بين عمليات الاستدعاء في المربع في الاتجاه Y.
  • quadSwapDiagonal(value): تبدّل value بين عمليات الاستدعاء في المربع قطريًا.

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

يتضمّن البنية wgpu::PrimitiveState الآن إعدادات التحكّم في قص العمق مباشرةً، ما يغنيك عن الحاجة إلى بنية wgpu::PrimitiveDepthClipControl منفصلة. لمزيد من المعلومات، يمكنك الاطّلاع على مقتطف الرمز التالي وطلب السحب الخاص بملفات webgpu-headers.

// Before
wgpu::PrimitiveState primitive = {};
wgpu::PrimitiveDepthClipControl depthClipControl;
depthClipControl.unclippedDepth = true;
primitive.nextInChain = &depthClipControl;
// Now
wgpu::PrimitiveState primitive = {};
primitive.unclippedDepth = true;

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

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