Jump to content

Mesa (computer graphics)

From Wikipedia, the free encyclopedia
(Redirected from Generic buffer management)

Mesa
Original author(s)Brian Paul
Developer(s)Currently: Igalia, Collabora, Valve, Intel, Google, AMD, VMware
Formerly: Tungsten Graphics[1]
Initial releaseFebruary 1995
Stable release
24.3.0[2] Edit this on Wikidata / 21 November 2024; 3 days ago (21 November 2024)
Preview release
24.3.0-rc2 Edit this on Wikidata / 13 November 2024; 11 days ago (13 November 2024)
Repositoryhttps://gitlab.freedesktop.org/mesa/mesa
Written inC++, C, assembly language
Operating systemCross-platform (BSDs, Haiku, Linux, etc.)
TypeGraphics library
LicenseMIT License
Websitehttps://www.mesa3d.org

Mesa, also called Mesa3D and The Mesa 3D Graphics Library, is an open source implementation of OpenGL, Vulkan, and other graphics API specifications. Mesa translates these specifications to vendor-specific graphics hardware drivers.

Its most important users are two graphics drivers mostly developed and funded by Intel and AMD for their respective hardware (AMD promotes their Mesa drivers Radeon and RadeonSI over the deprecated AMD Catalyst, and Intel has only supported the Mesa driver). Proprietary graphics drivers (e.g., Nvidia GeForce driver and Catalyst) replace all of Mesa, providing their own implementation of a graphics API. An open-source effort to write a Mesa Nvidia driver called Nouveau is developed mostly by the community.

Besides 3D applications such as games, modern display servers (X.org's Glamor or Wayland's Weston) use OpenGL/EGL; therefore all graphics typically go through Mesa.

Mesa is hosted by freedesktop.org and was initiated in August 1993 by Brian Paul, who is still active in the project. Mesa was subsequently widely adopted and now contains numerous contributions from various individuals and corporations worldwide, including from the graphics hardware manufacturers of the Khronos Group that administer the OpenGL specification. For Linux, development has also been partially driven by crowdfunding.[3]

Overview

[edit]
Video games outsource rendering calculations to the GPU over OpenGL in real-time. Shaders are written in OpenGL Shading Language or SPIR-V and compiled on the CPU. 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 have been made obsolete by the EGL 1.5 release. On the GDC 2014, AMD was exploring a strategy change towards using DRM instead of their in-kernel blob.[4]

Mesa is known as housing implementations 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 (deprecated) and Direct3D 9 since July 2013.[5] Mesa is also not specific to Unix-like operating systems: on Windows for example, Mesa provides an OpenGL API over DirectX.

Mesa implements a translation layer between a graphics API such as OpenGL and the graphics hardware drivers in the operating system kernel. 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 especially true for the "classic" drivers, while the Gallium3D drivers share common code that tend to homogenize the supported extensions and versions.

Mesa maintains a support matrix with the status of the current OpenGL conformance[6][7] visualized at mesamatrix.net. Mesa 10 complies with OpenGL 3.3 for Intel, AMD/ATI, and Nvidia GPU hardware. Mesa 11 was announced with some drivers being OpenGL 4.1 compliant.[8]

Mesa 12 contains OpenGL 4.2 and 4.3 and Intel Vulkan 1.0 support.

Mesa 13 brought Intel support for OpenGL 4.4 and 4.5 (all Features supported for Intel Gen 8+, Radeon GCN, Nvidia (Fermi, Kepler), but no Khronos-Test for 4.5-Label) and experimental AMD Vulkan 1.0 support through the community driver RADV. OpenGL ES 3.2 is possible with Intel Skylake (Gen9).[9]

1st stable version of 2017 is 17.0 (new year Counting).[10][11][12] Ready features are certified OpenGL 4.5, OpenGL 4.5 for Intel Haswell,[13][14] OpenGL 4.3 for Nvidia Maxwell and Pascal (GM107+).[15] Huge performance gain was measured with Maxwell 1 (GeForce GTX 750 Ti and more with GM1xx). Maxwell-2-Cards (GeForce GTX 980 and more with GM2xx) are underclocked without Nvidia information.[16]

The Khronos CTS test suite for OpenGL 4.4, 4.5 and OpenGL ES 3.0+ is in now (2017-01-24) Open Source and all tests for Mesa 13 and 17 are now possible without costs.[17]

2nd stable version of 2017, 17.1.0, came out on 10 May 2017 with some interesting improvements. OpenGL 4.2+ for Intel Ivy Bridge and OpenGL 3.3+ for Intel Open SWR Rasterizer are 2 of the highlights.[18][19]

Due to the modularized nature of OpenGL, Mesa can support extensions from newer versions of OpenGL without claiming full support for such versions. For example, in July 2016, Mesa supported OpenGL ES 3.1 but also all OpenGL ES 3.2 extensions except for five, as well as a number of extensions not part of any OpenGL or OpenGL ES version.[20]

3rd Version 17.2 is available since September 2017 with some new OpenGL 4.6 features and velocity improvements in 3D for Intel and AMD. Only 1.4% of Tests fail for OpenGL 4.5 in Nouveau for Kepler.[21]

4th Version 17.3 is ready since December 2017. Many improvements in many drivers are available. OpenGL 4.6 is nearly fully available (Spir-V is not ready). AMD Vulkan Driver RADV is now fully conformant in Khronos-Test.[22]

1st version of 2018 is 18.0 and available since March 2018 by same scheme in 2017.[23] Full OpenGL 4.6 support is not ready, but many features and improvements were successfully tested in RC3. 10-bit support for Intel i965 in Colors is also a Highlight.[24] New is support for Intel Cannon Lake and AMD Vega with actual Linux Version. AMD Evergreen Chips (RV800 or R900) are near OpenGL 4.5 support. Old AMD R600 or RV700 Chips can only support OpenGL 3.3 with some features of OpenGL 4.x. Freedreno is the Driver for Adreno Hardware and near OpenGL 3.3 support.

2nd version of 2018 is 18.1 and available since May. Target is Vulkan 1.1.72 in Intel ANV and AMD RADV driver. OpenGL 4.6 with spir-V is also main target. Permanent work is possible completion of Features and Optimization of drivers for older hardware like AMD R600/Evergreen, Nvidia Tesla and before, Fermi, Kepler or Intel Sandybridge, Ivybridge, Haswell or Broadwell. ARM Architecture made also great improvements in Adreno 3xx/4xx/5xx and Broadwell VC4/VC5 for Raspi with main target OpenGL ES.

3rd version of 2018 is 18.2 and available in calendar stable in September. OpenGL 4.6 with spir-V and Vulkan 1.1.80 are in WIP. The soft Driver for virtual machines VIRGL is ready for OpenGL 4.3 and OpenGL ES 3.2. RadeonSI is also ready for OpenGL ES 3.2. ASTC Texture Compression Support and Compatibility Modus Support for OpenGL 4.4 (3.1 in 18.1) are other highlights in RadeonSI for AMD GCN Cards. New Vulkan 1.1 and more features for Intel and AMD are available. See more Details for Vulkan in Mesamatrix.[25]

4th version of 2018 is 18.3 and released as stable Version 18.3.1 in December 2018. Many features in Detail and support of newer hardware are main parts. Full support of OpenGL 4.6 is not ready.[26][27]

1st Version of 2019 is 19.0 and was now released at March. Full support of OpenGL 4.6 is not ready, but many improvements on this way are in all drivers.[28][29]

2nd Version of 2019 is 19.1. Transition of TGSI to NIR is here one main Feature on way to OpenGL 4.6 with Spir-V and more OpenCL. RadeonSI runs well in dev-Version with NIR.[30]

3rd Version of 2019 is 19.2. OpenGL 4.6 is Beta ready for new Intel Iris Driver.[31]

4th Version of 2019 is 19.3. OpenGL 4.6 is ready for Intel i965 and optional for new Iris Driver.[32]

First Version of 2020 is 20.0. Vulkan 1.2 is ready for AMD RADV and Intel ANV. Intel Iris is default for Intel Broadwell Gen 8+.[33][34] RadeonSI driver switched to using NIR by default, instead of TGSI.

2nd Version of 2020 is 20.1. Many improvements are ready in many drivers. Zink is a new virtual driver for OpenGL over Vulkan.[35]

3rd Version of 2020 is 20.2. OpenGL 3.0 for Zink is one new feature. LLVMpipe will support OpenGL 4.3+ (4.5+ in 20.3). ARM Panfrost is mostly improved with many modules. Shared virtual memory is possible for OpenCL in Nouveau with Pascal and higher.[36][37][38]

