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

François Beaufort
François Beaufort

زيادة الحدّ الأقصى لعدد طبقات مصفوفة النسيج

الحد الأقصى للقيمة المسموح بها لعمق أو عدد طبقات نسيج ثنائي الأبعاد هو 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.

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

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

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

يتم توسيع نطاق هذه التحسينات، التي يمكن الوصول إليها حاليًا على Android، بشكل تدريجي ليشمل أجهزة ChromeOS المتوافقة مع WebGPU باستخدام Vulkan backend. يُرجى الاطّلاع على المشكلة 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 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