Mesa3D

از ویکی فارسی اوبونتو
پرش به: ناوبری، جستجو

Mesa یا Mesa3D ویا Mesa 3D Graphics Library، یک پیاده‌سازی متن باز از API های گرافیک 3D و 2D است. از جمله این API ها میتوان به OpenGL ،Vulkan، EGL و... اشاره کرد. Mesa یک برنامه سمت کاربر است و وظیفه دریافت دستورات از برنامه ها، پردازش دستورات و انتقال آنها را به گرداننده[4] گرافیکی را دارد.

بیشترین استفاده از Mesa توسط کاربران کارت گرافیک های AMD و پردازشگر های گرافیکی Intel است. چون AMD مشتریان را به سمت استفاده از ماژول هسته amdgpu سوق می‌دهد و همچنین intel فقط از Mesa پشتیبانی می‌کند. همچنین تلاش برای ایجاد جایگزین متن باز گرداننده[4] انحصاری NVIDIA نیز در حال انجام است و به آن Nouveau می‌گویند.

علاوه بر برنامه های کاربردی سه بعدی مانند بازی ها، مدیر نمایشگر های مدرن مانند X.org [1] و تمام میزکار های Wayland از OpenGL/EGL استفاده می‌کنند، بنابراین Mesa نقش مهمی بر عهده دارد.

Mesa توسط freedesktop.org میزبانی و پشتیبانی می‌شود. این پروژه در آگوست 1993 (مرداد ۱۳۷۲) توسط برایان پل (که هنوز در این پروژه فعال است)، راه اندازی شد. Mesa متعاقباً به طور گسترده مورد استفاده قرار گرفت و اکنون شامل مشارکت‌های متعددی از افراد و شرکت‌های مختلف در سراسر جهان است از جمله تولیدکنندگان کارت های گرافیک، شرکت ردهت و... اکثر بودجه Mesa توسط شرکت ها و کمک های مردمی تامین می‌شود.

بررسی اجمالی

Mesa3D به عنوان ارائه دهنده پیاده سازی های متن باز و آزاد از API های گرافیک 2D و 3D در سیستم عامل های یونیکس مانند شناخته می شود[2]. مهم ترین API پیاده سازی شده توسط میسا، OpenGL است. البته امروزه Mesa3D از رابط های زیادی پشتیبانی می‌کند به عتوان مثال:[3] Vulkan، EGL، OpenGL|ES، Glide و...

گرداننده[4] های Mesa3D

گرداننده[4] ها برای سخت افزار

AMD R600: گرداننده[4]ای برای پشتیبانی از سری AMD Radeon HD 2000 که به طور رسمی توسط AMD پشتیبانی می‌شود. این گرداننده از OpenGL پشتیبانی می‌کند.

AMD Radeonsi: گرداننده[4]ای برای پشتیبانی از کارت گرافیک های برپایه نسل اول GCN و جدیدتر[6][7] که به طور رسمی توسط AMD پشتیبانی می‌شود. این گرداننده[4] از OpenGL و OpenCL پشتیبانی می‌کند.

AMD RADV: گرداننده[4]ای برای پشتیبانی از کارت گرافیک های برپایه نسل اول GCN و جدیدتر[6][7] که به طور رسمی توسط AMD پشتیبانی نمی‌شود و براساس مستندات متن‌باز AMD ساخته شده است.

Broadcom V3D: گرداننده[4] ای برای پشتیبانی از تراشه های گرافیکی Broadcom's VC5 و جدیدتر[8] که به طور رسمی توسط Broadcom پشتیبانی می‌شود. این گرداننده[4] از OpenGL پشتیبانی می‌کند.

Broadcom V3DV: گرداننده[4] ای برای پشتیبانی از تراشه های گرافیکی Broadcom's VC5 و جدیدتر[8] که به طور رسمی توسط Broadcom پشتیبانی می‌شود. این گرداننده[4] از Vulkan پشتیبانی می‌کند[9].

Broadcom VC4: گرداننده[4] ای برای پشتیبانی از تراشه گرافیکی Broadcom's VC4[10] که به طور رسمی توسط Broadcom پشتیبانی می‌شود. این گرداننده[4] از OpenGL پشتیبانی می‌کند.

