تجربة استخدام المجموعات الفرعية
تتيح ميزة المجموعات الفرعية التوازي على مستوى تعليمات SIMD، ما يسمح للعمليات الفرعية ضمن مجموعة بالتواصل وإجراء عمليات رياضية جماعية (على سبيل المثال، حساب مجموع 16 رقمًا). ويوفّر ذلك شكلاً عالي الكفاءة لمشاركة البيانات بين العمليات الفرعية.
يتوفّر تنفيذ بسيط لاقتراح المجموعات الفرعية للاختبار المحلي خلف علامة "دعم WebGPU غير الآمن" على chrome://flags/#enable-unsafe-webgpu.
يمكنك أيضًا تجربة المجموعات الفرعية على موقعك الإلكتروني مع مستخدمين حقيقيين من خلال الاشتراك في مرحلة التجربة والتقييم. يقدّم مقال البدء في استخدام التجارب الأساسية تعليمات حول كيفية إعداد موقعك الإلكتروني لاستخدام التجارب الأساسية. ستستمر مرحلة التجربة والتقييم من Chrome 128 إلى 131 (وتنتهي في 19 فبراير 2025). يمكنك الاطّلاع على مقال Intent to Experiment.
عندما تتوفّر ميزة "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.
إخفاء تحذير "أدوات مطوري البرامج" بشأن الخطأ غير الذي لم يتم رصده إذا تم استدعاء `preventDefault`
في "وحدة تحكّم أدوات مطوري البرامج"، لن يتم عرض تحذيرات أحداث 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 `interpolate` sampling `first` و`either`
تتيح لك سمة interpolate في WGSL إدارة استيفاء بيانات الإدخال/الإخراج المحدّدة من قِبل المستخدم. الآن، تمنحك مَعلمتا أخذ العينات الجديدتان first (تلقائيًا) وeither تحكّمًا إضافيًا: تستخدم first القيمة من رأس الشكل الهندسي الأول، بينما تسمح either باستخدام الرأس الأول أو الأخير. يمكنك الاطّلاع على المشكلة رقم 340278447.
آخر الأخبار في Dawn
اكتمل الآن تنفيذ WGPUFuture في Dawn لمعالجة العمليات غير المتزامنة. تشمل المفاهيم الرئيسية wgpuInstanceProcessEvents لمعالجة الأحداث الانتهازية وWGPUCallbackMode لتحديد مواقع معاودة الاتصال. تشير WGPUFuture إلى الأحداث لمرة واحدة التي لها مدة غير محدودة، وتنتظر wgpuInstanceWaitAny إكمال أي عملية مستقبلية أو انتهاء المهلة. يمكنك الاطّلاع على المشكلة رقم 42240932.
لم يعُد يتم الإبلاغ عن القيمة CompositeAlphaMode::Auto من خلال Surface::GetCapabilities(). لا تزال هذه القيمة صالحة وتعادل Surface::GetCapabilities().alphaMode[0]. يمكنك الاطّلاع على المشكلة رقم 292.
تتوافق الآن واجهة OpenGL الخلفية مع Surface باستخدام blit لقلب المحور y لكل استدعاء Present(). يمكنك الاطّلاع على المشكلة رقم 344814083.
تم إيقاف طريقة Adapter::GetProperties() نهائيًا لصالح استخدام Adapter::GetInfo().
أعاد Jaswant، وهو مساهم خارجي، كتابة جميع ملفات CMake، ما يسهّل تعديلها ويسمح بإجراء عمليات ما قبل الإنشاء. يمكنك الاطّلاع على دليل البدء السريع لاستخدام Dawn في مشاريع CMake.
لا يغطي هذا المقال سوى بعض النقاط الرئيسية. يمكنك الاطّلاع على القائمة الشاملة لعمليات الإرسال.
الميزات الجديدة في WebGPU
في ما يلي قائمة بكل ما تم تناوله في سلسلة المقالات "الميزات الجديدة في WebGPU".
Chrome 147-148
Chrome 146
- تفعيل وضع التوافق مع WebGPU على OpenGL ES 3.1
- المرفقات المؤقتة
- إضافة texture_and_sampler_let في WGSL
- آخر الأخبار في Dawn
Chrome 145
Chrome 144
- إضافة subgroup_id في WGSL
- إضافة uniform_buffer_standard_layout في WGSL
- WebGPU على Linux
- عمليات writeBuffer وwriteTexture أسرع
- آخر الأخبار في Dawn
Chrome 143
Chrome 142
Chrome 141
- اكتملت عملية Tint IR
- تحليل نطاق الأعداد الصحيحة في مجمّع WGSL
- تعديل SPIR-V 1.4 للواجهة الخلفية Vulkan
- آخر الأخبار في Dawn
Chrome 140
- تستهلك طلبات الأجهزة المحوّل
- اختصار لاستخدام الزخرفة عندما يتم استخدام طريقة عرض الزخرفة
- تتوافق WGSL textureSampleLevel مع الزخارف أحادية الأبعاد
- إيقاف استخدام زخرفة التخزين للقراءة فقط bgra8unorm
- إزالة سمة isFallbackAdapter في GPUAdapter
- آخر الأخبار في Dawn
Chrome 139
- دعم الزخارف ثلاثية الأبعاد لتنسيقات BC وASTC المضغوطة
- ميزة "core-features-and-limits" الجديدة
- مرحلة التجربة والتقييم لوضع التوافق مع WebGPU
- آخر الأخبار في Dawn
Chrome 138
- اختصار لاستخدام المخزن المؤقت كمورد ربط
- تغييرات في متطلبات حجم المخازن المؤقتة التي يتم ربطها عند الإنشاء
- تقرير البنية لوحدات معالجة الرسومات الحديثة
- إيقاف سمة isFallbackAdapter في GPUAdapter
- آخر الأخبار في Dawn
Chrome 137
- استخدام طريقة عرض الزخرفة لربط externalTexture
- نسخ المخازن المؤقتة بدون تحديد الإزاحات والحجم
- WGSL workgroupUniformLoad باستخدام مؤشر إلى atomic
- سمة powerPreference في GPUAdapterInfo
- إزالة سمة compatibilityMode في GPURequestAdapterOptions
- آخر الأخبار في Dawn
Chrome 136
- سمة isFallbackAdapter في GPUAdapterInfo
- تحسينات في وقت تجميع التظليل على D3D12
- حفظ صور لوحة الرسم ونسخها
- إزالة القيود المفروضة على وضع التوافق
- آخر الأخبار في Dawn
Chrome 135
- السماح بإنشاء تنسيق خط الأنابيب باستخدام تنسيق مجموعة الربط الخالي
- السماح لمنافذ العرض بالتوسّع إلى ما بعد حدود أهداف العرض
- الوصول بسهولة أكبر إلى وضع التوافق التجريبي على Android
- إزالة الحدّ الأقصى maxInterStageShaderComponents
- آخر الأخبار في Dawn
Chrome 134
- تحسين أحمال تعلُّم الآلة باستخدام المجموعات الفرعية
- إزالة دعم أنواع الزخارف القابلة للفلترة من النوع float كأنواع قابلة للمزج
- آخر الأخبار في Dawn
Chrome 133
- تنسيقات الرأس الإضافية unorm8x4-bgra وذات المكوّن الواحد
- السماح بطلب حدود غير معروفة باستخدام قيمة غير محدّدة
- تغييرات في قواعد المحاذاة في WGSL
- تحسينات في الأداء في WGSL باستخدام `discard`
- استخدام `VideoFrame.displaySize` للزخارف الخارجية
- معالجة الصور ذات الاتجاهات غير التلقائية باستخدام `copyExternalImageToTexture`
- تحسين تجربة المطوّر
- تفعيل وضع التوافق باستخدام `featureLevel`
- تنظيف ميزات المجموعات الفرعية التجريبية
- إيقاف الحدّ الأقصى maxInterStageShaderComponents
- آخر الأخبار في Dawn
Chrome 132
- استخدام طريقة عرض الزخرفة
- مزج زخارف float ذات 32 بت
- سمة `adapterInfo` في GPUDevice
- ضبط سياق لوحة الرسم باستخدام تنسيق غير صالح يؤدي إلى ظهور خطأ JavaScript
- قيود فلترة أداة أخذ العينات على الزخارف
- تجربة موسّعة للمجموعات الفرعية
- تحسين تجربة المطوّر
- دعم تجريبي لتنسيقات الزخارف العادية ذات 16 بت
- آخر الأخبار في Dawn
Chrome 131
- مسافات القطع في WGSL
- GPUCanvasContext.getConfiguration()
- يجب ألا تحتوي الأشكال الهندسية النقطية والخطية على انحياز العمق
- دوال مضمّنة للفحص الشامل للمجموعات الفرعية
- دعم تجريبي لـ multi-draw indirect
- خيار تجميع وحدة التظليل `strict-math`
- إزالة GPUAdapter.requestAdapterInfo()
- آخر الأخبار في Dawn
Chrome 130
- المزج الثنائي المصدر
- تحسينات في وقت تجميع التظليل على Metal
- إيقاف GPUAdapter.requestAdapterInfo()
- آخر الأخبار في Dawn
Chrome 129
- دعم النطاق العالي الديناميكية (HDR) باستخدام وضع ربط درجات الألوان في لوحة الرسم
- توسيع نطاق دعم المجموعات الفرعية
- آخر الأخبار في Dawn
Chrome 128
- تجربة استخدام المجموعات الفرعية
- إيقاف ضبط انحياز العمق للخطوط والنقاط
- إخفاء تحذير "أدوات مطوري البرامج" بشأن الخطأ غير الذي لم يتم رصده إذا تم استدعاء `preventDefault`
- WGSL `interpolate` sampling `first` و`either`
- آخر الأخبار في Dawn
Chrome 127
- دعم تجريبي لـ OpenGL ES على Android
- سمة `info` في GPUAdapter
- تحسينات في التوافق التشغيلي مع WebAssembly
- أخطاء محسّنة في أداة ترميز الأوامر
- آخر الأخبار في Dawn
Chrome 126
- زيادة الحدّ الأقصى maxTextureArrayLayers
- تحسين تحميل المخزن المؤقت للواجهة الخلفية Vulkan
- تحسينات في وقت تجميع التظليل
- يجب أن تكون المخازن المؤقتة للأوامر التي تم إرسالها فريدة
- آخر الأخبار في Dawn
Chrome 125
Chrome 124
- زخارف التخزين للقراءة فقط والقراءة والكتابة
- دعم مشغّلي الخدمات والعمليات المشتركة
- سمات معلومات المحوّل الجديدة
- إصلاح الأخطاء
- آخر الأخبار في Dawn
Chrome 123
- دعم الدوال المضمّنة DP4a في WGSL
- مَعلمات المؤشر غير المقيّدة في WGSL
- التجميل اللغوي لبنية إلغاء الإشارة إلى المركّبات في WGSL
- حالة منفصلة للقراءة فقط لجوانب الاستنسل والعمق
- آخر الأخبار في Dawn
Chrome 122
- توسيع نطاق الوصول باستخدام وضع التوافق (ميزة قيد التطوير)
- زيادة الحدّ الأقصى maxVertexAttributes
- آخر الأخبار في Dawn
Chrome 121
- تفعيل WebGPU على Android
- استخدام DXC بدلاً من FXC لتجميع التظليل على Windows
- طلبات الطابع الزمني في عمليات الحوسبة والعرض
- نقاط الدخول التلقائية إلى وحدات التظليل
- تفعيل display-p3 كمساحة ألوان GPUExternalTexture
- معلومات عن مساحات الذاكرة
- آخر الأخبار في Dawn
Chrome 120
- دعم قيم النقطة العائمة ذات 16 بت في WGSL
- تجاوز الحدود
- تغييرات في حالة العمق والاستنسل
- تعديلات على معلومات المحوّل
- تحديد كمية طلبات الطابع الزمني
- ميزات التنظيف الربيعي
Chrome 119
- زخارف float ذات 32 بت قابلة للفلترة
- تنسيق الرأس unorm10-10-10-2
- تنسيق الزخرفة rgb10a2uint
- آخر الأخبار في Dawn
Chrome 118
- دعم HTMLImageElement وImageData في
copyExternalImageToTexture() - دعم تجريبي لزخرفة التخزين للقراءة والكتابة والقراءة فقط
- آخر الأخبار في Dawn
Chrome 117
- إلغاء ضبط المخزن المؤقت للرأس
- إلغاء ضبط مجموعة الربط
- إخفاء الأخطاء الناتجة عن إنشاء خط الأنابيب غير المتزامن عند فقدان الجهاز
- تعديلات على إنشاء وحدة تظليل SPIR-V
- تحسين تجربة المطوّر
- تخزين خطوط الأنابيب مؤقتًا باستخدام التنسيق الذي يتم إنشاؤه تلقائيًا
- آخر الأخبار في Dawn
Chrome 116
- التكامل مع WebCodecs
- الجهاز المفقود الذي يتم عرضه من خلال GPUAdapter
requestDevice() - الحفاظ على سلاسة تشغيل الفيديو إذا تم استدعاء
importExternalTexture() - الامتثال للمواصفات
- تحسين تجربة المطوّر
- آخر الأخبار في Dawn
Chrome 115
- إضافات لغة WGSL المتوافقة
- دعم تجريبي لـ Direct3D 11
- الحصول على وحدة معالجة الرسومات المنفصلة تلقائيًا عند توصيل الجهاز بمصدر طاقة التيار المتردد
- تحسين تجربة المطوّر
- آخر الأخبار في Dawn
Chrome 114
- تحسين JavaScript
- يؤدي استدعاء getCurrentTexture() على لوحة رسم غير مضبوطة إلى ظهور InvalidStateError
- آخر الأخبار في WGSL
- آخر الأخبار في Dawn