الميزات الجديدة في WebGPU (إصدار Chrome 136)

François Beaufort
François Beaufort

Published: April 23, 2025

سمة isFallbackAdapter في GPUAdapterInfo

تشير سمة isFallbackAdapter المنطقية في GPUAdapterInfo إلى ما إذا كانت هناك قيود كبيرة على أداء GPUAdapter مقابل توافق أوسع أو سلوك أكثر قابلية للتنبؤ أو خصوصية محسّنة. كانت هذه الإضافة ضرورية لأنّ المكتبات التي تأخذ كائنات GPUDevice التي يقدّمها المستخدمون لم تتمكّن من الوصول إلى هذه المعلومات من خلال سمة adapterInfo في GPUDevice. يمكنك الاطّلاع على المثال التالي والمشكلة 403172841.

const adapter = await navigator.gpu.requestAdapter();

if (adapter?.info.isFallbackAdapter) {
  // The returned adapter is a software-backed fallback adapter, which
  // may have significantly lower performance and fewer features.
}

بما أنّ Chrome لم يُرسِل بعد الدعم لوحدات معالجة الرسومات الاحتياطية، تكون قيمة isFallbackAdapter دائمًا خطأ حاليًا على أجهزة المستخدمين. نحن بصدد التحقيق في ما إذا كان يمكن إيقاف سمة GPUAdapter isFallbackAdapter نهائيًا وإزالتها. يمكنك الاطّلاع على نية الشحن.

تحسينات على وقت تجميع التظليل على D3D12

يواصل فريق Chrome تحسين Tint، وهو مجمّع لغة تظليل WebGPU، من خلال إضافة تمثيل وسيط (IR) للأجهزة التي تتوافق مع WebGPU باستخدام واجهة D3D12 الخلفية. سيجعل هذا التمثيل الوسيط، الذي يقع بين شجرة البنية التجريدية (AST) الخاصة بـ Tint وكاتب واجهة HLSL الخلفية، المجمّع أكثر كفاءة وقابلية للصيانة، ما يفيد كلاً من المطوّرين والمستخدمين في النهاية. تُظهر الاختبارات الأولية أنّ الإصدار الجديد من Tint أسرع بما يصل إلى 10 مرّات عند ترجمة مظلّلات WGSL من Unity إلى HLSL.

يعرض مخطط انسيابي عملية تحويل رمز تظليل WGSL إلى تعليمات وحدة معالجة رسومات منخفضة المستوى.
إنشاء مسار العرض في Windows.

يتم توسيع نطاق هذه التحسينات، التي يمكن الوصول إليها حاليًا على Android وChromeOS وmacOS، تدريجيًا لتشمل أجهزة Windows التي تتوافق مع WebGPU باستخدام واجهة D3D12 الخلفية. يمكنك الاطّلاع على المشكلة 42251045.

حفظ صور لوحة الرسم ونسخها

يمكن لمستخدمي Chrome الآن النقر بزر الماوس الأيمن على لوحة رسم WebGPU والوصول إلى خيارات قائمة السياق حفظ الصورة باسم… أو نسخ الصورة. يمكنك الاطّلاع على المشكلة 40902474.

‏
اختار المستخدم خيار "حفظ الصورة باسم…" من قائمة السياق.

إزالة القيود المفروضة على وضع التوافق

عندما تكون ميزة "core-features-and-limits" التجريبية متاحة على GPUDevice، فإنّها تزيل جميع القيود المفروضة على وضع التوافق (الميزات والحدود) عند تفعيل العلامة chrome://flags/#enable-unsafe-webgpu. يمكنك الاطّلاع على المشكلة 395855517.

يشير طلب GPUAdapter باستخدام الخيار featureLevel: "compatibility" إلى المتصفّح لاختيار وضع التوافق التجريبي في WebGPU. إذا نجحت العملية، تكون وحدة معالجة الرسومات الناتجة "متوافقة تلقائيًا". بخلاف ذلك، تكون "أساسية تلقائيًا"، وهو ما يعادل استخدام الخيار featureLevel: "core". علاوةً على ذلك، يؤدي استدعاء requestDevice() بدون requiredFeatures وrequiredLimits إلى طلب GPUDevice بإمكانات GPUAdapter التلقائية.

تتوافق وحدات معالجة الرسومات الأساسية التلقائية دائمًا مع ميزة "core-features-and-limits" ويتم تفعيلها تلقائيًا على GPUDevices التي تم إنشاؤها منها. بالنسبة إلى وحدات معالجة الرسومات المتوافقة تلقائيًا، قد تكون ميزة "core-features-and-limits" متاحة ويمكن طلبها على GPUDevices التي تم إنشاؤها منها. قد تتوافق كلا نوعَي وحدات معالجة الرسومات أيضًا مع ميزات مثل "float32-blendable"، وهي اختيارية في كل من الوضعَين الأساسي والمتوافق.

المثال التالي هو لتطبيق يتطلّب "float32-blendable" ويتيح استخدام الميزات الأساسية إذا كانت متاحة، ولكنّه يستخدم ميزات التوافق فقط إذا لم تكن الميزات الأساسية متاحة.

const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });

if (!adapter || !adapter.features.has("float32-blendable")) {
  throw new Error("32-bit float textures blending support is not available");
}

const requiredFeatures = [];
if (adapter.features.has("core-features-and-limits")) {
  requiredFeatures.push("core-features-and-limits");
}

const device = await adapter.requestDevice({ requiredFeatures });

if (!device.features.has("core-features-and-limits")) {
  // Compatibility mode restrictions validation rules will apply.
}

تمت إزالة سمتَي GPUAdapter التجريبيتين featureLevelو isCompatibilityMode لصالح ميزة "core-features-and-limits". يمكنك الاطّلاع على المشكلة 395855516.

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

تمت إعادة تسمية تعداد حالة معاودة الاتصال InstanceDropped إلى CallbackCancelled لتوضيح أنّه تم إلغاء معاودة الاتصال، ولكن قد تظل المعالجة في الخلفية المرتبطة بالحدث، مثل تجميع مسار العرض، قيد التشغيل. الاسم الجديد أكثر قابلية للتطبيق بشكل عام، في حال تمت إضافة آلية إلغاء أخرى لاحقًا. يمكنك الاطّلاع على المشكلة 520.

تمت إعادة تسمية تعداد wgpu::PopErrorScopeStatus::EmptyStack الذي يشير إلى أنّه تعذّر إزالة نطاق الخطأ من المكدّس إلى wgpu::PopErrorScopeStatus::Error (وهو أيضًا أكثر قابلية للتطبيق بشكل عام). تتضمّن معاودة الاتصال الآن أيضًا رسالة شرح خطأ مقابلة للمساعدة في تحديد المشاكل وحلّها. يمكنك الاطّلاع على المشكلة 369.

لا يغطي هذا المقال سوى بعض النقاط الرئيسية. يمكنك الاطّلاع على القائمة الشاملة لعمليات الإرسال.

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

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

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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