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