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

François Beaufort
François Beaufort

إجراء التجارب على المجموعات الفرعية

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

يتوفّر الحد الأدنى من التنفيذ لاقتراح المجموعات الفرعية للاختبار المحلي ضِمن "دعم غير آمن WebGPU". أبلغ عنه في chrome://flags/#enable-unsafe-webgpu.

يمكنك أيضًا تجربة مجموعات فرعية على موقعك الإلكتروني مع مستخدمين حقيقيين من خلال الاشتراك في مرحلة التجربة والتقييم. اقرأ مقالة بدء استخدام مراحل التجربة والتقييم للحصول على تعليمات حول كيفية إعداد موقعك الإلكتروني لاستخدام مراحل التجربة والتقييم. سيتم تشغيل مرحلة التجربة والتقييم من Chrome 128 إلى Chrome 131 (ستنتهي في 19 شباط (فبراير) 2025). الاطّلاع على نية إجراء تجربة

عند توفُّر ميزة "subgroups" في GPUAdapter، يمكنك طلب GPUDevice تتضمّن هذه الميزة للحصول على دعم المجموعات الفرعية في WGSL والتحقّق من حدودَي minSubgroupSize وmaxSubgroupSize.

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

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

ستتم إضافة المزيد من الوظائف المضمَّنة مثل subgroupAdd وsubgroupAll وsubgroupElect وsubgroupShuffle في المستقبل. راجِع المشكلة 354738715.

للسماح بتشغيل f16 في عمليات المجموعات الفرعية، اطلب GPUDevice مع الميزات "subgroups" و"subgroups-f16" و"shader-f16"، ثم فعّله في رمز WGSL مع enable f16, subgroups, subgroups_f16;.

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

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

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

  var<workgroup> wgmem : u32;

  @group(0) @binding(0)
  var<storage, read> inputs : array<u32>;

  @group(0) @binding(1)
  var<storage, read_write> output : array<u32>;

  @compute @workgroup_size(64)
  fn main(@builtin(subgroup_size) subgroupSize : u32,
          @builtin(subgroup_invocation_id) id : u32,
          @builtin(local_invocation_index) lid : u32) {
    // One thread per workgroup writes the value to workgroup memory.
    if (lid == 0) {
      wgmem = inputs[lid];
    }
    workgroupBarrier();
    var v = 0u;

    // One thread per subgroup reads the value from workgroup memory
    // and shares that value with every other thread in the subgroup
    // to reduce local memory bandwidth.
    if (id == 0) {
      v = wgmem;
    }
    v = subgroupBroadcast(v, 0);
    output[lid] = v;
  }`,
});

// Send the appropriate commands to the GPU...

إيقاف تعيين تحيز عمق الخطوط والنقاط

يؤدي تغيير مواصفات WebGPU إلى حدوث خطأ أثناء التحقُّق من ضبط depthBias وdepthBiasSlopeScale وdepthBiasClamp على قيمة غير صفرية عندما تكون طوبول مسار العرض عبارة عن نوع خط أو نقطة. لمنح المطوّرين الوقت الكافي لتعديل الرموز البرمجية، يظهر تحذير في وحدة تحكّم أدوات مطوّري البرامج بشأن عملية التحقّق القادمة هذه ويتم فرض القيمة 0 في هذه الحالات. راجِع المشكلة 352567424.

إخفاء تحذير "أدوات مطوري البرامج" للخطأ الذي لم يتم تصويره في حال المنع التلقائي

في وحدة التحكّم في أدوات مطوّري البرامج، لن يتم عرض تحذيرات أحداث uncapturederror إذا تم تسجيل أداة معالجة الأحداث لـ uncapturederror وتم استدعاء طريقة الحدث preventDefault() ضمن استدعاء أداة معالجة الحدث. ويتطابق هذا السلوك مع معالجة الأحداث في JavaScript. يُرجى الاطّلاع على المثال التالي ورقم المشكلة 40263619.

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

device.addEventListener("uncapturederror", (event) => {
  // Prevents browser warning to show up in the DevTools Console.
  event.preventDefault();

  // TODO: Handle event.error
});

دمج WGSL لأخذ العينات أولاً وإمّا

تتيح لك سمة WGSL interpolate إدارة استقراء بيانات IO التي يحددها المستخدم. والآن، تمنحك المعلَمات الجديدة لأخذ العينات المتداخلة first (الإعداد التلقائي) وeither تحكّمًا إضافيًا: تستخدم first القيمة من الرأس الأول للعنصر الأساسي، بينما تتيح either رأس العمود الأول أو الأخير. راجِع المشكلة 340278447.

آخر أخبار الفجر

اكتمل الآن تنفيذ WGPUFuture الخاصة بـ Dawn لمعالجة العمليات غير المتزامنة. تشمل المفاهيم الرئيسية wgpuInstanceProcessEvents لمعالجة الأحداث الانتهازية وWGPUCallbackMode لتحديد المواقع الجغرافية لمعاودة الاتصال. يشير WGPUFuture إلى الأحداث التي تقع لمرة واحدة وعمرها لا نهائي، وتنتظر wgpuInstanceWaitAny إكمال أي أحداث مستقبلية أو مهلة. راجِع المشكلة 42240932.

لا يتم الآن الإبلاغ عن قيمة CompositeAlphaMode::Auto من خلال Surface::GetCapabilities(). لا يزال هذا العنوان صالحًا، ويعادل Surface::GetCapabilities().alphaMode[0]. راجِع المشكلة 292.

تتوافق خلفية OpenGL الآن مع Surface مع رمز y-flips لكل طلب Present(). راجِع المشكلة 344814083.

تم إيقاف طريقة Adapter::GetProperties() نهائيًا لصالح استخدام Adapter::GetInfo().

أعاد "جاسوانت"، وهو مساهم خارجي، كتابة جميع ملفات CMake، ما جعلها أسهل في التحديث وتسمح بعمليات الإنشاء المسبق. الاطّلاع على دليل البدء السريع لاستخدام مشروع Dawn في مشاريع CMake.

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

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

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

الإصدار 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 من Chrome