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

François Beaufort
François Beaufort

إضافات لغة WGSL المتوافقة

تعرض السمة wgslLanguageFeatures للعنصر GPU أسماء إضافات لغة WGSL المتوافقة. يتم تفعيل إضافات لغة WGSL المتوافقة تلقائيًا، لذا ليس عليك طلب أي منها بشكل صريح. هذه القائمة فارغة حاليًا، ولكن يمكنك توقّع ظهور الكثير من الأخطاء في المستقبل (على سبيل المثال، do-while loops). يمكنك الاطّلاع على المشكلة 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.

على الرغم من أنّ عمليات الإرسال والرسومات ذات الحجم الصفري صالحة، يشجّع التحذير المطوّرين على تجنُّبها قدر الإمكان. اطّلِع على المشكلة dawn: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

إشعارات الفجر

إلغاء ضبط مخزن بيانات الرؤوس

يسمح لك تمرير 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);

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

يمكنك إنشاء مرفقات تسمح لعمليات تمرير العرض بالبقاء في ذاكرة التجانب، ما يؤدي إلى تجنُّب نقل البيانات إلى ذاكرة الوصول العشوائي المرئية (VRAM) وربما تجنُّب تخصيص ذاكرة الوصول العشوائي المرئية (VRAM) للنسيج من خلال ضبط استخدام wgpu::TextureUsage::TransientAttachment. تتوفّر هذه الميزة فقط مع Metal وVulkan. اطّلِع على issue dawn: 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 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