Etnaviv: گرداننده[4] ای برای پشتیبانی از تراشه های گرافیکی سری Vivante GCxxx[11] که به طور رسمی توسط Vivante پشتیبانی نمی‌شود و براساس مهندسی معکوس و توسط جامعه نوشته شده است. این گرداننده[4] از OpenGL|ES پشتیبانی‌ می‌کند.

Freedreno: گرداننده[4] ای برای پشتیبانی از تراشه های گرافیکی Qualcomm Adreno[12] که به طور رسمی توسط Qualcomm پشتیبانی نمی‌شود و براساس مهندسی معکوس و توسط جامعه نوشته شده است. این گرداننده[4] از OpenGL|ES و Vulkan پشتیبانی می‌کند.

Intel ANV: گرداننده[4] ای برای پشتیبانی از گرافیک های مجتمع اینتل نسل ۷[13][14] و جدیدتر که به طور رسمی توسط اینتل پشتیبانی می‌شود. این گرداننده[4] از Vulkan پشتیبانی می‌کند.

Intel i965: گرداننده[4] ای برای پشتیبانی از گرافیک های مجتمع اینتل نسل ۴ تا نسل ۸[14][15] که به طور رسمی توسط اینتل پشتیبانی می‌شود. این گرداننده[4] از OpenGL پشتیبانی می‌کند.

Intel Iris: گرداننده[4] ای برای پشتیبانی از گرافیک های مجتمع اینتل نسل ۸ و جدیدتر[14][16] که به طور رسمی توسط اینتل پشتیبانی می‌شود. این گرداننده[4] از OpenGL پشتیبانی می‌کند.

Lima: گرداننده[4] ای برای پشتیبانی از تراشه های گرافیکی خانواده [17]ARM Mali-4xx که به طور رسمی توسط ARM پشتیبانی نمی‌شود و براساس مهندسی معکوس و توسط جامعه نوشته شده است. این گرداننده[4] از OpenGL|ES پشتیبانی می‌کند.

Nouveau: گرداننده[4] ای برای پشتیبانی از کارت گرافیک ها و تراشه های NVIDIA[18] که به طور رسمی توسط NVIDIA پشتیبانی نمی‌شود و براساس مهندسی معکوس و توسط جامعه نوشته شده است. این گرداننده[4] از OpenGL پشتیبانی می‌کند.

Panfrost: گرداننده[4] ای برای پشتیبانی از تراشه های گرافیکی ARM Mali Midgard و [19]Bifrost که به طور رسمی توسط ARM پشتیبانی نمی‌شود و براساس مهندسی معکوس و توسط جامعه نوشته شده است. این گرداننده[4] از OpenGL|ES پشتیبانی می‌کند.

گرداننده[4] ها برای سخت افزار های قدیمی[20]

AMD R200: گرداننده[4] ای برای کارت گرافیک های سری AMD Radeon R200

AMD R300: گرداننده[4] ای برای کارت گرافیک های سری AMD Radeon R300

Intel i915: گرداننده[4] ای برای گرافیک های مجتمع نسل چهار و قدیمی تر اینتل

گرداننده[4] ها برای رندرینگ نرم افزاری

LLVMpipe: گرداننده[4] ای برای استفاده از قدرت پردازنده مرکزی(CPU) برای کار های گرافیکی. این گرداننده کد ها را با LLVM ترجمه (کامپایل) می‌کند و بعد آن هارا با LLVM IR برروی پردازنده اجرا می‌کند. این گرداننده در حال حاضر با پردازنده های معماری x86، x86_64 و ppc64le سازگار است. این گرداننده از OpenGL پشتیبانی می‌کند.

Softpipe: گرداننده[4] ای برای استفاده از قدرت پردازنده مرکزی(CPU) برای کار های گرافیکی. این گرداننده کد های از پیش ترجمه شده را برروی پردازنده اجرا می‌کند و از این جهت بسیار ضعیف تر از LLVMpipe است. این گرداننده از OpenGL پشتیبانی می‌کند.

گرداننده[4] های لایه ای

این بخش نیاز به تکمیل شدن دارد. به زودی تکمیل می‌شود.

نکات و پی‌نوشت

