Mesa (computer graphics)

From Wikipedia, the free encyclopedia
  (Redirected from Mesa 3D (OpenGL))
Jump to: navigation, search
Mesa
Original author(s) Brian Paul
Developer(s) Mesa Project
Initial release August 1993; 21 years ago (1993-08)[1]
Stable release 10.3.3 / November 8, 2014; 12 days ago (2014-11-08)[2]
Preview release 10.4 RC1 / November 18, 2014; 2 days ago (2014-11-18)[3]
Development status active
Written in C, C++, Assembly[4]
Operating system Cross-platform (Linux, BSDs, Haiku, et al.)
Type Graphics library
License MIT License[5]
Website mesa3d.org

Mesa is a collection of free and open-source libraries that implement several rendering as well as video acceleration APIs related to hardware-accelerated 3D rendering, 3D computer graphics and GPGPU, the most prominent being OpenGL. Mesa is hosted at freedesktop.org and used on Linux, BSD and other operating systems. Additionally to the APIs, Mesa also harbors most of the available free and open-source graphics device drivers. The development of Mesa started in August 1993 by Brian Paul, who still maintains the project, by now containing numerous contributions from various other people and companies worldwide, due to its broad adoption. Crowdfunding has been successfully used to partially drive development of Mesa.[6]

Software architecture[edit]

Video games outsource rendering calculations to the GPU over OpenGL in real-time. Shaders are written in OpenGL Shading Language and compiled. The compiled programs are executed on the GPU.
Illustration of the Linux graphics stack: DRM & libDRM, Mesa 3D. Display server belongs to the windowing system and is not necessary e.g. for gaming.

Implementations of rendering APIs[edit]

The free implementations of Wayland rely upon the Mesa implementation of EGL. The special library called libwayland-EGL, written to accommodate access to the framebuffer, should be have been made obsoleted by EGL 1.5 release. On the GDC 2014, AMD was exploring a strategy change towards using DRM instead of their in-kernel blob.[7]

Mesa is known as housing implementation of graphic APIs. Historically the main API that Mesa has implemented is OpenGL, along with other Khronos Group related specifications (like OpenVG, OpenGL ES or recently EGL). But Mesa can implement other APIs and indeed it did with Glide. There had been patches to support Direct3D Windows API, but neither of those are currently in the main line.

The supported version of the different graphic APIs depends on the driver, because each hardware driver has its own implementation (and therefore status). This is specially true for DRI drivers, while the Gallium3D drivers share common code that tend to homogenize the supported extensions and versions.

Mesa 10 complies with OpenGL 3.3, for Intel, AMD/ATI and Nvidia GPU hardware. It has not yet achieved full OpenGL 4 compliance at any level.[8] Mesa maintains a support matrix with the status of the current OpenGL 3 conformance.[9]

API OpenGL OpenGL ES OpenVG EGL GLX Glide Direct3D
Current Version Date 4.5
2014-08-11
3.1
2014-03-17
1.1
2008-12-03
1.5
2014-03-19
1.4
2005-12-16
3.10
2013-04-03
11.2
2011-09-13
Current stable version: 10.3 (2014-09-19)[10] 3.3[11] 3.0 1.1 1.4 1.4 deprecated 9.0c
Older version, yet still supported: 10.2 (2014-06-06)[12] 3.3[13] 3.0 1.1 1.4 1.4 deprecated 9.0c
Older version, yet still supported: 10.1 (2014-03-04)[14] 3.3[15] 3.0 1.1 1.4 1.4 deprecated 9.0c
Older version, yet still supported: 10.0 (2013-11-30)[16] 3.3[17] 3.0 1.1 1.4 1.4 deprecated 9.0c
Older version, yet still supported: 9.0 (2012-10-08) 3.1[18] 2.0 1.1 1.4 1.4  ?  ?
Old version, no longer supported: 8.0 (2012-02-08) 3.0 2.0 1.1 1.4 1.4  ?  ?
Old version, no longer supported: 7.0 (2007-06-22) 2.1 N/A N/A N/A 1.4  ?  ?
Old version, no longer supported: 6.0 (2004-01-06) 1.5 N/A N/A N/A 1.3  ?  ?
Old version, no longer supported: 5.0 (2002-11-13) 1.4 N/A N/A N/A 1.3  ?  ?
Old version, no longer supported: 4.0 (2001-10-22) 1.3 N/A N/A N/A 1.3  ?  ?
Legend:
Old version
Older version, still supported
Latest version
Latest preview version
Future release

