diff options
Diffstat (limited to 'docs/intro.rst')
-rw-r--r-- | docs/intro.rst | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/docs/intro.rst b/docs/intro.rst new file mode 100644 index 00000000000..9abd2fd0c49 --- /dev/null +++ b/docs/intro.rst @@ -0,0 +1,308 @@ +Introduction +============ + +The Mesa project began as an open-source implementation of the +`OpenGL <https://www.opengl.org/>`__ specification - a system for +rendering interactive 3D graphics. + +Over the years the project has grown to implement more graphics APIs, +including `OpenGL ES <https://www.khronos.org/opengles/>`__ (versions 1, +2, 3), `OpenCL <https://www.khronos.org/opencl/>`__, +`OpenMAX <https://www.khronos.org/openmax/>`__, +`VDPAU <https://en.wikipedia.org/wiki/VDPAU>`__, `VA +API <https://en.wikipedia.org/wiki/Video_Acceleration_API>`__, +`XvMC <https://en.wikipedia.org/wiki/X-Video_Motion_Compensation>`__ and +`Vulkan <https://www.khronos.org/vulkan/>`__. + +A variety of device drivers allows the Mesa libraries to be used in many +different environments ranging from software emulation to complete +hardware acceleration for modern GPUs. + +Mesa ties into several other open-source projects: the `Direct Rendering +Infrastructure <https://dri.freedesktop.org/>`__ and +`X.org <https://x.org>`__ to provide OpenGL support on Linux, FreeBSD +and other operating systems. + +Project History +--------------- + +The Mesa project was originally started by Brian Paul. Here's a short +history of the project. + +August, 1993: I begin working on Mesa in my spare time. The project has +no name at that point. I was simply interested in writing a simple 3D +graphics library that used the then-new OpenGL API. I was partially +inspired by the *VOGL* library which emulated a subset of IRIS GL. I had +been programming with IRIS GL since 1991. + +November 1994: I contact SGI to ask permission to distribute my +OpenGL-like graphics library on the internet. SGI was generally +receptive to the idea and after negotiations with SGI's legal +department, I get permission to release it. + +February 1995: Mesa 1.0 is released on the internet. I expected that a +few people would be interested in it, but not thousands. I was soon +receiving patches, new features and thank-you notes on a daily basis. +That encouraged me to continue working on Mesa. The name Mesa just +popped into my head one day. SGI had asked me not to use the terms +*"Open"* or *"GL"* in the project name and I didn't want to make up a +new acronym. Later, I heard of the Mesa programming language and the +Mesa spreadsheet for NeXTStep. + +In the early days, OpenGL wasn't available on too many systems. It even +took a while for SGI to support it across their product line. Mesa +filled a big hole during that time. For a lot of people, Mesa was their +first introduction to OpenGL. I think SGI recognized that Mesa actually +helped to promote the OpenGL API, so they didn't feel threatened by the +project. + +1995-1996: I continue working on Mesa both during my spare time and +during my work hours at the Space Science and Engineering Center at the +University of Wisconsin in Madison. My supervisor, Bill Hibbard, lets me +do this because Mesa is now being using for the +`Vis5D <https://www.ssec.wisc.edu/%7Ebillh/vis.html>`__ project. + +October 1996: Mesa 2.0 is released. It implements the OpenGL 1.1 +specification. + +March 1997: Mesa 2.2 is released. It supports the new 3dfx Voodoo +graphics card via the Glide library. It's the first really popular +hardware OpenGL implementation for Linux. + +September 1998: Mesa 3.0 is released. It's the first publicly-available +implementation of the OpenGL 1.2 API. + +March 1999: I attend my first OpenGL ARB meeting. I contribute to the +development of several official OpenGL extensions over the years. + +September 1999: I'm hired by Precision Insight, Inc. Mesa is a key +component of 3D hardware acceleration in the new DRI project for +XFree86. Drivers for 3dfx, 3dLabs, Intel, Matrox and ATI hardware soon +follow. + +October 2001: Mesa 4.0 is released. It implements the OpenGL 1.3 +specification. + +November 2001: I cofounded Tungsten Graphics, Inc. with Keith Whitwell, +Jens Owen, David Dawes and Frank LaMonica. Tungsten Graphics was +acquired by VMware in December 2008. + +November 2002: Mesa 5.0 is released. It implements the OpenGL 1.4 +specification. + +January 2003: Mesa 6.0 is released. It implements the OpenGL 1.5 +specification as well as the GL_ARB_vertex_program and +GL_ARB_fragment_program extensions. + +June 2007: Mesa 7.0 is released, implementing the OpenGL 2.1 +specification and OpenGL Shading Language. + +2008: Keith Whitwell and other Tungsten Graphics employees develop +`Gallium <https://en.wikipedia.org/wiki/Gallium3D>`__ - a new GPU +abstraction layer. The latest Mesa drivers are based on Gallium and +other APIs such as OpenVG are implemented on top of Gallium. + +February 2012: Mesa 8.0 is released, implementing the OpenGL 3.0 +specification and version 1.30 of the OpenGL Shading Language. + +July 2016: Mesa 12.0 is released, including OpenGL 4.3 support and +initial support for Vulkan for Intel GPUs. Plus, there's another gallium +software driver ("swr") based on LLVM and developed by Intel. + +Ongoing: Mesa is the OpenGL implementation for devices designed by +Intel, AMD, NVIDIA, Qualcomm, Broadcom, Vivante, plus the VMware and +VirGL virtual GPUs. There's also several software-based renderers: +swrast (the legacy Mesa rasterizer), softpipe (a gallium reference +driver), llvmpipe (LLVM/JIT-based high-speed rasterizer) and swr +(another LLVM-based driver). + +Work continues on the drivers and core Mesa to implement newer versions +of the OpenGL, OpenGL ES and Vulkan specifications. + +Major Versions +-------------- + +This is a summary of the major versions of Mesa. Mesa's major version +number has been incremented whenever a new version of the OpenGL +specification is implemented. + +Version 12.x features +~~~~~~~~~~~~~~~~~~~~~ + +Version 12.x of Mesa implements the OpenGL 4.3 API, but not all drivers +support OpenGL 4.3. + +Initial support for Vulkan is also included. + +Version 11.x features +~~~~~~~~~~~~~~~~~~~~~ + +Version 11.x of Mesa implements the OpenGL 4.1 API, but not all drivers +support OpenGL 4.1. + +Version 10.x features +~~~~~~~~~~~~~~~~~~~~~ + +Version 10.x of Mesa implements the OpenGL 3.3 API, but not all drivers +support OpenGL 3.3. + +Version 9.x features +~~~~~~~~~~~~~~~~~~~~ + +Version 9.x of Mesa implements the OpenGL 3.1 API. While the driver for +Intel Sandy Bridge and Ivy Bridge is the only driver to support OpenGL +3.1, many developers across the open-source community contributed +features required for OpenGL 3.1. The primary features added since the +Mesa 8.0 release are GL_ARB_texture_buffer_object and +GL_ARB_uniform_buffer_object. + +Version 9.0 of Mesa also included the first release of the Clover state +tracker for OpenCL. + +Version 8.x features +~~~~~~~~~~~~~~~~~~~~ + +Version 8.x of Mesa implements the OpenGL 3.0 API. The developers at +Intel deserve a lot of credit for implementing most of the OpenGL 3.0 +features in core Mesa, the GLSL compiler as well as the i965 driver. + +Version 7.x features +~~~~~~~~~~~~~~~~~~~~ + +Version 7.x of Mesa implements the OpenGL 2.1 API. The main feature of +OpenGL 2.x is the OpenGL Shading Language. + +Version 6.x features +~~~~~~~~~~~~~~~~~~~~ + +Version 6.x of Mesa implements the OpenGL 1.5 API with the following +extensions incorporated as standard features: + +- GL_ARB_occlusion_query +- GL_ARB_vertex_buffer_object +- GL_EXT_shadow_funcs + +Also note that several OpenGL tokens were renamed in OpenGL 1.5 for the +sake of consistency. The old tokens are still available. + +:: + + New Token Old Token + ------------------------------------------------------------ + GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE + GL_FOG_COORD GL_FOG_COORDINATE + GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE + GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE + GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE + GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER + GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY + GL_SRC0_RGB GL_SOURCE0_RGB + GL_SRC1_RGB GL_SOURCE1_RGB + GL_SRC2_RGB GL_SOURCE2_RGB + GL_SRC0_ALPHA GL_SOURCE0_ALPHA + GL_SRC1_ALPHA GL_SOURCE1_ALPHA + GL_SRC2_ALPHA GL_SOURCE2_ALPHA + +See the `OpenGL +specification <https://www.opengl.org/documentation/spec.html>`__ for +more details. + +Version 5.x features +~~~~~~~~~~~~~~~~~~~~ + +Version 5.x of Mesa implements the OpenGL 1.4 API with the following +extensions incorporated as standard features: + +- GL_ARB_depth_texture +- GL_ARB_shadow +- GL_ARB_texture_env_crossbar +- GL_ARB_texture_mirror_repeat +- GL_ARB_window_pos +- GL_EXT_blend_color +- GL_EXT_blend_func_separate +- GL_EXT_blend_logic_op +- GL_EXT_blend_minmax +- GL_EXT_blend_subtract +- GL_EXT_fog_coord +- GL_EXT_multi_draw_arrays +- GL_EXT_point_parameters +- GL_EXT_secondary_color +- GL_EXT_stencil_wrap +- GL_EXT_texture_lod_bias (plus, a per-texture LOD bias parameter) +- GL_SGIS_generate_mipmap + +Version 4.x features +~~~~~~~~~~~~~~~~~~~~ + +Version 4.x of Mesa implements the OpenGL 1.3 API with the following +extensions incorporated as standard features: + +- GL_ARB_multisample +- GL_ARB_multitexture +- GL_ARB_texture_border_clamp +- GL_ARB_texture_compression +- GL_ARB_texture_cube_map +- GL_ARB_texture_env_add +- GL_ARB_texture_env_combine +- GL_ARB_texture_env_dot3 +- GL_ARB_transpose_matrix + +Version 3.x features +~~~~~~~~~~~~~~~~~~~~ + +Version 3.x of Mesa implements the OpenGL 1.2 API with the following +features: + +- BGR, BGRA and packed pixel formats +- New texture border clamp mode +- glDrawRangeElements() +- standard 3-D texturing +- advanced MIPMAP control +- separate specular color interpolation + +Version 2.x features +~~~~~~~~~~~~~~~~~~~~ + +Version 2.x of Mesa implements the OpenGL 1.1 API with the following +features. + +- Texture mapping: + + - glAreTexturesResident + - glBindTexture + - glCopyTexImage1D + - glCopyTexImage2D + - glCopyTexSubImage1D + - glCopyTexSubImage2D + - glDeleteTextures + - glGenTextures + - glIsTexture + - glPrioritizeTextures + - glTexSubImage1D + - glTexSubImage2D + +- Vertex Arrays: + + - glArrayElement + - glColorPointer + - glDrawElements + - glEdgeFlagPointer + - glIndexPointer + - glInterleavedArrays + - glNormalPointer + - glTexCoordPointer + - glVertexPointer + +- Client state management: + + - glDisableClientState + - glEnableClientState + - glPopClientAttrib + - glPushClientAttrib + +- Misc: + + - glGetPointer + - glIndexub + - glIndexubv + - glPolygonOffset |