mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-11-24 10:44:15 +08:00
8f24a14175
Reviewed-by: Eric Anholt <eric@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6894>
311 lines
10 KiB
ReStructuredText
311 lines
10 KiB
ReStructuredText
.. include:: contents.rst
|
|
|
|
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
|