4th Version of 2020 is 20.3. v3d and v3dv are new drivers for OpenGL and Vulkan 1.0 with Broadcom hardware like Raspberry Pi 4. OpenCL 1.2 is full supported in clover module. Zink support OpenGL 3.3+. LLVMpipe virtual driver support now OpenGL 4.5+ with 4.6 in view. Lavapipe (originally called Vallium[39]) as Vulkan Tree of LLVMpipe is merged.[40][41][42][43][44]

In Mesa 21.0 d3d12 will be merged with OpenGL 3.0 to 3.3. Microsoft and Collabora develops new emulation d3d12 in WSL2 to Windows 10 with Direct 3D 12. OpenCL 1.2 is also target in d3d12. An acceleration of factor 2 to 5 is done in Benchmark SPECviewperf with improved OpenGL Code.[45][46][47][48] Many Mesa 21.0 features improves performance.[49] New Release 21.0.0 is public since 11 March 2021.

Mesa 21.1 is second release of year 2021.[50] OpenGL 4.6+ and OpenGL ES 3.1+ is available for Zink. AMD Driver 600g can change to NIR with more possibilities for old Radeon HD 5000 and 6000 cards.[51] Qualcomm Turnip reaches Vulkan 1.1+ and software emulation Lavapipe Vulkan 1.1+. Google VirtIO GPU Driver Venus with Vulkan 1.2+ is merged in experimental state with low performance in mesa main tree.[52]

Mesa 21.2 is third release of year 2021. Google Virtual Vulkan IO Driver Venus will be official introduced with full Vulkan 1.2+ support (more mesamatrix). ARM Panfrost: OpenGL ES 3.1+ Support is available and panVK is the new Vulkan Driver. Initial support started for ARM Apple M1 with new driver Asahi. 21.2 is available since 4 August 2021.[53]

An old plan is to split old drivers in a classic tree with many advantages in programming, support, bug fixing for the modern gallium 3D part. One problem here is Intel i965 with support of Popular old hardware to Intel Haswell and before also with Windows 10 support.[54] A new Gallium3D driver Crocus for Intel Gen 4 Graphics to Haswell is here in development to complete here the gallium3D area with possible split in the next time of year 2021. Crocus is optional available in 21.2.[55] Amber branch is for old drivers without Gallium 3D Functions like Radeon R200, intel i915 and 965 with actual version 21.3.9.[56]

In Version 22.0 Classic drivers are retired. Vulkan 1.3 is available for Intel Anvil and AMD RADV.[57]

Microsoft introduces new driver „Dozen“ for WSL 2 in early development stage as Vulkan over d3d12 in Mesa 22.1.[58]

RustiCL is available at 22.3 with official OpenCL 3.0 Conformance for Intel XE Graphics. Performance is equal and better to AMD ROCm with AMD 6700 XT Card.[59][60]

A main development target of Mesa 23.0 was ray tracing for Vulkan.[61][62]

Microsoft develops the Dozen driver for Vulkan in WSL. Vulkan 1.0+ with 80% 1.1 and 1.2 will be available in Mesa 23.2 after delay to 23.1 (See mesamatrix).[63] RustiCL for AMD hardware is available in 23.1.[64]

VirGL for virtual machines jumps in Mesa 23.2 to OpenGL 4.6.[65] Apple Asahi for Apple Arm Machines jumps from OpenGL 2.1 to 3.1 with 90% features of OpenGL 3.2 and 3.3 and OpenGL ES 2.0 to 3.0. [66]

Microsoft Supports in WSL OpenGL 4.6+ in Mesa 24.0 (in Mesa 23.3: 4.3+) with direct 12 translation driver dozen.[67]

Table of Rendering APIs

