Acknowledgements
================

The following individuals and groups are to be acknowledged for their
contributions to Mesa over the years. This list is far from complete and
somewhat dated, unfortunately.

-  Early Mesa development was done while Brian was part of the `SSEC
   Visualization Project <https://www.ssec.wisc.edu/~billh/vis.html>`__
   at the University of Wisconsin. He'd like to thank Bill Hibbard for
   letting him work on Mesa as part of that project.
-  John Carmack of id Software, Inc. funded Keith Whitwell in 1999 in
   order to optimize Mesa's vertex transformation module. This is a very
   substantial piece of work.
-  Precision Insight, Inc., VA Linux Systems, Inc., and most recently,
   Tungsten Graphics, Inc. have supported the ongoing development of
   Mesa.
-  The `Mesa <https://www.mesa3d.org>`__ website and Git repository are
   hosted by `freedesktop.org <https://freedesktop.org/>`__.
-  `alt.software <http://web.archive.org/web/20131110021426/http://www.altsoftware.com/>`__
   contributed the Direct3D driver.
-  **Bernd Barsuhn** wrote the evaluator code for (splines, patches) in
   Mesa.
-  **Bernhard Tschirren** wrote the Allegro DJGPP driver.
-  **Bogdan Sikorski** wrote the GLU NURBS and polygon tessellator in
   Mesa.
-  **Charlie Wallace** wrote the MS-DOS driver.
-  **CJ Beyer** was the www.mesa3d.org webmaster.
-  **Darren Abbott** provided the OS/2 driver.
-  **David Bucciarelli** wrote and maintained the 3Dfx Glide driver.
   Thousands of Linux/Quake players thank David!
-  **Gareth Hughes** wrote new GLU 1.2 Polygon Tessellation code (now
   superseded by SGI SI GLU).
-  **Holger Waechtler** contributed AMD 3DNow! assembly code which
   accelerates vertex transformation in Mesa 3.1. Holger also
   implemented the GL_EXT_texture_env_combine extension.
-  **Jeroen van der Zijp** and **Thorsten Ohl** contributed the Xt/Motif
   widget code.
-  **John Stone** provided the multi-threading support in Mesa 3.0.
-  **John Watson** assisted with web page design.
-  **Josh Vanderhoof** contributed Intel x86 assembly code which
   accelerates vertex transformation in Mesa 3.x.
-  **Jouk Jansen** contributed and continues to maintain the VMS
   support.
-  **Karl Schultz** has been maintaining the Windows driver.
-  **Keith Whitwell** has made extension contributions to Mesa since
   1999.
-  **Kendall Bennett** wrote the SciTech MGL driver.
-  **Klaus Niederkrueger** contributed many improvements to Mesa's
   software rasterizer.
-  **Mark Kilgard** contributed antialiased line improvements and
   several extensions.
-  **Michael Pichler** contributed *many* bug fixes
-  **Miklos Fazekas** wrote and maintains the Macintosh driver.
-  **Pascal Thibaudeau** wrote the NeXT driver.
-  **Pedro Vazquez** setup and maintains the Mesa Mailing list.
-  **Randy Frank** contributed *many* bug fixes.
-  **Stefan Zivkovic** wrote the Amiga driver.
-  **Stephane Rehel** provided the Cygnus Win32 support
-  **Ted Jump** maintained the makefiles and project files for Windows
   95/98/NT compilation for some time.
-  **Uwe Maurer** wrote the LibGGI driver for Mesa-3.0.
-  **Victor Ng-Thow-Hing** wrote the Amiwin driver for the Amiga.

Apologies to anyone who's been omitted. Please send corrections and
additions to Brian.
