wgpu
هي واجهة برمجة واجهة برمجة واجهة برمجية عبر منصة وآمنة ونقية. يعمل أصلاً على Vulkan ، Metal ، D3D12 ، و OpenGL ؛ وعلى قمة WebGL2 و WebGPU على WASM.
يعتمد API على معيار WebGPU. إنه بمثابة جوهر تكامل WebGPU في Firefox و Deno.
يستضيف المستودع المكتبات التالية:
الثنائيات التالية:
naga
.cts_runner
- WebGPU TESTORMANCE TEST SUITE Runner باستخدام deno_webgpu
.player
- تطبيق مستقل لإعادة تشغيل آثار API.للحصول على نظرة عامة على جميع المكونات في النظام البيئي GFX-RS ، راجع الصورة الكبيرة.
يمكن العثور على أمثلة الصدأ في WGPU/أمثلة. يمكنك تشغيل الأمثلة على Native with cargo run --bin wgpu-examples <example>
. انظر قائمة الأمثلة.
لتشغيل الأمثلة في المتصفح ، قم بتشغيل cargo xtask run-wasm
. ثم افتح http://localhost:8000
في متصفحك ، ويمكنك اختيار مثال لتشغيله. بطبيعة الحال ، من أجل عرض أي من الأمثلة القائمة على WebGPU ، تحتاج إلى التأكد من دعم المتصفح الخاص بك.
إذا كنت تبحث عن برنامج تعليمي لـ WGPU ، فابحث عن ما يلي:
لاستخدام WGPU في C/C ++ ، تحتاج إلى WGPU-Native.
إذا كنت تبحث عن برنامج تعليمي WGPU C ++ ، فابحث عن ما يلي:
إذا كنت ترغب في استخدام WGPU بلغات أخرى ، فهناك العديد من الارتباطات لـ WGPU-NATIC من لغات مثل Python و D و Julia و Kotlin والمزيد. انظر القائمة.
لدينا مساحة مصفوفة مع بعض الغرف المختلفة التي تشكل مجتمع WGPU:
لدينا ويكي يعمل كقاعدة معرفة.
API | النوافذ | Linux/Android | ماكوس/iOS | الويب (WASM) |
---|---|---|---|---|
فولكان | ✅ | ✅ | ؟ | |
معدن | ✅ | |||
DX12 | ✅ | |||
OpenGL | ؟ (GL 3.3+) | ؟ (gl es 3.0+) | ؟ | ؟ (WebGL2) |
WebGPU | ✅ |
✅ = دعم الدرجة الأولى
؟ = Downlevel/أفضل دعم جهد
؟ = يتطلب طبقة ترجمة الزاوية (gl es 3.0 فقط)
؟ = يتطلب طبقة ترجمة moltenvk
= غير مدعوم ، على الرغم من فتحه للمساهمات
يدعم WGPU التظليلات في WGSL و Spir-V و GLSL. كل من HLSL و GLSL لديهما بروملاني لاستهداف spir-v. يمكن استخدام كل لغات التظليل هذه مع أي واجهات خلفية ونحن نتعامل مع جميع التحويلات. بالإضافة إلى ذلك ، فإن دعم مدخلات التظليل هذه لا يزول.
على الرغم من أن WebGPU لا يدعم أي لغة تظليل غير WGSL ، إلا أننا سنقوم تلقائيًا بتحويل تظليلات غير WGSL إذا كنت تعمل على WebGPU.
يتم دعم WGSL دائمًا بشكل افتراضي ، لكن ميزات GLSL و SPIR-V ممكّنة للتجميع في الدعم.
لاحظ أن مواصفات WGSL لا تزال قيد التطوير ، وبالتالي فإن مسودة المواصفات لا تصف بالضبط ما تدعمه wgpu
. انظر أدناه للحصول على التفاصيل.
لتمكين تظليل SPIR-V ، تمكين ميزة spirv
من WGPU. لتمكين تظليل GLSL ، تمكين ميزة glsl
من WGPU.
Angle هي طبقة ترجمة من GLES إلى الخلفية الأخرى التي طورتها Google. نحن ندعم تشغيل الواجهة الخلفية GLES3 الخاصة بنا للوصول إلى دعم منصات DX11 ، والتي لا يمكن الوصول إليها بطريقة أخرى. من أجل تشغيل الزاوية ، يجب تمكين ميزة "الزاوية" ، ومكتبات الزاوية الموضوعة في موقع مرئي للتطبيق. يمكن تنزيل هذه الثنائيات من القطع الأثرية الزاوية GFBUILD ، وقد تكون هناك حاجة إلى تجميع يدوي على MACs مع سيليكون Apple.
على Windows ، تحتاج عمومًا إلى نسخها إلى دليل العمل ، في نفس الدليل القابل للتنفيذ ، أو في مكان ما في طريقك. على Linux ، يمكنك الإشارة إليها باستخدام بيئة LD_LIBRARY_PATH
.
بسبب المعالين المعقدين ، لدينا سياسات MSRV:
d3d12
و naga
و wgpu-core
و wgpu-hal
و wgpu-types
هو 1.76 ، ولكن قد يكون أقل من بقية مساحة العمل في المستقبل. يتم فرضه على CI (في "/.github/workflows/ci.yml") مع متغيرات CORE_MSRV
و REPO_MSRV
. لا يمكن ترقية هذا الإصدار إلا في الإصدارات المكسورة ، على الرغم من أننا نصدر نسخة كسر كل ثلاثة أشهر.
يجب ألا تتطلب صناديق naga
و wgpu-core
و wgpu-hal
و wgpu-types
أبداً MSRV قبل MSRV من Firefox للبناء الليلي ، على النحو الذي تحدده قيمة MINIMUM_RUST_VERSION
في python/mozboot/mozboot/util.py
.
تشترك جميع الاختبارات والمثال في البنية التحتية في نفس مجموعة متغيرات البيئة التي تحدد الواجهة الخلفية/وحدة معالجة الرسومات التي سيتم تشغيلها.
WGPU_ADAPTER_NAME
مع فرعية من اسم المحول الذي تريد استخدامه (على سبيل المثال NVIDIA GeForce 1080ti
سوف يتطابق 1080
WGPU_BACKEND
مع قائمة مفصولة بفاصلة من الخلفية التي تريد استخدامها ( vulkan
أو metal
أو dx12
أو gl
).WGPU_POWER_PREF
مع تفضيل الطاقة لاختيار متى لم يتم تحديد اسم محول معين ( high
أو low
أو none
)WGPU_DX12_COMPILER
مع برنامج التحويل البرمجي للتظليل DX12 ترغب في استخدامه ( dxc
أو fxc
، لاحظ أن dxc
يتطلب dxil.dll
و dxcompiler.dll
ليكون في دليل العمل وإلا فإنه سيعود إلى fxc
)WGPU_GLES_MINOR_VERSION
مع رقم الإصدار OpenGL ES 3 للطلب ( 0
، 1
، 2
أو automatic
).WGPU_ALLOW_UNDERLYING_NONCOMPLIANT_ADAPTER
مع منطقية ما إذا كانت برامج التشغيل غير المتوافقة تم تعدادها ( 0
لخطأ ، 1
للصواب). عند تشغيل CTS ، استخدم المتغيرات DENO_WEBGPU_ADAPTER_NAME
، DENO_WEBGPU_BACKEND
، DENO_WEBGPU_POWER_PREFERENCE
.
لدينا طرق متعددة للاختبار ، كل منها يختبر صفات مختلفة حول WGPU. ندير اختباراتنا تلقائيًا على CI. الحالة الحالية لاختبار CI:
منصة/خلفية | الاختبارات | ملحوظات |
---|---|---|
Windows/DX12 | ✔ | باستخدام الاعوجاج |
Windows/OpenGL | ✔ | باستخدام LLVMPIPE |
ماكوس/المعدن | ✔ | باستخدام عداء الأجهزة |
Linux/Vulkan | ✔ | باستخدام lavapipe |
Linux/OpenGL ES | ✔ | باستخدام LLVMPIPE |
Chrome/WebGL | ✔ | باستخدام SwiftShader |
Chrome/WebGPU | لم يتم إعداده |
نستخدم أداة تسمى cargo nextest
لتشغيل اختباراتنا. لتثبيته ، قم cargo install cargo-nextest
.
لتشغيل مجموعة الاختبار:
cargo xtask test
لتشغيل مجموعة الاختبار على WebGL (غير مكتمل حاليًا):
cd wgpu
wasm-pack test --headless --chrome --no-default-features --features webgl --workspace
سيؤدي ذلك تلقائيًا إلى تشغيل الاختبارات باستخدام متصفح معبأ. قم بإزالة --headless
لتشغيل الاختبارات مع أي متصفح ترغب في http://localhost:8000
.
إذا كنت مستخدمًا وتريد طريقة للمساعدة في المساهمة في WGPU ، فنحن بحاجة دائمًا إلى مزيد من المساعدة في كتابة حالات اختبار.
يتضمن WebGPU مجموعة اختبار المطابقة للتحقق من أن التطبيقات تعمل بشكل صحيح. يمكننا تشغيل هذه CTS ضد WGPU.
لتشغيل CTS ، أولاً ، تحتاج إلى التحقق من ذلك:
git clone https://github.com/gpuweb/cts.git
cd cts
# works in bash and powershell
git checkout $(cat ../cts_runner/revision.txt)
لتشغيل مجموعة معينة من الاختبارات:
# Must be inside the `cts` folder we just checked out, else this will fail
cargo run --manifest-path ../Cargo.toml -p cts_runner --bin cts_runner -- ./tools/run_deno --verbose "<test string>"
للعثور على القائمة الكاملة للاختبارات ، انتقل إلى مشاهد CTS عبر الإنترنت.
يمكن العثور على قائمة اختبارات CTS الممكّنة حاليًا هنا.
من المفترض أن يكون قفص wgpu
هو ترجمة الصدأ الاصطناعية لاتصالات WebGPU API. هذه المواصفات ، إلى جانب لغة التظليل الخاصة بها ، WGSL ، لا تزال في مرحلة "مشروع العمل" ، وبينما تكون الخطوط العريضة العامة مستقرة ، تتغير التفاصيل بشكل متكرر. إلى أن يتم تثبيت المواصفات ، من المحتمل أن يختلف قفص wgpu
ونسخة WGSL التي تنفذها عن ما هو محدد ، حيث ينقلب التنفيذ.
تعتمد بالضبط على WGSL التي تدعمها wgpu
على كيفية استخدامك لها:
عند تشغيل رمز أصلي ، يستخدم wgpu
صندوق NAGA لترجمة رمز WGSL إلى لغة التظليل في واجهة برمجة تطبيقات GPU الأصلية الخاصة بالمنصة. لدى Naga علامة فارقة للحاق بمواصفات WGSL ، ولكن بشكل عام ، لا يوجد ملخص محدث للاختلافات بين NAGA ومواصفات WGSL.
عند التشغيل في متصفح ويب (عن طريق التجميع إلى webassembly) دون تمكين ميزة "webgl"
، تعتمد wgpu
على تطبيق WebGPU الخاص بالمتصفح. يتم نقل تظليل WGSL ببساطة إلى المتصفح ، بحيث يحدد ميزات WGSL التي يمكنك استخدامها.
عند التشغيل في متصفح ويب باستخدام ميزة "webgl"
لـ wgpu
، تستخدم wgpu
NAGA لترجمة برامج WGSL إلى GLSL. يستخدم هذا نفس الإصدار من Naga كما لو كنت تقوم بتشغيل wgpu
كرمز أصلي.
يستخدم WGPU أنظمة الإحداثيات لـ D3D والمعادن:
يجعل | نَسِيج |
---|---|