[1]یک استثنا در این مورد وجود دارد. در صورتی که X از exa برای رندرینگ استفاده کند از OpenGL/EGL استفاده نمی‌شود، تنها در صورتی از OpenGL/EGL استفاده می‌شود که از GlamorGL برای رندرینگ استفاده شده باشد.

[2]البته Mesa در دیگر سیستم عامل ها نیز (مانند ویندوز) کار می‌کند(به عنوان مثال Mesa3D گرداننده[4] ای دارد که می‌تواند OpenGL را از Direct3D 12 به سیستم عامل های موجود در WSL ارائه دهد که در زیرسیستم ویندوز برای لینوکس، در مایکروسافت ویندوز موجود است[5].) اما معمولا به آن شناخته نمی‌شود.

[3]Glide در حال حاضر منسوخ شده است.

[4]درایور = گرداننده = راه انداز

[5]اطلاعات بیشتر: https://docs.mesa3d.org/drivers/d3d12.html

[6]پشتیبانی از تمام کارت گرافیک های برپایه GCN نسل اول، دوم، سوم، چهارم، پنجم و RDNA نسل اول و دوم

[7]پشتیبانی از نسل اول و دوم GCN توسط radoensi به طور آزمایشی است و به طور پیش فرض از r600 استفاده می‌شود. برای استفاده از radeonsi،‌ باید به طور دستی کرنل را تنظیم کنید. اطلاعات بیشتر در ویکی آرچ: https://wiki.archlinux.org/title/AMDGPU#Enable_Southern_Islands_(SI)_and_Sea_Islands_(CIK)_support

[8]این تراشه گرافیکی در Raspberry Pi 4 استفاده شده است.

[9]گرداننده[4] های Broadcom V3D و Broadcom V3DV باهم تداخل ندارند و با یکدیگر کار می‌کنند.

[10]این تراشه در دیگر Raspberry Pi ها استفاده می‌شود.

[11]این سری از تراشه ها معمولا در سامانه های تعبیه شده استفاده می‌شوند.

[12]این گرداننده[4] از سری A2xx تا سری A6xx را پشتیبانی می‌کند.

[13]این گرداننده[4] از گرافیک های مجتمع نسل پنجم پردازنده های اینتل و جدیدتر پشتیبانی می‌کند.

[14]این نسل ها بر اساس گرافیک ها تعیین شده اند نه بر اساس نسل پردازنده ها. برای مثال از پردازشگر های مجتمع نسل هشتم اینتل در پردازنده های نسل پنجم اینتل (Broadwell) استفاده شده است. اطلاعات بیشتر:https://dri.freedesktop.org/wiki/IntelCodenames/

[15]این گرداننده[4] از گرافیک های مجتمع پردازنده های نسل سوم و چهارم پشتیبانی می‌کند.

[16]این گرداننده[4] از گرافیک های مجتمع پردازنده های نسل پنجم و جدیدتر پشتیبانی می‌کند.

[17]برای اطلاع از مدل های مورد پشتیبانی اینجا را ببینید: https://docs.mesa3d.org/drivers/lima.html

[18]ابرای اطلاع از مدل های مورد پشتیبانی و قابلیت های پشتیبانی شده اینجا را ببینید: https://nouveau.freedesktop.org

[19]برای اطلاع از مدل های مورد پشتیبانی اینجا را ببینید: https://docs.mesa3d.org/drivers/panfrost.html

[20]این گرداننده[4] ها در Mesa3D حضور دارند اما هیچ توسعه فعالی ندارند و حتی بعضی از آنها رها شده اند.

منابع

Mesa3D: https://mesa3d.org

ویکی پدیای انگلیسی: https://en.wikipedia.org/wiki/Mesa_(computer_graphics)

اسناد Mesa: https://docs.mesa3d.org

nouveau: https://nouveau.freedesktop.org

پیوندهای مفید

Mesa3D: https://mesa3d.org

مرکز مستندات و اسناد Mesa3D: https://docs.mesa3d.org

مقاله Linux DRM در ویکی پدیا انگلیسی: https://en.wikipedia.org/wiki/Direct_Rendering_Manager

مقاله DRI در ویکی پدیا انگلیسی: https://en.wikipedia.org/wiki/Direct_Rendering_Infrastructure