There has also been a Direct3D 9 state tracker since July, 2013. [19] Note that due to modularized nature of OpenGL, Mesa actually support extensions from newer versions of OpenGL without claiming full support for them. (Eg. as of 2014-10 Mesa development branch 10.4 support OpenGL 3.3 Core Profile, but also 3 out of 12 ARB/KHR extensions that form OpenGL 4.5, and two more extensions are under development.

Generic Buffer Management[edit]

Generic Buffer Management (GBM) is an API which provides a mechanism for allocating buffers for graphics rendering tied to Mesa. GBM is intended to be used as a native platform for EGL on drm or openwfd. The handle it creates can be used to initialize EGL and to create render target buffers.[20]

Mesa GBM is an abstraction of the graphics driver specific buffer management APIs (for instance the various libdrm_* libraries), implemented internally by calling into the Mesa GPU drivers.

For example, the Wayland compositor Weston does its rendering using OpenGL ES 2, which it initializes by calling EGL. Since the server runs on the "bare KMS driver", it uses the EGL DRM platform, which could really be called as the GBM platform, since it relies on the Mesa GBM interface.

Implementations of video acceleration APIs[edit]

There are three possible ways to do the calculations necessary for the encoding and decoding of video streams:

  1. use a codec and do calculations on the CPU
  2. use a codec and do calculations on the 3D rendering engine of the GPU
  3. use a SIP block designed specifically for this task, e.g. PureVideo, Unified Video Decoder, Video Codec Engine, Quick Sync Video, DaVinci, CedarX, Crystal HD, etc.

Utilizing the CPU doesn't require any special support to be present in Mesa, but methods two and three do require explicit support by the graphics device driver and additional special interfaces (APIs) to be used by end-user software to access this hardware, which are shared in Mesa 3D. A couple of APIs for the access of video decoding hardware have been designed, e.g.

One of this interfaces is then used by end-user software, like e.g. VLC media player, GStreamer or HandBrake, to access the video acceleration hardware and make use of it.

Please note, that V4L2 is a kernel-to-user-space interface for video bit streams delivered by webcams or TV tuners.

Nouveau supports PureVideo and provides access to it through VDPAU and partly through XvMC.[21]

The free radeon driver supports Unified Video Decoder and Video Codec Engine through VDPAU and OpenMAX.[22]

Device drivers[edit]

DRI and Gallium3D have different driver models. Both share a lot of free and open-source code

The available free and open-source device drivers for graphic chipsets are "stewarded" by Mesa (because the existing free and open-source implementation of APIs are developed inside of Mesa). Currently there are two frameworks to write graphics drivers: DRI and Gallium3D.

There are device drivers for AMD/ATI R100 to R800, Intel, and Nvidia cards with 3D acceleration. Previously drivers existed for the IBM/Toshiba/Sony Cell APU of the PlayStation 3, S3 Virge & Savage chipsets, VIA chipsets, Matrox G200 & G400, and more.[23]

The free and open-source drivers compete with proprietary closed-source drivers. Depending on the availability of hardware documentation and man-power, the free and open-source driver lag behind more or less in supporting 3D acceleration of new hardware. Also, 3D rendering performance is usually significantly slower [1][2][3][4][5], with some notable exceptions, where the free and open-source driver perform better than the vendor drivers.

Direct Rendering Infrastructure (DRI)[edit]

At the time 3D graphics cards became more mainstream for PCs, individuals partly supported by some companies began working on adding more support for hardware-accelerated 3D rendering to Mesa.[when?] The Direct Rendering Infrastructure (DRI) was one of these approaches to interface Mesa, OpenGL and other 3D rendering API libraries with the device drivers and hardware. After reaching a basic level of usability, DRI support was officially added to Mesa. This significantly broadened the available range of hardware support achievable when using the Mesa library.[24]

With adapting to DRI, the Mesa library finally took over the role of the front end component of a full scale OpenGL framework with varying backend components that could offer different degrees of 3D hardware support while not dropping the full software rendering capability. The total system used many different software components.[24]

While the design requires all these components to interact carefully, the interfaces between them are relatively fixed. Nonetheless, as most components interacting with the Mesa stack are open source, experimental work is often done through altering several components at once as well as the interfaces between them. If such experiments prove successful, they can be incorporated into the next major or minor release. That applies e.g. to the update of the DRI specification developed in the 2007-2008 timeframe. The result of this experimentation, DRI2, operates without locks and with improved back buffer support. For this, a special git branch of Mesa was created.[25]

Gallium3D[edit]

Main article: Gallium3D

Gallium3D was developed by Tungsten Graphics as a means to simplify the writing of device drivers and also to achieve maximum portability of them, without having to rewrite the source code. The main disadvantage is, that by introducing additional interfaces, namely the Gallium3D WinSys Interface, the full capabilities of the underlying hardware can not be accessed by the device drivers.[citation needed]

Software renderer[edit]

Mesa also contains an implementation of software rendering that allows shaders to run on the CPU as a fallback when no graphics hardware accelerators are present. The old software rasterizer known as softpipe has been replaced with llvmpipe which uses the LLVM compiler back-end to generate CPU code at runtime.[26][27]

Mega driver[edit]

Mega driver was proposed by Emil Velikov. The concept boils down to bundling multiple drivers into a single big (hence the "mega") shared library.[28] The state trackers for VDPAU and XvMC have become separate libraries.[29]

Performance[edit]

History[edit]

Project initiator Brian Paul was a graphics hobbyist. He thought it would be fun to implement a simple 3D graphics library using the OpenGL API, which he might then use instead of VOGL (very ordinary GL Like Library).[1] Beginning in 1993, he spent eighteen months of part-time development before he released the software on the Internet. The software was well received, and people began contributing to its development. Mesa started off by rendering all 3D computer graphics on the CPU. Despite this, the internal architecture of Mesa was designed to be open for attaching to graphics processor-accelerated 3D rendering. In this first phase, rendering was done indirectly in the display server, leaving some overhead and noticeable speed lagging behind the theoretical maximum. The Diamond Monster 3D, using the Voodoo Graphics chipset, was one of the first 3D hardware devices supported by Mesa.

The first true graphics hardware support was added to Mesa in 1997, based upon the Glide API for the once new 3dfx Voodoo I/II graphics cards and their successors.[24] A major problem of using Glide as the acceleration layer was the habit of Glide to run full screen, which was only suitable for computer games. Further, Glide took the lock of the screen memory, and thus the display server was blocked from doing any other GUI tasks.[30]

In 2014, LunarG, a United States based private computer software company founded in 2009 that specializes in 3D driver development, enhancements and tuning,[31] received funding from Valve to explore the possibility of game performance improvements using LunarGLASS technology in the Mesa driver.[32] This led to a performance breakthrough for Intel's Mesa driver.[33]

See also[edit]

References[edit]

  1. ^ a b "Mesa Introduction". Mesa Team. Retrieved 2013-01-24. 
  2. ^ "Mesa 10.3.3 release notes". 
  3. ^ "Mesa 10.4 RC1 release notes". 
  4. ^ "Mesa". Ohloh. Retrieved 2014-11-05. 
  5. ^ "Mesa3D license". 
  6. ^ "Improve OpenGL support for the Linux Graphics Drivers - Mesa". Indiegogo. 2013-12-11. 
  7. ^ "AMD exploring new Linux driver Strategy". 2014-03-22. Retrieved 2014-03-23. 
  8. ^ "Nine Reasons Mesa 9.0 Is Disappointing For End-Users". 2012-10-09. 
  9. ^ http://cgit.freedesktop.org/mesa/mesa/tree/docs/GL3.txt
  10. ^ "[Mesa-announce] Mesa 10.3 released". 
  11. ^ "Mesa 10.2 features". Phoronix. 2014-06-06. 
  12. ^ "[Mesa-announce] Mesa 10.2 released". 
  13. ^ "Mesa 10.2 features". Phoronix. 2014-06-06. 
  14. ^ "[Mesa-announce] Mesa 10.1 released". 
  15. ^ "Mesa 10.1 features". Phoronix. 2014-03-05. 
  16. ^ "[Mesa-announce] Mesa 10.0 released". 
  17. ^ "http://www.phoronix.com/scan.php?page=news_item&px=MTQ5NjA". 
  18. ^ http://www.mesa3d.org/relnotes/9.0.html
  19. ^ http://www.phoronix.com/scan.php?page=news_item&px=MTQxMjk
  20. ^ "libgbm in the Debian repositories". 
  21. ^ "Nouveau Video Acceleration". freedesktop.org. 
  22. ^ "Radeon Feature Matrix". freedesktop.org. 
  23. ^ Direct Rendering Infrastructure Status Page on freedesktop.org
  24. ^ a b c Brian Paul (2000-08-10). "Introduction to the Direct Rendering Infrastructure". dri.sourceforge.net. Retrieved 2012-01-25. 
  25. ^ "DRI2". X.org. Retrieved 2012-01-25. 
  26. ^ "LLVMpipe: OpenGL With Gallium3D on Your CPU". Phoronix.com. 2010-04-30. Retrieved 2014-11-04. 
  27. ^ "llvmpipe". mesa3d.org. Retrieved 2014-11-04. 
  28. ^ "Megadrivers galore". freedesktop.org. 2014-06-17. 
  29. ^ "VDPAU & XvMC state trackers are now separate libraries". 2014-06-23. 
  30. ^ "What's the relationship between Glide and DRI?". dri.freedesktop.org. Retrieved 2012-01-25. 
  31. ^ "Services - LunarG". LunarG. Retrieved 2014-09-17. 
  32. ^ Dawe, Liam (2014-06-08). "Valve Are Funding A Big Change To Mesa, Should Improve Linux Graphical Performance". GamingOnLinux. Retrieved 2014-09-17. 
  33. ^ Larabel, Michael (5 November 2014). "Major Performance Breakthrough Discovered For Intel's Mesa Driver". Phoronix. Retrieved 9 November 2014. 

External links[edit]

Various layers within Linux, also showing separation between the userland and kernel space
User mode User applications For example, bash, LibreOffice, Apache OpenOffice, Blender, 0 A.D., Mozilla Firefox, etc.
Low-level system components: System daemons:
systemd, runit, logind, networkd, soundd...
Windowing system:
X11, Wayland, Mir, SurfaceFlinger (Android)
Other libraries:
GTK+, Qt, EFL, SDL, SFML, FLTK, GNUstep, etc.
Graphics:
Mesa 3D, AMD Catalyst, ...
C standard library open(), exec(), sbrk(), socket(), fopen(), calloc(), ... (up to 2000 subroutines)
glibc aims to be POSIX/SUS-compatible, uClibc targets embedded systems, bionic written for Android, etc.
Kernel mode Linux kernel stat, splice, dup, read, open, ioctl, write, mmap, close, exit, etc. (about 380 system calls)
The Linux kernel System Call Interface (SCI, aims to be POSIX/SUS-compatible)
Process scheduling
subsystem
IPC
subsystem
Memory management
subsystem
Virtual files
subsystem
Network
subsystem
Other components: ALSA, DRI, evdev, LVM, device mapper, Linux Network Scheduler, Netfilter
Linux Security Modules: SELinux, TOMOYO, AppArmor, Smack
Hardware (CPU, main memory, data storage devices, etc.)