+ Gallium3D is <a href="http://www.tungstengraphics.com/">Tungsten Graphics</a>'
+ new architecture for building 3D graphics drivers. Initially
+ supporting Mesa and Linux graphics drivers, Gallium3D is designed to allow
+ portability to all major operating systems and graphics interfaces.
+
+ Compared to existing Linux graphics drivers, Gallium3D will:
+
+ - Make drivers smaller and simpler.
+ Current DRI drivers are rather complicated. They're large, contain
+ duplicated code and are burdened with implementing many concepts tightly
+ tied to the OpenGL 1.x/2.x API.
+
+ - Model modern graphics hardware.
+ The new driver architecture is an abstraction of modern graphics hardware,
+ rather than an OpenGL->hardware translator. The new driver interface will
+ assume the presence of programmable vertex/fragment shaders and flexible
+ memory objects.
+
+ - Support multiple graphics APIs.
+ The OpenGL 3.0 API will be very different from OpenGL 1.x/2.x. We'd like a
+ driver model that is API-neutral so that it's not tied to a specific
+ graphics API.
+
+ \section contents Contents
+
+ - \ref overview
+
+ - \ref statetracker
+
+ - Pipe drivers:
+ - \ref softpipe
+ - \ref i915g
+
+ - Winsys drivers:
+ - X11 winsys driver (xm_winsys.c)
+ - Intel DRI winsys driver (intel_context.h, intel_winsys_pipe.c)
+
+ - Ancillary Modules:
+ - \ref draw
+ - \ref tgsi
+ - LLVM TGSI backend (gallivm.h)
+
+ - \ref callgraph
+
+ \section external External documentation
+
+ - <a href="http://www.tungstengraphics.com/gallium3D.htm">Gallium3D's Architectural Overview</a>
+ - <a href="http://www.tungstengraphics.com/wiki/index.php/Gallium3D">Technical Overview</a>
+ - <a href="http://www.tungstengraphics.com/wiki/files/gallium3d-xds2007.pdf">Gallium3D talk from XDS 2007</a>
+
+*/
+
+/** \page overview Overview
+
+ The public interface of a Gallium3D driver is described by the p_context.h
+ header file. The pipe_context structure is an abstract base class with
+ methods for:
+
+ - Setting rendering state (texture sampler state, vertex array info, drawing surfaces, etc.)
+
+ - Setting shader state, using the TGSI binary shader representation.
+
+ - Vertex array and indexed vertex array drawing.
+
+ - Region (memory) management for textures, renderbuffers, vertex buffers, etc.
+
+ - Hardware queries (number of texture units, max texture size, etc).
+
+ The p_state.h header defines all the state objects (such as polygon
+ rasterization options, blend modes, etc) and resources (drawing surfaces,
+ textures, memory buffers). The pipe interface uses "constant state" objects.
+ That is, state objects are created once and are immutable. State objects are
+ put into effect by binding them. This allows Gallium3D drivers to create
+ corresponding hardware state objects which can be quickly handled.
+
+ The p_defines.h header defines numerous constants and tokens (blend modes,
+ texture wrap modes, surface formats, etc.
+
+ The p_winsys.h header defines the window system and OS facilities which
+ Gallium3D drivers rely upon. For example, memory allocation is typically a
+ service the OS provides while window size/position information is provided by
+ the window system. Pipe drivers use the winsys interface to handle these
+ things.
+
+ By abstracting OS and window system services, pipe drivers are portable to
+ other platforms (e.g. embedded devices).