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

François Beaufort
François Beaufort

زيادة الحدّ الأقصى لعدد طبقات maxTextureArrayLayers

الحدّ الأقصى المسموح به لعدد طبقات الزخرفة الثنائية الأبعاد أو عمقها هو 256 تلقائيًا. يمكنك الآن طلب ما يصل إلى 2048 باستخدام الحدّ الأقصى maxTextureArrayLayers عندما يكون ذلك متاحًا. راجِع المثال التالي والمشكلة رقم 42241514.

const adapter = await navigator.gpu.requestAdapter();
if (adapter.limits.maxTextureArrayLayers < 30) {
  // When the desired limit isn't supported, take action to either fall back to
  // a code path that does not require the higher limit or notify the user that
  // their device does not meet minimum requirements.
}

// Request highest limit of max texture array layers attributes.
const device = await adapter.requestDevice({
  requiredLimits: { maxTextureArrayLayers: 2048 }
});

تحسين عملية تحميل المخزن المؤقت لوحدة Vulkan الخلفية

يتوفّر الآن مسار سريع عند استدعاء طريقة writeBuffer() في GPUQueue لوحدة Vulkan الخلفية. يمكن الآن كتابة البيانات مباشرةً في المخزن المؤقت الوجهة، ما يزيل الحاجة إلى نسخة إضافية ومزامنة. يقلّل هذا التحسين من حركة البيانات في الذاكرة اللازمة لتحميل البيانات إلى وحدة معالجة الرسومات.

يتطلّب التحسين في المسار السريع أن تكون ذاكرة المخزن المؤقت مرئية للمضيف وألا تتضمّن أي عمليات معلّقة على وحدة معالجة الرسومات. راجِع المشكلة رقم 42242084.

تحسينات على وقت تجميع التظليل

يعمل فريق Chrome على تحسين كفاءة Tint، وهو مجمّع لغة تظليل WebGPU. تعدِّل Tint حاليًا شجرة البنية التجريدية (AST) لرمز التظليل البرمجي عدة مرات قبل إنشاء رمز الآلة، وهي عملية تستهلك الكثير من الموارد على بعض الأنظمة الأساسية. لتحسين ذلك، يتم طرح تمثيل وسيط جديد (IR)، بالإضافة إلى وحدات خلفية مُعاد تصميمها تستخدمه. يهدف هذا التغيير إلى تسريع عملية تجميع التظليل.

يتضمّن إنشاء مسار العرض تحويل WGSL إلى SPIR-V باستخدام برنامج التجميع Tint، ثم إلى ISA باستخدام برنامج التجميع Driver.
إنشاء مسار العرض في ChromeOS.

يتم توسيع نطاق هذه التحسينات، التي يمكن الوصول إليها حاليًا على Android، بشكل تدريجي لتشمل أجهزة ChromeOS التي تتوافق مع WebGPU باستخدام وحدة Vulkan الخلفية. راجِع المشكلة رقم 42250751.

يجب أن تكون مخازن الأوامر المُرسَلة فريدة

يجب أن يكون كل GPUCommandBuffer يتم إرساله إلى GPUQueue باستخدام طريقة submit() فريدًا، وإلا سيتم إنشاء خطأ في التحقّق. كان هذا خطأ في المواصفات. راجِع المشكلة رقم 42241492.

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

const commandEncoder = device.createCommandEncoder();
const commandBuffer = commandEncoder.finish();

device.queue.submit([commandBuffer, commandBuffer]);
// ⚠️ Validation fails because command buffers are not unique.

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

أصبح الآن برنامج webgpu_cpp.h المغلّف بلغة C++‎ يتضمّن الرأس فقط، ما يسهّل استخدامه ويسهّل دمجه مع برامج C++‎ مغلّفة بديلة. راجِع المشكلة رقم 40195122.

لم يعُد واجهة برمجة التطبيقات C في webgpu.h تعرض مفهوم كائنات Swapchain. يهدف هذا التغيير إلى التوافق بشكل وثيق مع واجهة برمجة تطبيقات JavaScript. يتم الآن إجراء الضبط الداخلي من خلال طريقة Configure() لكائن wgpu::Surface الجديد، والذي يخضع لتعديلات مستقبلية. يمكنك الاطّلاع على مثال في مستندات إنشاء تطبيق باستخدام WebGPU. راجِع المشكلة رقم 42241264.

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

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