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

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

آخر الأخبار من 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. راجِع الإصدار 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 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