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

François Beaufort
François Beaufort

زيادة الحد الأقصى لعدد الطبقات في TextureArray

إنّ الحد الأقصى المسموح به لقيمة العمق أو عدد الطبقات في نسيج ثنائي الأبعاد هو 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 في الخلفية. يمكن الآن كتابة البيانات مباشرةً في ذاكرة التخزين المؤقت للوجهة، ما يزيل الحاجة إلى نسخة إضافية ومزامنة. يقلل هذا التحسين من عدد عمليات نقل البيانات إلى ذاكرة الوصول العشوائي اللازمة لتحميل البيانات إلى وحدة معالجة الرسومات.

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

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

يعمل فريق 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

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

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

اطّلِع على قائمة المساهمين الشاملة.

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

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

Chrome 131

Chrome 130

الإصدار 129 من Chrome

Chrome 128

Chrome 127

الإصدار 126 من Chrome

الإصدار 125 من Chrome

Chrome 124

Chrome 123

Chrome 122

الإصدار 121 من Chrome

الإصدار 120 من Chrome

الإصدار 119 من Chrome

Chrome 118

Chrome 117

Chrome 116

Chrome 115

الإصدار 114 من Chrome

Chrome 113