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

François Beaufort
François Beaufort

إتاحة تجريبية لـ OpenGL ES على Android

يمكنك الآن الوصول إلى GPUAdapter من الخلفية المستندة إلى OpenGL ES عند طلب وضع التوافق التجريبي مع WebGPU في Chrome لنظام Android. ويكون ذلك مفيدًا بشكل خاص لأجهزة Android التي لا تتوافق مع الإصدار 1.1 من Vulkan أو الإصدارات الأحدث. اطّلِع على المثال التالي والمشكلة dawn:1545.

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
تعرض صفحة تقرير WebGPU معلومات GPUAdapter من الخلفية OpenGL ES على جهاز Android.
معلومات محوّل OpenGL ES في webgpureport.org

بما أنّ هذه الميزة لا تزال في مرحلة تجريبية، عليك اتّباع الخطوات التالية:

  1. فعِّل علامات Chrome التالية: "Unsafe WebGPU Support" و"WebGPU Developer Features" و "Enable command line on non-rooted devices".
  2. فعِّل خيار "تصحيح أخطاء USB" على جهاز Android.
  3. وصِّل جهاز Android بمحطة العمل، وشغِّل adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' لتفضيل الخلفية البرمجية OpenGL ES على Vulkan، ثم أعِد تشغيل Chrome.

سمة معلومات GPUAdapter

يمكن الآن الحصول على معلومات تكشف الهوية عن محوّل بطريقة متزامنة باستخدام السمة info في GPUAdapter. في السابق، كان استدعاء طريقة requestAdapterInfo() غير المتزامنة في GPUAdapter‎ هو الطريقة الوحيدة للحصول على معلومات المحوّل، ولكن تمت إزالة requestAdapterInfo() من مواصفات WebGPU وسيتم إزالتها من Chrome في وقت لاحق من هذا العام لإتاحة الوقت الكافي لمطوّري الويب لإجراء عملية الانتقال اللازمة. اطّلِع على المثال التالي، حالة Chrome، والمشكلة 335383516.

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

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

تحسينات على إمكانية التشغيل التفاعلي في WebAssembly

للسماح بتمرير مجموعات WebAssembly مباشرةً إلى WebGPU، لم يعُد حجم وسيطات BufferSource التالية محصورًا بـ 2 غيغابايت: dynamicOffsetsData في setBindGroup()، والمصدر data في writeBuffer()، والمصدر data Pin writeTexture(). يمكنك الاطّلاع على المشكلة 339049388.

تحسين أخطاء برنامج ترميز الأوامر

ستتضمّن بعض أخطاء التحقّق من الصحة التي تظهر من أدوات ترميز الأوامر الآن معلومات سياقية محسّنة. على سبيل المثال، أدت محاولة بدء عملية حسابية أثناء استمرار عملية العرض في حدوث الخطأ التالي.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

يصف هذا الخطأ سبب حدوثه، ولكنّه لا يشير إلى المكالمة التي تسبّبت في خطأ التحقّق من الصحة. يعرض الخطأ التالي الرسائل المحسّنة التي تتضمّن الأمر الذي أدّى إلى حدوث الخطأ. يمكنك الاطّلاع على التغيير 192245.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

تعديلات الفجر

لم يعُد webgpu.h C API يعرض wgpuSurfaceGetPreferredFormat()، وهو ما يعادل wgpu::Surface::GetPreferredFormat() في لغة C من Dawn. بدلاً من ذلك، استخدِم wgpu::Surface::GetCapabilities() للحصول على قائمة بالتنسيقات المتوافقة، ثم استخدِم formats[0] للحصول على تنسيق النسيج المفضّل لهذا السطح. في الوقت الحالي، يؤدي استدعاء wgpu::Surface::GetPreferredFormat() إلى ظهور تحذير بشأن الإيقاف النهائي. يمكنك الاطّلاع على المشكلة رقم 290.

يمكن الآن الوصول إلى استخدامات النسيج المتوافقة لسطح ما من خلال wgpu::SurfaceCapabilities::usages عند طلب wgpu::Surface::GetCapabilities(). من المتوقّع أن تتضمّن دائمًا wgpu::TextureUsage::RenderAttachment. يمكنك الاطّلاع على المشكلة 301.

هذا يشمل بعض النقاط الرئيسية فقط. اطّلِع على قائمة عمليات الدمج الشاملة.

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

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

‫Chrome 155-156

‫Chrome 153-154

‫Chrome 151-152

‫Chrome 149-150

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