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

François Beaufort
François Beaufort

إضافات لغات WGSL المتاحة

يسرد العنصر wgslLanguageFeatures من عنصر GPU أسماء إضافات اللغات المتوافقة مع WGSL. يتم تلقائيًا تفعيل إضافات لغة WGSL المدعومة، وبالتالي لن تحتاج إلى طلب إحداها بشكل صريح. هذه القائمة فارغة حاليًا، ولكن يمكنك توقّع ظهور الكثير منها في المستقبل (مثل do-while loops). راجِع issue dawn:1777.

if (navigator.gpu.wgslLanguageFeatures?.has("unknown-feature")) {
  // Use unknown-feature in WGSL shader code.
}

إتاحة تجريبية لواجهة برمجة التطبيقات Direct3D 11

يعمل فريق Chromium على إضافة دعم WebGPU لـ Direct3D 11. يمكنك الآن تجربته محليًا عن طريق تشغيل Chrome على نظام التشغيل Windows باستخدام علامات سطر الأوامر --enable-unsafe-webgpu --use-webgpu-adapter=d3d11. راجِع الإصدار dawn:1705.

الحصول على وحدة معالجة رسومات منفصلة تلقائيًا عند استخدام طاقة التيار المتردد

على أجهزة macOS المزوّدة بوحدتَي معالجة رسومات، إذا تمّ استدعاء requestAdapter() بدون خيار powerPreference، يتمّ عرض وحدة معالجة الرسومات المنفصلة عندما يكون جهاز المستخدم متصلاً بمصدر طاقة متناوب. بخلاف ذلك، يتم عرض وحدة معالجة الرسومات المدمجة. راجِع التغيير 4499307.

تحسين تجربة المطوّرين

تحذيرات جديدة في أدوات المطوّرين

في حال استخدام مفتاح depth في GPUExtend3DDict، سيظهر تحذير في "وحدة التحكّم في أدوات مطوّري البرامج" لأنّ المفتاح الصحيح هو depthOrArrayLayers. راجِع الخطأ chromium:1440900.

يتم أيضًا عرض تحذير إذا كان GPUBlendComponent يتضمّن مزيجًا من الأعضاء الصريحين والأعضاء التلقائيين. راجِع الإصدار dawn:1785.

على الرغم من أنّ عمليات الإرسال والاسترجاع ذات الحجم صفر صالحة، يُنصح المطوّرون بتجنبها كلما أمكن ذلك. راجِع عدد الفجر:1786.

رسائل خطأ أفضل

يتم الآن عرض رسالة خطأ محسّنة عند استخدام GPUCommandEncoder إذا سبق استدعاء finish(). اطّلِع على الإصدار dawn:1736.

عند إرسال وحدات تخزين مؤقتة للطلبات تحتوي على عناصر تم تدميرها، تظهر الآن تصنيفات وحدات تخزين مؤقتة للطلبات التي تم استخدامها في submit() في رسالة الخطأ. راجِع الإصدار dawn:1747.

تم الآن تحديد الجزء غير الصالح من حالة استنسل العمق في رسالة الخطأ عند التحقّق من depthStencil. راجِع الإصدار dawn:1735.

تعرض رسالة خطأ التحقّق من minBindingSize الآن المجموعة ورقم عملية الربط التي لم تجتَز عملية التحقّق، بالإضافة إلى المخزن المؤقت. راجِع الإصدار dawn:1604.

تم تحسين رسائل الخطأ التي تعرضها الطريقة mapAsync() على عنصر GPUBuffer لمساعدة المطوّرين عند تصحيح الأخطاء. يمكنك الاطّلاع على مثال أدناه وعلى الإصدار chromium:1431622.

// Create a GPU buffer and map it.
const descriptor = { size: 0, usage: GPUBufferUsage.MAP_READ };
const buffer = device.createBuffer(descriptor);
buffer.mapAsync(GPUMapMode.READ);

