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

François Beaufort
François Beaufort

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

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

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

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

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

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

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

يتم أيضًا رفع تحذير إذا كانت علامة GPUBlendComponent تضم مزيجًا من الأعضاء الفاضحين والمنتسبين التلقائيين. راجِع عدد الفجر:1785.

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

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

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

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

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

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

تم تحسين رسائل الخطأ التي تعرضها الطريقة mapAsync() على عنصر GPUBuffer لمساعدة المطوّرين عند تصحيح الأخطاء. راجِع المثال أدناه وissue 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 عند تفعيله لإجراء تصحيح الأخطاء. راجِع عدد الفجر:1784

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

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

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

آخر أخبار الفجر

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

يؤدي تمرير nullptr بدلاً من wgpu::Buffer إلى SetVertexBuffer() على wgpu::RenderPassEncoder أو wgpu::RenderBundleEncoder إلى السماح لك بإلغاء ضبط مخزن رأسي تم ضبطه مسبقًا في خانة معيّنة. راجِع عدد الفجر: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، يمكنك إنشاء مرفقات تسمح بعمليات تمرير العرض في ذاكرة التخزين المقسّمة، مع تجنُّب حركة بيانات VRAM وتجنُّب تخصيص VRAM للزخارف. لا تتوفّر هذه الميزة إلا في قنوات 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

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

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

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

الإصدار 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 من Chrome