[edit]
Mesa Version First Release Date Last update[68] Vulkan OpenCL OpenGL OpenGL ES OpenVG EGL GLX Direct3D
1.3.264
2023-09-08
3.0
2020-11-30
4.6
2017-07-31
3.2.6
2019-07-10
1.1
2008-12-03
1.5
2014-03-19
1.4
2005-12-16
12
2015-07-29
Current stable version: 23.1 2023-05-10 23.1.8[23][69] 1.3.244: 1.3+ (Intel Gen8+ to XE, AMD GCN Gen2+ to RDNA3, Lavapipe, Google Venus), 1.1+ (Qualcomm Turnip), 1.0+ (AMD GCN1, Broadcom v3dv, ARM Mali PanVK) 1.0, 1.1, 1.2 (full support), 3.0 (wip, some functions in 21.1),[41] OpenCL 1.2+ and 3.0 with new RustiCL for AMD GCN and Intel Xe (Mesa 22.3+), AMD R600, Nvidia Fermi+ (Mesa 23.1+) 4.6 (19.3: Intel Gen 8+, 20.0: AMD GCN, 21.1: Zink, llvmpipe, 21.2: Intel Gen 7.5) 3.2 (20.3: Intel i965, AMD radeonsi, llvmpipe, VirGL, freedreno, Zink (21.3); 3.1: AMD r600, Nvidia nvC0, softpipe, Broadcom v3d, ARM Panfrost (21.3), d3d12 (22.0) [70][71] 1.5 1.4 9.0c[72][73]
Old version, yet still maintained: 23.0 2023-02-23 23.0.4[23][74] 1.3.232: mostly equal to 23.1
Old version, no longer maintained: 22.3 2022-11-30 22.3.7[23][75] 22.3: 1.3.225: 1.3+ (Intel Gen8+, AMD GCN Gen2+, Lavapipe), 1.2+ (Google Venus), 1.1+ (Qualcomm Turnip, Lavapipe (22.2)), 1.0+ (AMD GCN1, Broadcom v3dv, ARM Mali PanVK)
Old version, no longer maintained: 22.2 2022-09-21 22.2.5[23][76]
Old version, no longer maintained: 22.1 2022-05-20 22.1.7[23][77]
Old version, no longer maintained: 22.0 2022-03-09 22.0.5[23][78]
Old version, no longer maintained: 21.3 2021-11-17 21.3.9[23][79] 21.3: 1.2.190 (Intel Gen8+, AMD GCN Gen2+, Google Venus (21.3), Lavapipe), 1.0+ (AMD GCN1, Broadcom v3dv), 1.1+ (Qualcomm Turnip, Lavapipe (21.1))
Old version, no longer maintained: 21.2 2021-08-04 21.2.6[23][80]
Old version, no longer maintained: 21.1 2021-05-05 21.1.8[23][81]
Old version, no longer maintained: 21.0 2021-03-11 21.0.3[23][82]
Old version, no longer maintained: 20.3 2020-12-03 20.3.5[23][83] 20.3: 1.2.158 (Intel Gen8+, AMD GCN Gen2+), 1.0+ (AMD GCN1, Broadcom v3dv (20.3))
Old version, no longer maintained: 20.2 2020-09-28 20.2.6[23][84] 1.0, 1.1, 1.2 (WIP) some failed conformance tests
Old version, no longer maintained: 20.1 2020-05-27 20.1.10[23][35]
Old version, no longer maintained: 20.0 2020-02-19 20.0.8[23][85] 1.2+ (Intel Gen8+, AMD GCN Gen2+)
Old version, no longer maintained: 19.3 2019-12-11 19.3.5[23][86][87] 1.1+ (Intel Gen8+, AMD GCN Gen2+) (19.1: 1.1.104 19.0: 1.1.102, 18.3: 1.1.90, 18.2: 1.1.84)
Old version, no longer maintained: 19.2 2019-09-25 19.2.8[23] 4.5
Old version, no longer maintained: 19.1 2019-06-11 19.1.8[23]
Old version, no longer maintained: 19.0 2019-03-13 19.0.8
Old version, no longer maintained: 18.3 2018-12-07 18.3.6
Old version, no longer maintained: 18.2 2018-09-07 18.2.8[25]
Old version, no longer maintained: 18.1 2018-05-18 18.1.9[88] 1.1 (Intel Gen8+, AMD GCN Gen2+)(1.1.73)
Old version, no longer maintained: 18.0 2018-03-27 18.0.5 1.0+ (1.0.66)
Old version, no longer maintained: 17.3 2017-12-08 17.3.9 1.0 (PC: ANV Intel Gen7+ Ivy Bridge, RADV AMD GCN only) (header: 17.3: 1.0.63, 17.2: 1.0.54, 17.1: 1.0.42, 17.0: 1.0.38, 13.0: 1.0.6, 12.0: 1.0.3) in dev. by Gallium
Compute (Clover):
some CTS-Tests fail
in 1.0 and 1.1,
1.2 (WIP),
so 1.0, 1.1, 1.2
incomplete[89][90]
Old version, no longer maintained: 17.2 2017-09-04 17.2.8
Old version, no longer maintained: 17.1 2017-05-10 17.1.10
Old version, no longer maintained: 17.0 2017-02-13[91][10] 17.0.7
Old version, no longer maintained: 13.0 2016-11-01[92] 13.0.6 4.4
(4.5 No Test Label)
Old version, no longer maintained: 12.0 2016-07-08[93] 12.0.6 4.3[93] 3.1
Old version, no longer maintained: 11.2 2016-04-04[94] 11.2.2 4.1 (Intel 3.3+)
Old version, no longer maintained: 11.1 2015-12-15[95] 11.1.4 3.0
Old version, no longer maintained: 11.0 2015-09-12[96] 11.0.9
Old version, no longer maintained: 10.6 2015-06-15[97] 10.6.9 3.3[98] 1.4
Old version, no longer maintained: 10.5 2015-03-06[99] 10.5.9 1.1
Old version, no longer maintained: 10.4 2014-12-14[100] 10.4.7
Old version, no longer maintained: 10.3 2014-09-19[101] 10.3.7
Old version, no longer maintained: 10.2 2014-06-06[102] 10.2.9
Old version, no longer maintained: 10.1 2014-03-04[103] 10.1.6
Old version, no longer maintained: 10.0 2013-11-30[104] 10.0.5
Old version, no longer maintained: 9.0 2012-10-08 9.0.3, 9.1.7, 9.2.5 3.1 2.0
Old version, no longer maintained: 8.0 2012-02-08 8.0.5 3.0
Old version, no longer maintained: 7.0 2007-06-22 7.0.4, ..., 7.11.2 2.1
Old version, no longer maintained: 6.0 2004-01-06 6.0.1 1.5 1.3
Old version, no longer maintained: 5.0 2002-11-13 5.0.2 1.4
Old version, no longer maintained: 4.0 2001-10-22 4.0.4 1.3
Old version, no longer maintained: 3.0 1998-09 3.1, 3.2.1, 3.4.2.1 1.2
Old version, no longer maintained: 2.0 1996-10 2.6 1.1
Old version, no longer maintained: 1.0 1995-02 1.2.8 1.0
Legend:
Old version, not maintained
Old version, still maintained
Latest version
Latest preview version
Future release

Vulkan

[edit]

The Khronos Group officially announced Vulkan API in March 2015, and officially released Vulkan 1.0 on 16 February 2016. Vulkan breaks compatibility with OpenGL and completely abandons its monolithic state machine concept. The developers of Gallium3D called Vulkan to be something along the lines of Gallium3D 2.0 – Gallium3D separates the code that implements the OpenGL state machine from the code that is specific to the hardware.

Version 1.3 is immediately available with Mesa 22.0. Hardware with support of OpenGL ES 3.1 should run at Vulkan Level 1.3 and before.[105]

As Gallium3D ingests TGSI, Vulkan ingests SPIR-V (Standard Portable Intermediate Representation version "V" as in "Vulkan").

Intel released their implementation of a Vulkan driver for their hardware the day the specification was officially released, but it was only mainlined in April and so became part of Mesa 12.0, released in July 2016. While already the i965 driver wasn't written according to the Gallium3D specifications, for the Vulkan driver it makes even less sense to flange it on top of Gallium3D. Similarly there is no technical reason to flange it with NIR, but yet Intel's employees implemented their Vulkan driver that way.[106]

It is to be expected that AMD's own proprietary Vulkan driver, which was released in March[when?], and was announced to be released as free and open-source software in the future and be mainlined into Mesa, also abandons Gallium3D.[107]

RADV is a free project for AMD and is available since version 13.[9] Conformance with Khronos-Test came in version 17.3. Actual is Full support of Vulkan 1.0 and 1.1 since Mesa 18.1.

Nvidia released their proprietary GeForce driver with Vulkan support at launch day and Imagination Technologies (PowerVR), Qualcomm (Adreno) and ARM (Mali) have done the same or at least announced proprietary Vulkan drivers for Android and other operating systems. But when and whether additional free and open-source Vulkan implementations for these GPUs will show up, remains to be seen.

Mesa Software Driver VIRGL starts Vulkan Development in 2018 with GSOC projects for support of Virtual machines.[108]

Lavapipe is a CPU-based Software Vulkan driver and the brother of LLVMpipe. Mesa Version 21.1 supports Vulkan 1.1+.[109]

Google introduces Venus Vulkan Driver for virtual machines in Mesa 21.1 with full support for Vulkan 1.2+.[52]

Qualcomm Turnip and Broadcom v3dv are new drivers for Qualcomm Adreno and Broadcom Raspberry 4 Hardware. Turnip is the Vulkan brother of freedreno for OpenGL. V3dv supports Vulkan 1.0+ since Mesa 20.3. In Version 21.1 Turnip supports Vulkan 1.1+.[110][111][112]

Panfrost PanVK for ARM Mali is at way to Vulkan 1.1, but only 1.0 is stable available with Mesa 22.0.[113]

Project Dozen is connecting direct 3D 12 (d3d12) with Vulkan for Linux Emulation WSL2 in Windows 10 and 11. In Mesa 23.2 Vulkan 1.0 is full conformant supported and 80% of 1.1 and 1.2 (mesamatrix). [114][115]

Explicit fencing

[edit]

A kind of memory barrier that separates one buffer from the rest of the memory is called a fence. Fences are there to ensure that a buffer is not being overwritten before rendering and display operations have completed on it. Implicit fencing is used for synchronization between graphics drivers and the GPU hardware. The fence signals when a buffer is no longer being used by one component so it can be operated on or reused by another. In the past the Linux kernel had an implicit fencing mechanism, where a fence is directly attached to a buffer (cf. GEM handles and FDs), but userspace is unaware of this. Explicit fencing exposes fences to userspace, where userspace gets fences from both the Direct Rendering Manager (DRM) subsystem and from the GPU. Explicit fencing is required by Vulkan and offers advantages for tracing and debugging.

Linux kernel 4.9 added Android's synchronization framework to mainline.[116]

Generic Buffer Management

[edit]

Generic Buffer Management (GBM) is an API that 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.[117]

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 the GBM platform, since it relies on the Mesa GBM interface.

At XDC2014, Nvidia employee Andy Ritger proposed to enhance EGL in order to replace GBM.[118] This was not taken positively by the community, and Nvidia eventually changed their mind,[119] and took another approach.

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 software implementation of a video compression or decompression algorithm (commonly called a CODEC) and execute this software on the CPU
  2. use a software implementation of a video compression or decompression algorithm (commonly called a CODEC) and execute this software on the GPU (the 3D rendering engine)
  3. use a complete (or partial) hardware implementation of a video compression or decompression algorithm; it has become very common to integrate such ASICs into the chip of the GPU/CPU/SoC and therefore abundantly available; for marketing reasons companies have established brands for their ASICs, such as PureVideo (Nvidia), Unified Video Decoder (AMD), Video Coding Engine (AMD), Quick Sync Video (Intel), DaVinci (Texas Instruments), CedarX (Allwinner), Crystal HD (Broadcom); some ASICs are available for licensing as semiconductor intellectual property core; usually different versions implement different video compression and/or video decompression algorithms; support for such ASICs usually belong into the kernel driver, to initialize the hardware and do low-level stuff. Mesa, which runs in user-space, houses the implementations of several APIs for software, e.g. VLC media player, GStreamer, HandBrake, etc., to conveniently access such ASICs:

For example, Nouveau, which has been developed as part of Mesa, but also includes a Linux kernel component, which is being developed as part of the Linux kernel, supports the PureVideo-branded ASICs and provides access to them through VDPAU and partly through XvMC.[120]

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

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

Due to patent concerns regarding the H.264, H.265 and VC-1 video codecs, Fedora Linux disabled support for VAAPI acceleration for those in its build of Mesa in September 2022.[122]

Device drivers

[edit]
Graphics device drivers are implemented using two components: a UMD (user-mode driver) and a KMD (kernel-mode driver). Starting with Linux kernel 4.2 AMD Catalyst and Mesa will share the same Linux kernel driver: amdgpu. Amdgpu provides interfaces defined by DRM and KMS.

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: "classic" and Gallium3D.[123] An overview over some (but not all) of the drivers available in Mesa is given at mesamatrix.net.

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 processor of the PlayStation 3, S3 Virge & Savage chipsets, VIA chipsets, Matrox G200 & G400, and more.[124]

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 was usually significantly slower with some notable exceptions.[125][126][127][128] Today this is still true for Nouveau for most NVIDIA GPUs while on AMDs Radeon GPUs the open driver now mostly matches or exceeds the proprietary driver's performance.

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.[129]

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.[129]

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.[130]

DRI3 is supported by the Intel driver since 2013[131][132] and is default in some Linux distributions since 2016[133] to enable Vulkan support and more. It is also default on AMD hardware since late 2016 (X.Org Server 1.18.3 and newer).[134]

Software renderer

[edit]

Mesa also contains an implementation of software rendering called swrast that allows shaders to run on the CPU as a fallback when no graphics hardware accelerators are present. The Gallium software rasterizer is known as softpipe or when built with support for LLVM llvmpipe, which generates CPU code at runtime.[135][136] Since Mesa 10.x OpenGL 3.3+ is supported for Softpipe (10.3) and LLVMpipe (10.2). Actually about 80% of Features from OpenGL 4.x are implemented in Mesa 17.3 (See Mesamatrix).

In Mesa 12.0 a new Intel Rasterizer OpenSWR is available with high advantages in clusters for large data sets. It's more focused on engineering visualisation than in game or art imagery and can only work on x86 processors.[137] On the other hand, OpenGL 3.1+ is now supported.[138] Acceleration values from 29 to 51 related to LLVMPIPE were measured in some examples.[139] OpenGL 3.3+ is supported for OpenSWR since Mesa 17.1.

VirGL is a Rasterizer for Virtual machines implemented in Mesa 11.1 since 2015 with OpenGL 3.3 support and showed in Mesamatrix since Mesa 18. In actual new Mesa 18.2 it supports more than the others with OpenGL 4.3 and OpenGL ES 3.2. About 80% of OpenGL 4.4 and 4.5 features are also now ready. Vulkan Development starts with GSOC 2018 projects.[140][141][142][108][143][144][145]

Actual virGL state in Mesamatrix is full support of OpenGL 4.6+ and OpenGL ES 3.2+ with some necessary Linux software.[146]

D3d12 is a project of Microsoft for WSL2 emulation of OpenGL 3.3+ and OpenCL 1.2+ with Direct3D 12. D3D12 is merged in 21.0.[45] Actual state in Mesa 23.1 is OpenGL 4.2+ with nearly 4.4+ and OpenGL ES 3.1+.

Venus is a new Vulkan VirtIO GPU Driver for GPU in virtual machines by Google. Venus is merged in 21.1 and for public in 21.2 introduced.[52] Venus supports Vulkan 1.3+ in Mesa 23.1. Hardware minimum is Vulkan 1.1 with some extensions.[147]

Mega drivers

[edit]

The idea of bundling multiple drivers into a single "mega" driver was proposed by Emma Anholt. It allows for a single copy of the shared Mesa code to be used among multiple drivers (instead of it existing in each driver separately) and offering better performance than a separate shared library due to the removal of the internal library interface.[148] The state trackers for VDPAU and XvMC have become separate libraries.[149]

shader-db

[edit]

shader-db is a collection of about 20,000 shaders gathered from various computer games and benchmarks as well as some scripts to compile these and collect some statistics. Shader-db is intended to help validate an optimization.

It was noticed that an unexpected number of shaders are not hand-written but generated. This means these shaders were originally written in HLSL and then translated into GLSL by some translator program, such as e.g. HLSL2GLSL. The problem is, that the generated code is often far from being optimal. Matt Turner said it was much easier to fix this in the translator program than having to make Mesa's compiler carry the burden of dealing with such bloated shaders.

shader-db cannot be considered free and open-source software. To use it legally, one must have a license for all the computer games that the shaders are part of.

Software architecture

[edit]
A graphics driver consists of an implementation of the OpenGL state machine and a compilation stack to compile the shaders into the GPU's machine language. This compilation, as well as pretty much anything else, is executed on the CPU, then the compiled shaders are sent to the GPU and are executed by it. (SDL = Simple DirectMedia Layer).
The Intermediate Representations (IRs) in Mesa: GLSL IR, Mesa IR, TGSI, and LLVM IR. Missing are HIR, LIR and NIR.
Mesa IR is due to be removed completely.

The so-called "user-mode graphics device drivers" (UMD) in Mesa have very few commonalities with what is generally called a device driver. There are a couple of differences:

  • they are meant to work on top of additionally existent kernel mode graphics device drivers, that are e.g. available as part of the Linux kernel found in the source code under /drivers/gpu/drm/ Each UMD communicates with its kernel mode counterpart with the help of a specific library, name libdrm_specific and a generic one, named libdrm. This section shall look solely on the user-mode part above libdrm
  • there is some implementation of the finite-state machine as specified by e.g. OpenGL; this implementation of the OpenGL state machine may be shared among multiple UMDs or not
  • they consist to a great part of some sort of compiler, that ingests e.g. GLSL and eventually outputs machine code. Parsers may be shared among multiple UMD or be specific

Mesa's Intermediate Representations

[edit]

One goal of Mesa is the optimization of code that is to be executed by the respective GPU. Another is the sharing of code. Instead of documenting the pieces of software, this article shall instead look at the Intermediate Representations used in the process of compiling and optimizing. See Abstract syntax tree (AST) and Static single assignment form (SSA form).

SPIR-V

[edit]

SPIR-V is a certain version of the Standard Portable Intermediate Representation. The idea is, that graphics applications output SPIR-V instead of GLSL. In contrast to the latter, SPIR-V is binary to avoid implementation differences between GLSL compiler frontends of different driver implementations, as this has been a major source of application incompatibilities and bugs. Also SPIR-V binary usually also passed through some general optimizations. SPIR-V's binary representation also offers some degree of obfuscation, which might appeal to some software vendors as a form of intellectual property protection; however, SPIR-V contains ample information for reflection and tools exist that translate SPIR-V back into high quality, human readable high level code. A UMD needs only apply optimizations, that are specific to the supported hardware.

GLSL IR

[edit]

Mesa IR

[edit]

NIR

[edit]

NIR (New Internal Representation) was introduced to overcome TGSI limitations.[150][151] NIR was extended in last and actual releases as base of Spir-V support and is since 2016 main development area. LLVMpipe, i965, RadeonSI, Nouveau, freedreno, vc4 are changed to NIR from TGSI. RADV, Zink and other new drivers starts with NIR. All drivers with full OpenGL 4.6 support are related to NIR by SPIR-V support. Also AMD r600 has a fork with NIR for better support of HD5000 and HD6000 series. This option for r600 is default since Mesa 21.0.

TGSI

[edit]

The Tungsten Graphics Shader Infrastructure (TGSI) was introduced in 2008 by Tungsten Graphics. All Gallium3D-style UMDs ingest TGSI. NIR is now Main development area, so TGSI is only for older driver like r300g default infrastructure and will be deprecated in some years.

GLSL-To-TGSI code will be deleted in Mesa 22.2. Default is newer NIR-to-TGSI with GLSL-to-NIR for all native NIR drivers. Some older TGSI drivers are supported with this NIR Code path. Later NIR-To-TGSI will be deprecated for native NIR drivers only.[152]

LLVM IR

[edit]

The UMDs radeonsi and llvmpipe do not output machine code, but instead LLVM IR. From here on, LLVM does optimizations and the compilation to machine code. This does mean, that a certain minimum version of LLVM has to be installed as well.

RADV ACO IR

[edit]

RADV ACO uses own IR that is close to NIR, for optimizing and generating end binary code for Vulkan SPIR-V shaders on top of Radeon GPUs (GCN 1+, aka GFX6+) GPUs. As of version 20.1.0 the ACO is only used in RADV (Vulkan driver) and not in RadeonSI yet.

Mesa's GLSL compiler

[edit]

Mesa's GLSL compiler generates its own IR. Because each driver has very different requirements from a LIR, it differentiates between HIR (high-level IR) and LIR (low-level IR).

Gallium3D

[edit]
Gallium3D
Original author(s)Tungsten Graphics (now VMware)
Preview release
0.4[153] / 24 April 2010; 14 years ago (2010-04-24)
Repository
Written inC++, C, assembly language
Operating systemCross-platform
TypeGraphics library
LicenseMIT License
Websitewww.freedesktop.org/wiki/Software/gallium/

Gallium3D is a set of interfaces and a collection of supporting libraries[154] intended to ease the programming of device drivers for 3D graphics chipsets for multiple operating systems, rendering or video acceleration APIs. It is free and open-source graphics device driver software.

A feature matrix is being provided at mesamatrix.net.

The development of Gallium3D started in 2008 at Tungsten Graphics,[155] and the implementation is available as free and open-source software as part of Mesa 3D hosted by freedesktop.org. The primary goal of making driver development easier, bundling otherwise duplicated code of several different drivers at a single point, and to support modern hardware architectures. This is done by providing a better division of labor, for example, leaving memory management to the kernel DRI driver.

Gallium3D has been a part of Mesa since 2009[156] and is currently used by the free and open-source graphics driver for Nvidia (nouveau project),[157][158] for AMD's R300R900,[159][160][161] Intel's 'Iris' driver for generation 8+ iGPUs[162] and for other free and open-source GPU device drivers.

Software architecture

[edit]

Gallium3D eases programming of device drivers by splitting the graphics device driver into three parts. This is accomplished by the introduction of two interfaces: Gallium3D State Tracker Interface and the Gallium3D WinSys Interface. The three components are called:

Gallium3D State Tracker
Each graphical API by which a device driver is being addressed has its own State Tracker, e.g. there is a Gallium3D State Tracker for OpenGL and a different one for Direct3D or GLX. Each State Tracker contains an implementation of the Gallium3D State Tracker Interface, and is unique, this means is shared by all existent Gallium3D device drivers.
Gallium3D hardware device driver
This is the actual code, that is specific to the underlying 3D graphic accelerator, but only as far as the Gallium3D WinSys Interface allows. There is a unique Gallium3D hardware device driver for each available graphics chip and each implements the Gallium3D State Tracker Interface as well as the Gallium3D WinSys Interface. The Gallium3D hardware device driver understands only TGSI (Tungsten Graphics Shader Infrastructure), an intermediate language for describing shaders. This code translated shaders translated from GLSL into TGSI further into instruction set implemented by the GPU.
Gallium3D WinSys
This is specific to the underlying kernel of the operating system and each one implements the Gallium3D WinSys Interface to interface with all available Gallium3D hardware device drivers.
VC4 and freedreno can both consume NIR directly (and fall back to tgsi_to_nir for shaders that do not use glsl_to_nir).
Illustration of the Linux graphics stack
Mesa/DRI and Gallium3D have different driver models. Both share a lot of free and open-source code.
A possible example matrix when implementing the Gallium3D driver model. Through the introduction of the Gallium3D Tracker Interface and the Gallium3D WinSys Interface, only 18 instead of 36 modules are required. Each WinSys module can work with each Gallium3D device driver module and with each State Tracker module.

Differences from classic graphics drivers

[edit]

Gallium3D provides a unified API exposing standard hardware functions, such as shader units found on modern hardware. Thus, 3D APIs such as OpenGL 1.x/2.x, OpenGL 3.x, OpenVG, GPGPU infrastructure or even Direct3D (as found in the Wine compatibility layer) will need only a single back-end, called a state tracker, targeting the Gallium3D API. By contrast, classic-style DRI device drivers require a different back-end for each hardware platform and several other APIs need translation to OpenGL at the expense of code duplication.[163][164][165] All vendor device drivers, due to their proprietary and closed-source nature, are written that way meaning that, e.g. the AMD Catalyst implements both OpenGL and Direct3D, and the vendor drivers for the GeForce have their implementations.

Under Gallium3D, Direct Rendering Manager (DRM) kernel drivers will manage the memory and Direct Rendering Interface (DRI2) drivers will be more GPU processing oriented.[166] During the transition period from userspace modesetting to kernelspace modesetting some of the Mesa 3D drivers, such as the radeon driver or Intel's drivers, ended up supporting both DRI1 and DRI2 and used DRI2 if available on the system. Gallium3D additionally requires a level of shader support that is not available on older cards like e.g. ATi r100-r200 so users for those cards need to keep using Mesa 3D with DRI2 for their 3D usage.

Tungsten Graphics Shader Infrastructure

[edit]

Tungsten Graphics Shader Infrastructure (TGSI) is an Intermediate representation like LLVM Intermediate Representation or the new Standard Portable Intermediate Representation (SPIR) to be used by the Vulkan API and OpenCL 2.1. Shaders written in OpenGL Shading Language are to be translated/compiled into TGSI, then optimizations are made, and then the TGSI shaders are being compiled into shaders for the instruction set of the used GPU.

NIR is the new Layer representation in Mesa with full SPIR-V support and since 2019 main development area of all newer drivers with OpenGL 4.6 support.

LLVM usage

[edit]
GlassyMesa is an LLVM-based compiler stack for shaders written in GLSL. For SSA see the article Static single assignment form.

In addition, using the modular structure of Gallium3D, there is an effort underway to use the LLVM compiler suite and create a module to optimize shader code on the fly.[167]

The library represents each shader program using an extensible binary intermediate representation called Tungsten Graphics Shader Infrastructure (TGSI), which LLVM then translates into GLSL shaders optimized for target hardware.

Adoption

[edit]

Several free and open-source graphics device drivers, which have been, or are being written based on information gained through clean-room reverse engineering, adopted the driver model provided by Gallium3D, e.g. nouveau and others (see Free and open-source graphics device driver for a complete list). The main reason may be that the Gallium3D driver model lessens the amount of code required to be written.[original research?] Of course, being licensed under a free software license, this code can at any time by anybody be rewritten to implement the DRI-, or some other, driver model.

History

[edit]

Original authors of Gallium3D were Keith Whitwell and Brian Paul at Tungsten Graphics (acquired by VMware in 2008).[168]

Milestones

[edit]

As of fall 2011, there were at least 10 known, mature and working Gallium3D drivers.[169][failed verification][citation needed] Open-source drivers for Nvidia graphics cards by the name of Nouveau team develops its drivers using the Gallium3D framework.[158][170]

2008-07-13: Nouveau development is done exclusively for the Gallium framework. The old DRI driver was removed from the master branch of the Mesa repository on Freedesktop.org.[171]

2009-02-11: The gallium-0.2 branch was merged into mainline Master branch of Mesa.[172] Development is done in Mesa mainline.

2009-02-25: Gallium3D can run on Linux as well as FreeBSD kernels.[173]

2009-05-01: Zack Rusin from Tungsten Graphics added the OpenVG state tracker to Mesa 3D,[174] which enables Scalable Vector Graphics to be hardware-accelerated by any Gallium3D-based driver.

2009-07-17: Mesa3D 7.5 is released, the first version to include Gallium3D.[175]

2010-09-10: Initial support for the Evergreen GPUs was added to the r600g driver.[176]

2010-09-21: There are two Gallium3D drivers for ATI hardware known as r300g and r600g for R300-R500 and R600-Evergreen GPUs respectively.

2010-09-21: Major commits were made to the code to support Direct3D 10 and 11.[177] In time, this might offer the ability to use recent Direct3D implementations on Linux systems.

2011-11-30: Intel 965g and Cell Gallium drivers were removed from the master branch of Mesa as unmaintained and broken.[178][179]

2013-11-30: Mesa 10 with OpenGL 3.2, 3.3 and OpenCL 1.0+

2014-11-18: Major commits were made to the code to support Direct3D 9.[180]

2015-09-15: Mesa 11 with OpenGL 4.0, 4.1 and OpenCL 1.2 (incomplete)

2015-12-15: Mesa 11.1 Driver VIRGL for virtual machines with OpenGL 3.3

2016-07-08: Mesa 12 with OpenGL 4.2, 4.3 and Vulkan 1.0 (Intel ANV and AMD RADV)

2016-11-01: Mesa 13 with OpenGL 4.4 and OpenGL ES 3.2

2017-02-13: Mesa 17.0 with OpenGL 4.5 and freedreno driver with OpenGL 3.0 and 3.1

2017-05-10: Mesa 17.1 OpenGL 4.2+ for Intel Ivy Bridge (more than Intel driver for Windows, OpenGL 3.3+ for Intel Open SWR Rasterizer (important for cluster Computer for huge simulations)

2017-12-08: Mesa 17.3 AMD Vulkan Driver RADV full compliant in Khronos Test of Vulkan 1.0

2018-05-18: Mesa 18.1 with Vulkan 1.1 (Intel ANV and AMD RADV)

2018-09-07: Mesa 18.2 with OpenGL 4.3 for Soft Driver VIRGL (important for virtual machines in cloud Cluster Computer), OpenGL ES 3.1 for Freedreno with Adreno A5xx

2019-06-11: Mesa 19.1 released with Intel's next generation 'iris' graphics driver for generation 8+ iGPUs[181]

2019-12-11: Mesa 19.3 released OpenGL 4.6 with Intel i965 with gen 7+ and optional Iris Gen 8+

2020-03-18: Mesa 20.0 released OpenGL 4.6 with AMD GCN and Vulkan 1.2 for Intel

2020-05-27: Mesa 20.1 released NIR vectorisation support and shared virtual memory support for OpenCL in Clover

2020-11-30: Mesa 20.3 full support of OpenCL 1.2 in Clover[41]

2021-03-11: Mesa 21.0 initial support of "D3D12“: Direct 3D 12 for WSL2 in Windows 10 with OpenGL 3.3+, ARM Freedreno: OpenGL 3.3+

2021-05-05: Mesa 21.1 initial support of Google VirtIO GPU Driver "Venus“ with Vulkan 1.2+; Zink: OpenGL 4.6+, OpenGL ES 3.1+; Qualcomm Turnip, Lavapipe: Vulkan 1.1+

2021-08-04: Mesa 21.2 initial support of new Intel Crocus OpenGL 4.6 driver based on gallium3D to Intel Sandy Bridge to Haswell for old i965, Vulkan Driver panVK for ARM Panfrost

2022-03-09: Mesa 22.0 full support of Vulkan 1.3 by Intel Anvil and AMD RADV

2023-05-10: Mesa 23.1 OpenCL with Rust: RustiCL for AMD GCN Hardware available (more hardware wip)[182]

2023-09-30: Mesa 23.2 with Apple Asahi OpenGL 3.1 and OpenGL ES 3.0, RADV supports Ray Tracing in AMD RDNA 2 and 3, Intel Anvil Vulkan H.265 decoding support [183]

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).[184] Beginning in 1993, he spent eighteen months of part-time development before he released the software on the Internet in February 1995.[185] 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 then new 3dfx Voodoo I/II graphics cards and their successors.[129] 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.[186]

See also

[edit]

References

[edit]
  1. ^ Marshall, David (16 December 2008). "VMware's year end acquisition of Tungsten Graphics". InfoWorld. Retrieved 6 August 2011.
  2. ^ "[ANNOUNCE] mesa 24.3.0". 21 November 2024. Retrieved 21 November 2024.
  3. ^ "Improve OpenGL support for the Linux Graphics Drivers - Mesa". Indiegogo. 11 December 2013. Retrieved 21 January 2015.
  4. ^ "AMD exploring new Linux driver Strategy". 22 March 2014. Retrieved 23 March 2014.
  5. ^ "Direct3D 9 Support Released For Linux Via Gallium3D, Running Games - Phoronix". Phoronix.com. Retrieved 1 August 2018.
  6. ^ "mesa/mesa - The Mesa 3D Graphics Library". Retrieved 2 November 2016.
  7. ^ "The OpenGL vs Mesa matrix". 25 March 2015. Retrieved 29 March 2015.
  8. ^ "Mesa 11.0 Has Been Branched, The Release March Begins". 22 August 2015. Retrieved 22 August 2015.
  9. ^ a b "RADV Radeon Vulkan Driver Submitted for Review to be Included in Mesa - Phoronix". Archived from the original on 4 November 2016. Retrieved 3 November 2016.
  10. ^ a b "Mesa 17.0.0 Officially Released". Phoronix. 13 February 2017. Retrieved 13 February 2017.
  11. ^ "mesa/mesa - The Mesa 3D Graphics Library". Cgit.freedesktop.org. Retrieved 1 August 2018.
  12. ^ "The Big Changes, Improvements of Mesa 17.0 - Phoronix". Phoronix.com. Retrieved 1 August 2018.
  13. ^ "mesa/mesa - The Mesa 3D Graphics Library". Cgit.freedesktop.org. Retrieved 1 August 2018.
  14. ^ "Program" (PDF). www.x.org. 2016.
  15. ^ "mesa/mesa - The Mesa 3D Graphics Library". Cgit.freedesktop.org. Retrieved 1 August 2018.
  16. ^ "A Look at the Huge Performance Boosts With Nouveau Mesa 17.0-devel on Maxwell - Phoronix". Phoronix.com. Retrieved 1 August 2018.
  17. ^ "Khronos Open-Sources OpenGL / OpenGL ES Conformance Tests - Phoronix". Phoronix.com. Retrieved 1 August 2018.
  18. ^ "The Grand Features of Mesa 17.1: Vega, RadeonSI Shader Cache, Maturing Vulkan, New OpenGL Extensions - Phoronix". Phoronix.com. Retrieved 1 August 2018.
  19. ^ "Mesa Release Notes". Mesa3d.org. Retrieved 1 August 2018.
  20. ^ "The OpenGL vs Mesa matrix". mesamatrix.net. Retrieved 31 July 2016.
  21. ^ "Event listing" (PDF). www.x.org.
  22. ^ "Mesa 17.3 Features - Vulkan Updates, Better Performance - Phoronix". Phoronix.com. Retrieved 1 August 2018.
  23. ^ a b c d e f g h i j k l m n o p q r "Release calendar". Mesa3d.org. Retrieved 1 August 2018.
  24. ^ "Mesa 18.0 Features Include Many OpenGL/Vulkan Improvements, Intel Shader Cache & Extras - Phoronix". Phoronix.com. Retrieved 1 August 2018.
  25. ^ a b "Mesa 18.2 Is Releasing Soon With Many OpenGL / Vulkan Driver Improvements - Phoronix". www.phoronix.com.
  26. ^ "The Shiny New Features of Mesa 18.3 For Open-Source Intel / Radeon Graphics Drivers - Phoronix". www.phoronix.com.
  27. ^ "Mesa Made Massive Progress In 2018 On Open-Source Vulkan / OpenGL Drivers - Phoronix". www.phoronix.com.
  28. ^ "The New Features on Deck for Mesa 19.0: Vulkan Additions, FreeSync, Soft FP64 & More - Phoronix".
  29. ^ "Mesa 18.2 vs. 18.3 vs. 19.0 January Benchmarks for RadeonSI/RADV - Phoronix".
  30. ^ "Running the RadeonSI NIR Back-End with Mesa 19.1 Git - Phoronix".
  31. ^ "Intel's Iris Gallium3D Driver Now Has Better OpenGL Compatibility Profile Support - Phoronix".
  32. ^ "Mesa 19.3 is Introducing a Lot of Open-Source OpenGL + Vulkan Driver Improvements - Phoronix".
  33. ^ "Mesa 20.0-rc1 Released with Intel Gallium3D Default, OpenGL 4.6 for RadeonSI, Vulkan 1.2 - Phoronix".
  34. ^ "Mesa 20.0 Released with Big Improvements for Intel, AMD Radeon Vulkan/OpenGL - Phoronix".
  35. ^ a b "Mesa 20.1 Features Include Big Improvements for Open-Source Intel, Radeon Graphics Drivers - Phoronix".
  36. ^ "Zink is Now OpenGL 3.0 Complete for Generic GL over Vulkan - Phoronix".
  37. ^ "Mesa 20.2 Development Ends After Many New Features Land - Phoronix".
  38. ^ "Mesa 20.2's Nouveau Enables HMM, OpenCL SVM Now Supported - Phoronix".
  39. ^ "Mesa's Vulkan Software Implementation Now Known as Lavapipe". Phoronix.
  40. ^ "V3DV Developers Lay Out Plans for Upstreaming the Raspberry Pi 4 Vulkan Driver in Mesa - Phoronix".
  41. ^ a b c "OpenCL 1.2 Support Merged for Mesa's Gallium3D Clover While OpenCL 3.0 is Being Tackled - Phoronix".
  42. ^ "Zink in Mesa 20.3 Now Hits OpenGL 3.3, Can Run Blender with This OpenGL-on-Vulkan - Phoronix".
  43. ^ "OpenGL 4.5 Now Enabled for LLVMpipe with Mesa 20.3, to be Back-Ported for 20.2 - Phoronix".
  44. ^ "VALLIUM Merged into Mesa 20.3 as Vulkan Front-End to Gallium3D". Phoronix.
  45. ^ a b "Mesa 21.0 Merges Direct3D 12 Gallium3D Driver - Phoronix".
  46. ^ https://xdc2020.x.org/event/9/contributions/621/attachments/701/1297/XDC_-_Mesa_for_Mapping_Layers.pdf Archived 30 October 2020 at the Wayback Machine [bare URL PDF]
  47. ^ "Microsoft + Collabora Working to Map OpenGL/OpenCL over DirectX 12 - Phoronix".
  48. ^ "Mesa Now 2~5x Faster for SPECViewPerf Following OpenGL Optimizations - Phoronix".
  49. ^ "Mesa 21.0 Has Many New Features Especially for Radeon Open-Source Graphics - Phoronix".
  50. ^ "Mesa 21.1-rc1 Released with RADV Optimizations, Faster Zink, Many Other New Features - Phoronix".
  51. ^ "Mesa%2021.1 - Phoronix".
  52. ^ a b c "Google's VirtIO-GPU "Venus" Vulkan Driver Merged into Mesa 21.1 - Phoronix".
  53. ^ "Mesa 21.2 Released with New Intel Crocus Driver, PanVK, Early M1 Code - Phoronix".
  54. ^ "Proposal Raised for Dropping Mesa's Classic OpenGL Drivers from Mainline This Year - Phoronix".
  55. ^ "Crocus Gallium3D Nears Mainline Mesa for Gallium3D i965 Through Haswell Graphics - Phoronix".
  56. ^ "Amber Branch — the Mesa 3D Graphics Library latest documentation".
  57. ^ "Mesa 22.0-rc1 Released with Many Radeon & Intel Linux GPU Driver Features, Vulkan 1.3".
  58. ^ "Mesa's "Dozen" Close to Providing Vulkan over Direct3D 12".
  59. ^ "Mesa's Rusticl Achieves Official OpenCL 3.0 Conformance".
  60. ^ "Mesa's Rusticl OpenCL Implementation Can Outperform Radeon's ROCm Compute Stack".
  61. ^ "Mesa 23.0 Feature Development Ends with Many Vulkan Additions".
  62. ^ "Mesa 23.0 Released with Many Changes for Open-Source Radeon & Intel Graphics Drivers".
  63. ^ "Microsoft's DZN Mesa Driver Already Hits Vulkan 1.2".
  64. ^ "Mesa 23.1 Released with RadeonSI Rusticl-OpenCL, RADV GPL".
  65. ^ "Mesa 23.2 Virgl Lands Support for OpenGL 4.6 Inside Virtual Machines".
  66. ^ "Mesa 23.2 Receives Asahi AGX Gallium3D Changes for OpenGL 3.1 + GLES 3.0".
  67. ^ "Microsoft Enables OpenGL 4.6 Support over Direct3D 12".
  68. ^ "Release Notes — the Mesa 3D Graphics Library latest documentation".
  69. ^ "Mesa 23.1 Released - Phoronix".
  70. ^ Larabel, Michael (4 March 2015). "OpenVG Support Stripped From Gallium3D". Phoronix. Retrieved 11 July 2015.
  71. ^ "St/Vega: Remove. (3acd7a34) · Commits · Mesa / Mesa · GitLab". 3 March 2015.
  72. ^ "latest patches to "nine" state tracker". Cgit.freedesktop.org. 4 February 2016.
  73. ^ Larabel, Michael (14 December 2014). "Mesa 10.4 Officially Released With Direct3D 9 State Tracker". Phoronix. Retrieved 11 July 2015.
  74. ^ "Mesa 23.0 Released - Phoronix".
  75. ^ "Mesa 22.3 Released - Phoronix".
  76. ^ "Mesa 22.2 Released - Phoronix".
  77. ^ "Mesa 22.1 Released - Phoronix".
  78. ^ "Mesa 22.0 Released - Phoronix".
  79. ^ "Mesa 21.3 Released - Phoronix".
  80. ^ "Mesa 21.2 Released with New Intel Crocus Driver, PanVK, Early M1 Code - Phoronix".
  81. ^ "Mesa 21.1 Released with RADV Variable Rate Shading, More Intel Vulkan Improvements - Phoronix".
  82. ^ "Mesa 21.0 Released with Numerous RADV Improvements, New Vulkan Extensions, Many Fixes - Phoronix".
  83. ^ "Mesa 20.3 Released with Big Improvements for Open-Source Graphics Drivers - Phoronix".
  84. ^ "Mesa 20.2.2 Released with a Random Assortment of Fixes - Phoronix".
  85. ^ "RadeonSI NIR Benchmarks Show Great Progress with Mesa 20.0 - Phoronix".
  86. ^ "Mesa 19.3-RC1 Released with OpenGL 4.6 for Intel, Many Vulkan Driver Improvements - Phoronix".
  87. ^ "Mesa 19.3 is Introducing a Lot of Open-Source OpenGL + Vulkan Driver Improvements - Phoronix".
  88. ^ "Mesa 18.0 Should Arrive Today With Many Vulkan/OpenGL Driver Improvements - Phoronix". Phoronix.com. Retrieved 1 August 2018.
  89. ^ "GalliumCompute". Dri.freedesktop.org. Retrieved 24 January 2019.
  90. ^ "Clover Status Update" (PDF). Retrieved 27 March 2020.
  91. ^ "[Mesa-announce] mesa 17.0.0". 13 February 2017. Retrieved 13 February 2017.
  92. ^ "[Mesa-announce] mesa 13.0.0". November 2016. Retrieved 2 November 2016.
  93. ^ a b "Mesa 12.0 Released With OpenGL 4.3 Support, Intel Vulkan & Many Other Features". 8 July 2016. Retrieved 8 July 2016.
  94. ^ "[Mesa-announce] Mesa 11.2.0". 4 April 2016. Retrieved 4 April 2016.
  95. ^ "[Mesa-announce] Mesa 11.1.0". 15 December 2015. Retrieved 15 December 2015.
  96. ^ "[Mesa-announce] Mesa 11.0.0". 12 September 2015. Retrieved 26 September 2015.
  97. ^ "[Mesa-announce] Mesa 10.6.0". 15 June 2015. Retrieved 15 June 2015.
  98. ^ Larabel, Michael (26 October 2013). "Features To Be Found in Mesa 10.0". Phoronix.
  99. ^ "[Mesa-announce] Mesa 10.5.0". 7 March 2015. Retrieved 7 March 2015.
  100. ^ "[Mesa-announce] Mesa 10.4.0 released". 14 December 2014. Retrieved 7 March 2015.
  101. ^ "[Mesa-announce] Mesa 10.3 released". 19 September 2014. Retrieved 7 March 2015.
  102. ^ "[Mesa-announce] Mesa 10.2 released". 7 June 2014. Retrieved 7 March 2015.
  103. ^ "[Mesa-announce] Mesa 10.1 released". 5 March 2014. Retrieved 7 March 2015.
  104. ^ "[Mesa-announce] Mesa 10.0 released". December 2013. Retrieved 7 March 2015.
  105. ^ "Vulkan 1.3 Released with Dynamic Rendering in Core, New Roadmap Guidance for Modern GPUs".
  106. ^ "Program" (PDF). www.x.org.
  107. ^ "Radeon Vulkan Driver Added To Mesa, Fresh Radeon Vulkan vs. OpenGL Benchmarks + AMDGPU-PRO - Phoronix". Phoronix.com. Retrieved 1 August 2018.
  108. ^ a b "Vulkan Virgl Has Kicked Off For Supporting This Graphics/Compute API Within VMs - Phoronix". www.phoronix.com.
  109. ^ "Lavapipe CPU-Based Vulkan Ported to Windows - Phoronix".
  110. ^ "The Open-Source Qualcomm "TURNIP" Vulkan Driver Adds Important Performance Feature - Phoronix".
  111. ^ "TURNIP Vulkan Driver up and Running on Qualcomm's KGSL - Phoronix".
  112. ^ "Raspberry Pi 4 Vulkan Driver "V3DV" Merged into Mesa 20.3 - Phoronix".
  113. ^ "PanVK Pulls Back from Advertising Vulkan 1.1 for Now".
  114. ^ "Microsoft's "DZN" Mesa Code Achieving 99.75%+ Vulkan 1.0 Conformance".
  115. ^ ""Dozen" Merged into Mesa for Implementing Vulkan on Direct3D 12".
  116. ^ "Bringing Android explicit fencing to the mainline". LWN.net. 5 October 2016.
  117. ^ "libgbm in the Debian repositories". Packages.debian.org.
  118. ^ "Enabling Alternative Window Systems with a non-Mesa Graphics Driver Implementation". X.org.
  119. ^ "NVIDIA Wants Feedback On Its Device Memory Allocator Project". Phoronix.
  120. ^ "Nouveau Video Acceleration". freedesktop.org.
  121. ^ "Radeon Feature Matrix". freedesktop.org.
  122. ^ "Fedora Linux Disabling Mesa's H.264 / H.265 / VC1 VA-API Support Over Legal Concerns". Phoronix. Retrieved 1 October 2022.
  123. ^ Toral, Iago (8 August 2014). "Diving into Mesa". Retrieved 19 May 2016.
  124. ^ "Direct Rendering Infrastructure Status Page". freedesktop.org.
  125. ^ "How to improve gaming performance on your Linux machine - APC". Apcmag.com. 25 July 2013. Archived from the original on 25 January 2019. Retrieved 1 August 2018.
  126. ^ "Linux: Mesa, Gallium3D, Nouveau and NVIDIA Drivers, OpenGL Test (GTX 280, GTX 480, GTX 580) – Geeks3D". Geeks3d.com. 10 January 2012. Retrieved 1 August 2018.
  127. ^ "Nouveau Driver Remains Much Slower Than NVIDIA's Official Driver - Phoronix". Phoronix.com. Retrieved 1 August 2018.
  128. ^ "Intel/NVIDIA/AMD Compete on Open/Closed Source Linux GPU Driver Performance - Phoronix". Phoronix.com. Retrieved 1 August 2018.
  129. ^ a b c Paul, Brian (10 August 2000). "Introduction to the Direct Rendering Infrastructure". Dri.sourceforge.net. Archived from the original on 16 March 2018. Retrieved 25 January 2012.
  130. ^ "DRI2". X.org. Archived from the original on 16 April 2013. Retrieved 25 January 2012.
  131. ^ "DRI3 and Present [LWN.net]". lwn.net. Retrieved 1 August 2018.
  132. ^ "[PATCH 0/6] Add DRI3000 support to core and i965 drivers". Lists.freedesktop.org. 31 October 2013. Retrieved 1 August 2018.
  133. ^ "xorg-x11-drv-intel-2.99.917-19.20151206.fc23 (re)enabled dri3 by default - kde - Fedora Mailing-Lists". lists.fedoraproject.org. Retrieved 3 December 2016.
  134. ^ "Radeon-AMDGPU-1.19-Updates". Google.de. Retrieved 3 December 2016.
  135. ^ "LLVMpipe: OpenGL With Gallium3D on Your CPU". Phoronix.com. 30 April 2010. Retrieved 4 November 2014.
  136. ^ "llvmpipe". mesa3d.org. Retrieved 8 June 2015.
  137. ^ "OpenSWR". openswr.org. Retrieved 1 August 2018.
  138. ^ "Mesamatrix: The OpenGL vs Mesa matrix". mesamatrix.net. Retrieved 1 August 2018.
  139. ^ "OpenSWR". openswr.org. Retrieved 1 August 2018.
  140. ^ "Mesa (Master): Virgl: Add driver for virtio-gpu 3D (V2)". Archived from the original on 28 August 2018. Retrieved 28 August 2018.
  141. ^ "Tracking Mesa's VirGL OpenGL Features - Phoronix". www.phoronix.com.
  142. ^ "Mesa's VirGL Now Has OpenGL 4.2 Support To Offer Guest VMs - Phoronix". www.phoronix.com.
  143. ^ "The Current Performance of Virgl3D, Future Plans - Phoronix". www.phoronix.com.
  144. ^ "What's new in the virtual world?" (PDF). Archived (PDF) from the original on 1 October 2018. Retrieved 19 November 2023.
  145. ^ https://archive.fosdem.org/2019/schedule/event/virtual_gpu/attachments/slides/3353/export/events/attachments/virtual_gpu/slides/3353/Virgl_Presentation_FOSDEM2019.pdf [bare URL PDF]
  146. ^ "VirGL — the Mesa 3D Graphics Library latest documentation".
  147. ^ "Virtio-GPU Venus — the Mesa 3D Graphics Library latest documentation".
  148. ^ "DRI megadrivers". X.org. 25 September 2013.
  149. ^ "VDPAU & XvMC state trackers are now separate libraries". Phoronix.com. 23 June 2014.
  150. ^ "Introduction — NIR 0.0.1 documentation".
  151. ^ "NIR: A new compiler IR for Mesa".
  152. ^ "Mesa Prepares to Drop Old GLSL-To-TGSI - Big Code Removal, Win for Performance & Fixes".
  153. ^ "Build configuration file". cgit.freedesktop.org. Gallium documentation.
  154. ^ Fonseca, José (27 April 2008). "Gallium3D: Introduction". Retrieved 20 June 2014.
  155. ^ Fonseca, José. "MESA3D.org: Introduction". Retrieved 28 October 2016.
  156. ^ "Gallium3D Now in Mainline Mesa Code-Base!". Phoronix. 11 February 2009. Retrieved 26 October 2010.
  157. ^ "The state of Nouveau, part 2". LWN.net. 26 February 2008. Retrieved 7 March 2008.
  158. ^ a b "Nouveau Companion 36". Nouveau.freedesktop.org. 7 March 2008. Archived from the original on 7 March 2013. Retrieved 1 April 2008.
  159. ^ "ATI R300 Gallium3D DRI Support Is "Done"". Phoronix. 9 November 2009. Retrieved 15 November 2010.
  160. ^ "Radeon "R600g" Gallium3D Driver Merged To [Mesa] Master". Phoronix. 27 May 2010. Retrieved 26 October 2010.
  161. ^ "X.Org Wiki GalliumStatus". Xorg. 22 September 2010. Retrieved 7 December 2010.
  162. ^ "iris: Add a new experimental Gallium driver for Intel Gen8+ GPUs (!283) · Merge Requests · Mesa / mesa". GitLab. 20 February 2019. Retrieved 21 September 2019.
  163. ^ "TG-Gallium3D". Tungsten Graphics. Archived from the original on 3 May 2008. Retrieved 1 April 2008.
  164. ^ Rusin, Zack (6 February 2008). "GPGPU". Retrieved 1 April 2008.
  165. ^ Rusin, Zack (7 February 2008). "OpenVG and accelerating 2D". Retrieved 1 April 2008.
  166. ^ "DRI2". 4 October 2007. Archived from the original on 4 July 2008. Retrieved 1 April 2008.
  167. ^ Rusin, Zack (2 November 2007). "Gallium3D LLVM". Retrieved 1 April 2008.
  168. ^ Marshall, David (16 December 2008). "VMware's year end acquisition of Tungsten Graphics". InfoWorld.
  169. ^ "Gallium". Freedesktop.org. 2 November 2011. Retrieved 24 August 2012.
  170. ^ "Nouveau Companion 37". Nouveau.freedesktop.org. 21 March 2008. Archived from the original on 8 February 2012. Retrieved 1 April 2008.
  171. ^ "nouveau: say goodbye to the old DRI driver... (cgit on FDO)". Cgit.freedesktop.org. 13 July 2008.
  172. ^ "Gallium3D Now in Mainline Mesa Code-Base!". Phoronix.com. 11 February 2009.
  173. ^ Larabel, Michael (25 February 2009). "Gallium3D, EGL Now Buildable on FreeBSD". Phoronix.
  174. ^ "OpenVG state tracker is in Mesa 3D". Sourceforge.net. 1 May 2009.
  175. ^ "Mesa 7.5 Release Notes / 17 July 2009". Mesa3d.org. 17 July 2009. Archived from the original on 13 June 2010. Retrieved 12 September 2017.
  176. ^ "r600g: add initial evergreen support (cgit on FDO)". Cgit.freedesktop.org. 10 September 2010.
  177. ^ "d3d1x: add new Direct3D 10/11 COM state tracker for Gallium". Cgit.freedesktop.org. 21 September 2010.
  178. ^ Larabel, Michael (30 November 2011). "The Gallium3D Intel 965 Driver Gets Dropped". Phoronix. p. 1. Retrieved 1 December 2011.
  179. ^ Larabel, Michael (30 November 2011). "The Gallium3D Cell Driver Gets Dropped Too". Phoronix. p. 1. Retrieved 1 December 2011.
  180. ^ "nine: Add state tracker nine for Direct3D9 (v3)". Cgit.freedesktop.org. 18 November 2014.
  181. ^ "Mesa 19.1 Released With Experimental Intel Gallium3D, Other New GL/VLK Drivers Too - Phoronix". www.phoronix.com. Retrieved 21 September 2019.
  182. ^ "Mesa 23.1 Released with RadeonSI Rusticl-OpenCL, RADV GPL".
  183. ^ "Mesa 23.2 Feature Development Concludes with Numerous New Vulkan Extensions".
  184. ^ "Mesa Introduction". Mesa Team. Archived from the original on 4 May 2015. Retrieved 8 June 2015.
  185. ^ "Project History". Mesa Documentation. Retrieved 11 March 2021.
  186. ^ "What's the relationship between Glide and DRI?". dri.freedesktop.org. Retrieved 25 January 2012.
[edit]
[edit]
Various layers within Linux, also showing separation between the userland and kernel space
User mode User applications bash, LibreOffice, GIMP, Blender, 0 A.D., Mozilla Firefox, ...
System components init daemon:
OpenRC, runit, systemd...
System daemons:
polkitd, smbd, sshd, udevd...
Window manager:
X11, Wayland, SurfaceFlinger (Android)
Graphics:
Mesa, AMD Catalyst, ...
Other libraries:
GTK, Qt, EFL, SDL, SFML, FLTK, GNUstep, ...
C standard library fopen, execv, malloc, memcpy, localtime, pthread_create... (up to 2000 subroutines)
glibc aims to be fast, musl aims to be lightweight, uClibc targets embedded systems, bionic was written for Android, etc. All aim to be POSIX/SUS-compatible.
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[1]
Process scheduling subsystem IPC subsystem Memory management subsystem Virtual files subsystem Networking subsystem
Other components: ALSA, DRI, evdev, klibc, LVM, device mapper, Linux Network Scheduler, Netfilter
Linux Security Modules: SELinux, TOMOYO, AppArmor, Smack
Hardware (CPU, main memory, data storage devices, etc.)
  1. ^ "Admin Guide README". Kernel.org git repositories.