// Before it has been mapped, request another mapping.
try {
  await buffer.mapAsync(GPUMapMode.READ);
} catch (error) {
  // New! Error message tells you mapping is already pending.
  console.warn(error.message);
}

التصنيفات في أدوات تصحيح أخطاء نظام التشغيل macOS

يتيح لك زر الإيقاف/التفعيل use_user_defined_labels_in_backend لتصحيح الأخطاء إعادة توجيه تصنيفات العناصر إلى الخلفية حتى يمكن رؤيتها في أدوات تصحيح الأخطاء الخاصة بالنظام الأساسي، مثل RenderDoc أو PIX أو Instruments. من الآن فصاعدًا، ستتوفّر تجربة تصحيح أخطاء أفضل على نظام التشغيل macOS عند تفعيله لتصحيح الأخطاء. راجِع issue dawn:1784.

لقطة شاشة لتطبيق Instruments على نظام التشغيل macOS تعرض تصنيفات مخصّصة من WebGPU
التصنيفات التي يحدّدها المستخدم في تطبيق Instruments على نظام التشغيل macOS

تسجيل HLSL في حال تعذّر التجميع

يتيح لك زر dump_shaders تصحيح الأخطاء تسجيل أدوات تظليل WGSL المُدخلة وأدوات تظليل الخلفية المترجَمة. من الآن فصاعدًا، عند تفعيل هذه الميزة لتصحيح الأخطاء، سيتم تفريغ ملف HLSL في حال تعذّر تجميعه. راجِع الملفّ dawn:1681.

آخر الأخبار من Dawn

عدم ضبط مخزن رؤوس المضلّعات

إنّ تمرير nullptr بدلاً من wgpu::Buffer إلى SetVertexBuffer() في wgpu::RenderPassEncoder أو wgpu::RenderBundleEncoder يسمح لك بإلغاء ضبط مخزن قمم تم ضبطه مسبقًا في خانة محدّدة. راجِع الطلب dawn:1675.

// Set vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, myVertexBuffer);

// Then later, unset vertex buffer in slot 0.
myRenderPassEncoder.SetVertexBuffer(0, nullptr);

المرفقات المؤقتة

يمكنك إنشاء مرفقات تسمح لعمليات تمرير التقديم بالبقاء في ذاكرة التظليل، ما يتجنّب زيادة عدد عمليات الوصول إلى ذاكرة الوصول العشوائي الرام لفيديوهات الألعاب، وربما يتجنّب تخصيص ذاكرة الوصول العشوائي الرام لفيديوهات الألعاب للنقوش من خلال ضبط استخدام wgpu::TextureUsage::TransientAttachment. لا تتوفّر هذه الميزة إلا مع Metal وVulkan. راجِع الإصدار 1695.

wgpu::TextureDescriptor desc;
desc.format = wgpu::TextureFormat::RGBA8Unorm;
desc.size = {1, 1, 1};
desc.usage = wgpu::TextureUsage::RenderAttachment |
             wgpu::TextureUsage::TransientAttachment;

auto transientTexture = device.CreateTexture(&desc);

// You can now create views from the texture to serve as transient
// attachments, e.g. as color attachments in a render pipeline.

مبنى بدون depot_tools

يتيح لك خيار DAWN_FETCH_DEPENDENCIES CMake الجديد جلب ملحقَات Dawn باستخدام نص برمجي Python يقرأ ملفات DEPS بدلاً من طلب تثبيت depot_tools من خلال جميع المشاريع التي تعتمد عليه. راجِع التغيير 131750.

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

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

Chrome 131

Chrome 130

الإصدار 129 من Chrome

Chrome 128

الإصدار 127 من Chrome

الإصدار 126 من Chrome

الإصدار 125 من Chrome

الإصدار 124 من Chrome

Chrome 123

Chrome 122

الإصدار 121 من Chrome

الإصدار 120 من Chrome

الإصدار 119 من Chrome

Chrome 118

Chrome 117

الإصدار 116 من Chrome

Chrome 115

الإصدار 114 من Chrome

Chrome 113