الميزات الجديدة في 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 أو Materials. من الآن فصاعدًا، سيتم توفير تجربة تصحيح أخطاء أفضل على نظام التشغيل macOS عند تفعيله لتصحيح الأخطاء. راجِع مشكلة dawn:1784.

لقطة شاشة لتطبيق instruments على نظام التشغيل macOS وهي تعرض تصنيفات مخصَّصة من WebGPU.
التصنيفات التي يحددها المستخدم في تطبيق "الأدوات" على نظام التشغيل 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. راجِع مشكلة الفجر: 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.

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