В
الهدف الرئيسي لـ WebGPU هو توفير واجهة برمجة آمنة وسهلة الاستخدام ومحمولة وعالية الأداء لمنصة الويب للاستفادة من تقنيات وإمكانيات الرسومات ثلاثية الأبعاد التي توفرها واجهات برمجة تطبيقات رسومات النظام الحديثة، مثل Direct3D 3 على Windows وMetal على نظام التشغيل macOS، وVulkan على نظام التشغيل Linux. من الناحية النظرية، يختلف WebGPU عن WebGL بنفس الطريقة التي يختلف بها Vulkan عن OpenGL، وفي الوقت نفسه لا يعتمد على واجهة برمجة تطبيقات رسومية محددة، ولكنه طبقة عالمية تستخدم عمومًا نفس العناصر الأولية ذات المستوى المنخفض الموجودة في Vulkan، المعادن وDirect12D.
يوفر WebGPU لتطبيقات JavaScript مستوى تحكم أقل في تنظيم الأوامر ومعالجتها ونقلها إلى وحدة معالجة الرسومات، وإدارة الموارد المرتبطة والذاكرة والمخازن المؤقتة وكائنات النسيج وتظليل الرسومات المجمعة. يتيح لك هذا الأسلوب تحقيق أداء أعلى لتطبيقات الرسومات عن طريق تقليل التكاليف العامة وزيادة كفاءة العمل مع وحدة معالجة الرسومات.
يتيح WebGPU إمكانية إنشاء مشاريع ثلاثية الأبعاد معقدة كاملة للويب، والتي لا تعمل بشكل أسوأ من البرامج المستقلة التي تصل مباشرة إلى Vulkan أو Metal أو Direct3D، ولكنها غير مرتبطة بمنصات محددة. يوفر WebGPU أيضًا إمكانات إضافية عند نقل برامج الرسومات الأصلية إلى نموذج ممكن على الويب من خلال استخدام تقنية WebAssembly. بالإضافة إلى الرسومات ثلاثية الأبعاد، يغطي WebGPU أيضًا الإمكانات المتعلقة بتفريغ العمليات الحسابية إلى وحدة معالجة الرسومات ودعم تطوير التظليل. تظليل
يستخدم WebGPU إدارة منفصلة للموارد، والأعمال التحضيرية، ونقل الأوامر إلى وحدة معالجة الرسومات (في WebGL، كان كائن واحد مسؤولاً عن كل شيء في وقت واحد). يتم توفير ثلاثة سياقات منفصلة:
GPUDevice لإنشاء الموارد مثل القوام والمخازن المؤقتة؛ GPUCommandEncoder لتشفير الأوامر الفردية، بما في ذلك مراحل العرض والحساب؛ سيتم وضع GPUCommandBuffer في قائمة الانتظار للتنفيذ على وحدة معالجة الرسومات. يمكن عرض النتيجة في منطقة مرتبطة بواحد أو أكثر من عناصر اللوحة، أو معالجتها بدون إخراج (على سبيل المثال، عند تشغيل مهام الحوسبة). يؤدي فصل المراحل إلى تسهيل فصل عمليات إنشاء الموارد وإعدادها إلى معالجات مختلفة يمكن تشغيلها على سلاسل عمليات مختلفة.
الفرق الثاني بين WebGPU وWebGL هو أسلوب مختلف في التعامل مع الحالات. يقدم WebGPU كائنين - GPURenderPipeline وGPUComputePipeline، اللذين يسمحان لك بدمج الحالات المختلفة المحددة مسبقًا بواسطة المطور، مما يسمح للمتصفح بعدم إضاعة الموارد في أعمال إضافية، مثل إعادة ترجمة التظليل. تتضمن الحالات المدعومة ما يلي: التظليل، والمخزن المؤقت الرأسي وتخطيطات السمات، وتخطيطات المجموعة اللاصقة، والمزج، والعمق والأنماط، وتنسيقات إخراج ما بعد العرض.
الميزة الثالثة لـ WebGPU تسمى نموذج الربط إلى حد كبير
يذكرنا بأدوات تجميع الموارد الموجودة في Vulkan.
لتجميع الموارد معًا، يوفر WebGPU كائن GPUBindGroup، والذي يمكن ربطه بكائنات أخرى مماثلة لاستخدامه في التظليل أثناء كتابة الأوامر. يتيح إنشاء مثل هذه المجموعات للسائق تنفيذ الإجراءات التحضيرية اللازمة مسبقًا، ويسمح للمتصفح بتغيير روابط الموارد بين مكالمات السحب بشكل أسرع بكثير. يمكن تحديد تخطيط روابط الموارد مسبقًا باستخدام كائن GPUBindGroupLayout.
في Firefox، لتمكين WebGPU في about:config، يوجد إعداد "dom.webgpu.enabled". يتطلب عرض CanvasContext أيضًا تمكين التركيب
المصدر: opennet.ru