1.. include:: contents.rst 2 3Introduction 4============ 5 6The Mesa project began as an open-source implementation of the 7`OpenGL <https://www.opengl.org/>`__ specification - a system for 8rendering interactive 3D graphics. 9 10Over the years the project has grown to implement more graphics APIs, 11including `OpenGL ES <https://www.khronos.org/opengles/>`__ (versions 1, 122, 3), `OpenCL <https://www.khronos.org/opencl/>`__, 13`OpenMAX <https://www.khronos.org/openmax/>`__, 14`VDPAU <https://en.wikipedia.org/wiki/VDPAU>`__, `VA 15API <https://en.wikipedia.org/wiki/Video_Acceleration_API>`__, 16`XvMC <https://en.wikipedia.org/wiki/X-Video_Motion_Compensation>`__ and 17`Vulkan <https://www.khronos.org/vulkan/>`__. 18 19A variety of device drivers allows the Mesa libraries to be used in many 20different environments ranging from software emulation to complete 21hardware acceleration for modern GPUs. 22 23Mesa ties into several other open-source projects: the `Direct Rendering 24Infrastructure <https://dri.freedesktop.org/>`__ and 25`X.org <https://x.org>`__ to provide OpenGL support on Linux, FreeBSD 26and other operating systems. 27 28Project History 29--------------- 30 31The Mesa project was originally started by Brian Paul. Here's a short 32history of the project. 33 34August, 1993: I begin working on Mesa in my spare time. The project has 35no name at that point. I was simply interested in writing a simple 3D 36graphics library that used the then-new OpenGL API. I was partially 37inspired by the *VOGL* library which emulated a subset of IRIS GL. I had 38been programming with IRIS GL since 1991. 39 40November 1994: I contact SGI to ask permission to distribute my 41OpenGL-like graphics library on the internet. SGI was generally 42receptive to the idea and after negotiations with SGI's legal 43department, I get permission to release it. 44 45February 1995: Mesa 1.0 is released on the internet. I expected that a 46few people would be interested in it, but not thousands. I was soon 47receiving patches, new features and thank-you notes on a daily basis. 48That encouraged me to continue working on Mesa. The name Mesa just 49popped into my head one day. SGI had asked me not to use the terms 50*"Open"* or *"GL"* in the project name and I didn't want to make up a 51new acronym. Later, I heard of the Mesa programming language and the 52Mesa spreadsheet for NeXTStep. 53 54In the early days, OpenGL wasn't available on too many systems. It even 55took a while for SGI to support it across their product line. Mesa 56filled a big hole during that time. For a lot of people, Mesa was their 57first introduction to OpenGL. I think SGI recognized that Mesa actually 58helped to promote the OpenGL API, so they didn't feel threatened by the 59project. 60 611995-1996: I continue working on Mesa both during my spare time and 62during my work hours at the Space Science and Engineering Center at the 63University of Wisconsin in Madison. My supervisor, Bill Hibbard, lets me 64do this because Mesa is now being using for the 65`Vis5D <https://www.ssec.wisc.edu/%7Ebillh/vis.html>`__ project. 66 67October 1996: Mesa 2.0 is released. It implements the OpenGL 1.1 68specification. 69 70March 1997: Mesa 2.2 is released. It supports the new 3dfx Voodoo 71graphics card via the Glide library. It's the first really popular 72hardware OpenGL implementation for Linux. 73 74September 1998: Mesa 3.0 is released. It's the first publicly-available 75implementation of the OpenGL 1.2 API. 76 77March 1999: I attend my first OpenGL ARB meeting. I contribute to the 78development of several official OpenGL extensions over the years. 79 80September 1999: I'm hired by Precision Insight, Inc. Mesa is a key 81component of 3D hardware acceleration in the new DRI project for 82XFree86. Drivers for 3dfx, 3dLabs, Intel, Matrox and ATI hardware soon 83follow. 84 85October 2001: Mesa 4.0 is released. It implements the OpenGL 1.3 86specification. 87 88November 2001: I cofounded Tungsten Graphics, Inc. with Keith Whitwell, 89Jens Owen, David Dawes and Frank LaMonica. Tungsten Graphics was 90acquired by VMware in December 2008. 91 92November 2002: Mesa 5.0 is released. It implements the OpenGL 1.4 93specification. 94 95January 2003: Mesa 6.0 is released. It implements the OpenGL 1.5 96specification as well as the GL_ARB_vertex_program and 97GL_ARB_fragment_program extensions. 98 99June 2007: Mesa 7.0 is released, implementing the OpenGL 2.1 100specification and OpenGL Shading Language. 101 1022008: Keith Whitwell and other Tungsten Graphics employees develop 103`Gallium <https://en.wikipedia.org/wiki/Gallium3D>`__ - a new GPU 104abstraction layer. The latest Mesa drivers are based on Gallium and 105other APIs such as OpenVG are implemented on top of Gallium. 106 107February 2012: Mesa 8.0 is released, implementing the OpenGL 3.0 108specification and version 1.30 of the OpenGL Shading Language. 109 110July 2016: Mesa 12.0 is released, including OpenGL 4.3 support and 111initial support for Vulkan for Intel GPUs. Plus, there's another gallium 112software driver ("swr") based on LLVM and developed by Intel. 113 114Ongoing: Mesa is the OpenGL implementation for devices designed by 115Intel, AMD, NVIDIA, Qualcomm, Broadcom, Vivante, plus the VMware and 116VirGL virtual GPUs. There's also several software-based renderers: 117swrast (the legacy Mesa rasterizer), softpipe (a gallium reference 118driver), llvmpipe (LLVM/JIT-based high-speed rasterizer) and swr 119(another LLVM-based driver). 120 121Work continues on the drivers and core Mesa to implement newer versions 122of the OpenGL, OpenGL ES and Vulkan specifications. 123 124Major Versions 125-------------- 126 127This is a summary of the major versions of Mesa. Mesa's major version 128number has been incremented whenever a new version of the OpenGL 129specification is implemented. 130 131Version 12.x features 132~~~~~~~~~~~~~~~~~~~~~ 133 134Version 12.x of Mesa implements the OpenGL 4.3 API, but not all drivers 135support OpenGL 4.3. 136 137Initial support for Vulkan is also included. 138 139Version 11.x features 140~~~~~~~~~~~~~~~~~~~~~ 141 142Version 11.x of Mesa implements the OpenGL 4.1 API, but not all drivers 143support OpenGL 4.1. 144 145Version 10.x features 146~~~~~~~~~~~~~~~~~~~~~ 147 148Version 10.x of Mesa implements the OpenGL 3.3 API, but not all drivers 149support OpenGL 3.3. 150 151Version 9.x features 152~~~~~~~~~~~~~~~~~~~~ 153 154Version 9.x of Mesa implements the OpenGL 3.1 API. While the driver for 155Intel Sandy Bridge and Ivy Bridge is the only driver to support OpenGL 1563.1, many developers across the open-source community contributed 157features required for OpenGL 3.1. The primary features added since the 158Mesa 8.0 release are GL_ARB_texture_buffer_object and 159GL_ARB_uniform_buffer_object. 160 161Version 9.0 of Mesa also included the first release of the Clover state 162tracker for OpenCL. 163 164Version 8.x features 165~~~~~~~~~~~~~~~~~~~~ 166 167Version 8.x of Mesa implements the OpenGL 3.0 API. The developers at 168Intel deserve a lot of credit for implementing most of the OpenGL 3.0 169features in core Mesa, the GLSL compiler as well as the i965 driver. 170 171Version 7.x features 172~~~~~~~~~~~~~~~~~~~~ 173 174Version 7.x of Mesa implements the OpenGL 2.1 API. The main feature of 175OpenGL 2.x is the OpenGL Shading Language. 176 177Version 6.x features 178~~~~~~~~~~~~~~~~~~~~ 179 180Version 6.x of Mesa implements the OpenGL 1.5 API with the following 181extensions incorporated as standard features: 182 183- GL_ARB_occlusion_query 184- GL_ARB_vertex_buffer_object 185- GL_EXT_shadow_funcs 186 187Also note that several OpenGL tokens were renamed in OpenGL 1.5 for the 188sake of consistency. The old tokens are still available. 189 190:: 191 192 New Token Old Token 193 ------------------------------------------------------------ 194 GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE 195 GL_FOG_COORD GL_FOG_COORDINATE 196 GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE 197 GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE 198 GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE 199 GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER 200 GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY 201 GL_SRC0_RGB GL_SOURCE0_RGB 202 GL_SRC1_RGB GL_SOURCE1_RGB 203 GL_SRC2_RGB GL_SOURCE2_RGB 204 GL_SRC0_ALPHA GL_SOURCE0_ALPHA 205 GL_SRC1_ALPHA GL_SOURCE1_ALPHA 206 GL_SRC2_ALPHA GL_SOURCE2_ALPHA 207 208See the `OpenGL 209specification <https://www.opengl.org/documentation/spec.html>`__ for 210more details. 211 212Version 5.x features 213~~~~~~~~~~~~~~~~~~~~ 214 215Version 5.x of Mesa implements the OpenGL 1.4 API with the following 216extensions incorporated as standard features: 217 218- GL_ARB_depth_texture 219- GL_ARB_shadow 220- GL_ARB_texture_env_crossbar 221- GL_ARB_texture_mirror_repeat 222- GL_ARB_window_pos 223- GL_EXT_blend_color 224- GL_EXT_blend_func_separate 225- GL_EXT_blend_logic_op 226- GL_EXT_blend_minmax 227- GL_EXT_blend_subtract 228- GL_EXT_fog_coord 229- GL_EXT_multi_draw_arrays 230- GL_EXT_point_parameters 231- GL_EXT_secondary_color 232- GL_EXT_stencil_wrap 233- GL_EXT_texture_lod_bias (plus, a per-texture LOD bias parameter) 234- GL_SGIS_generate_mipmap 235 236Version 4.x features 237~~~~~~~~~~~~~~~~~~~~ 238 239Version 4.x of Mesa implements the OpenGL 1.3 API with the following 240extensions incorporated as standard features: 241 242- GL_ARB_multisample 243- GL_ARB_multitexture 244- GL_ARB_texture_border_clamp 245- GL_ARB_texture_compression 246- GL_ARB_texture_cube_map 247- GL_ARB_texture_env_add 248- GL_ARB_texture_env_combine 249- GL_ARB_texture_env_dot3 250- GL_ARB_transpose_matrix 251 252Version 3.x features 253~~~~~~~~~~~~~~~~~~~~ 254 255Version 3.x of Mesa implements the OpenGL 1.2 API with the following 256features: 257 258- BGR, BGRA and packed pixel formats 259- New texture border clamp mode 260- glDrawRangeElements() 261- standard 3-D texturing 262- advanced MIPMAP control 263- separate specular color interpolation 264 265Version 2.x features 266~~~~~~~~~~~~~~~~~~~~ 267 268Version 2.x of Mesa implements the OpenGL 1.1 API with the following 269features. 270 271- Texture mapping: 272 273 - glAreTexturesResident 274 - glBindTexture 275 - glCopyTexImage1D 276 - glCopyTexImage2D 277 - glCopyTexSubImage1D 278 - glCopyTexSubImage2D 279 - glDeleteTextures 280 - glGenTextures 281 - glIsTexture 282 - glPrioritizeTextures 283 - glTexSubImage1D 284 - glTexSubImage2D 285 286- Vertex Arrays: 287 288 - glArrayElement 289 - glColorPointer 290 - glDrawElements 291 - glEdgeFlagPointer 292 - glIndexPointer 293 - glInterleavedArrays 294 - glNormalPointer 295 - glTexCoordPointer 296 - glVertexPointer 297 298- Client state management: 299 300 - glDisableClientState 301 - glEnableClientState 302 - glPopClientAttrib 303 - glPushClientAttrib 304 305- Misc: 306 307 - glGetPointer 308 - glIndexub 309 - glIndexubv 310 - glPolygonOffset 311