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

تعديلات الفجر

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

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

اطّلِع على قائمة عمليات الدمج الشاملة.

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

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

‫Chrome 155-156

‫Chrome 153-154

‫Chrome 151-152

‫Chrome 149-150

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