r200_context.h revision fc606f7db9072d4f40081aea8f92f1d4489a5115
1bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl/* $XFree86: xc/lib/GL/mesa/src/drv/r200/r200_context.h,v 1.2 2002/12/16 16:18:54 dawes Exp $ */
2bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl/*
3adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellCopyright (C) The Weather Channel, Inc.  2002.  All Rights Reserved.
4adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
5adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThe Weather Channel (TM) funded Tungsten Graphics to develop the
6adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellinitial release of the Radeon 8500 driver under the XFree86 license.
7adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThis notice must be preserved.
8adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
9adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellPermission is hereby granted, free of charge, to any person obtaining
10adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwella copy of this software and associated documentation files (the
11adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell"Software"), to deal in the Software without restriction, including
12adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellwithout limitation the rights to use, copy, modify, merge, publish,
13adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelldistribute, sublicense, and/or sell copies of the Software, and to
14adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellpermit persons to whom the Software is furnished to do so, subject to
15adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellthe following conditions:
16adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
17adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThe above copyright notice and this permission notice (including the
18adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellnext paragraph) shall be included in all copies or substantial
19adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellportions of the Software.
20adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
21adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
25adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
29adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell**************************************************************************/
30adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
31adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/*
32adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * Authors:
33adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell *   Keith Whitwell <keith@tungstengraphics.com>
34adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
35adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
36adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#ifndef __R200_CONTEXT_H__
37adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define __R200_CONTEXT_H__
38adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
39e946688edac5cdf153652defae3ef732a3487416Ian Romanick#include "tnl/t_vertex.h"
40ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl#include "drm.h"
41ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl#include "radeon_drm.h"
42adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "dri_util.h"
43adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "texmem.h"
44adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
45adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "macros.h"
46adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "mtypes.h"
47adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "colormac.h"
48adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_reg.h"
4998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#include "r200_vertprog.h"
50adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
5195a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick#define ENABLE_HW_3D_TEXTURE 1  /* XXX this is temporary! */
52adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
53bf35d70635309e499aee666eb5811446aa8b489eRoland Scheidegger#ifndef R200_EMIT_VAP_PVS_CNTL
54bf35d70635309e499aee666eb5811446aa8b489eRoland Scheidegger#error This driver requires a newer libdrm to compile
55bf35d70635309e499aee666eb5811446aa8b489eRoland Scheidegger#endif
56bf35d70635309e499aee666eb5811446aa8b489eRoland Scheidegger
57adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_context;
58adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef struct r200_context r200ContextRec;
59adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef struct r200_context *r200ContextPtr;
60adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
6108e62a147618ac796f5e548bdaa3380342ec2a78Roland Scheidegger/* This union is used to avoid warnings/miscompilation
6208e62a147618ac796f5e548bdaa3380342ec2a78Roland Scheidegger   with float to uint32_t casts due to strict-aliasing */
6308e62a147618ac796f5e548bdaa3380342ec2a78Roland Scheideggertypedef union { GLfloat f; uint32_t ui32; } float_ui32_type;
6408e62a147618ac796f5e548bdaa3380342ec2a78Roland Scheidegger
65adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_lock.h"
663a5626cb846ad767fe1c38fe35ebe4df3e3a0454Eric Anholt#include "radeon_screen.h"
67adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "mm.h"
68adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
69adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Flags for software fallback cases */
70adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* See correponding strings in r200_swtcl.c */
71ef377c3c007611e57aef176cb66d8b4c18f1a6c3Eric Anholt#define R200_FALLBACK_TEXTURE           0x01
72ef377c3c007611e57aef176cb66d8b4c18f1a6c3Eric Anholt#define R200_FALLBACK_DRAW_BUFFER       0x02
73ef377c3c007611e57aef176cb66d8b4c18f1a6c3Eric Anholt#define R200_FALLBACK_STENCIL           0x04
74ef377c3c007611e57aef176cb66d8b4c18f1a6c3Eric Anholt#define R200_FALLBACK_RENDER_MODE       0x08
75ef377c3c007611e57aef176cb66d8b4c18f1a6c3Eric Anholt#define R200_FALLBACK_DISABLE           0x10
76ef377c3c007611e57aef176cb66d8b4c18f1a6c3Eric Anholt#define R200_FALLBACK_BORDER_MODE       0x20
77adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
78adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* The blit width for texture uploads
79adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
80adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define BLIT_WIDTH_BYTES 1024
81adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
82adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Use the templated vertex format:
83adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
84adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define COLOR_IS_RGBA
85adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TAG(x) r200##x
86adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "tnl_dd/t_dd_vertex.h"
87adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#undef TAG
88adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
89adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef void (*r200_tri_func)( r200ContextPtr,
90adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				 r200Vertex *,
91adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				 r200Vertex *,
92adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				 r200Vertex * );
93adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
94adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef void (*r200_line_func)( r200ContextPtr,
95adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				  r200Vertex *,
96adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				  r200Vertex * );
97adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
98adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef void (*r200_point_func)( r200ContextPtr,
99adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				   r200Vertex * );
100adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
101adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
10298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheideggerstruct r200_vertex_program {
103122629f27925a9dc50029bebc5079f87f416a7e1Brian Paul        struct gl_vertex_program mesa_program; /* Must be first */
10498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger        int translated;
105fc606f7db9072d4f40081aea8f92f1d4489a5115Roland Scheidegger        /* need excess instr: 1 for late loop checking, 2 for
106fc606f7db9072d4f40081aea8f92f1d4489a5115Roland Scheidegger           additional instr due to instr/attr, 3 for fog */
107fc606f7db9072d4f40081aea8f92f1d4489a5115Roland Scheidegger        VERTEX_SHADER_INSTRUCTION instr[R200_VSF_MAX_INST + 6];
10898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger        int pos_end;
10998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger        int inputs[VERT_ATTRIB_MAX];
11098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger        int native;
111fc606f7db9072d4f40081aea8f92f1d4489a5115Roland Scheidegger        int fogpidx;
112fc606f7db9072d4f40081aea8f92f1d4489a5115Roland Scheidegger        int fogmode;
11398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger};
11498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
115adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_colorbuffer_state {
116adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint clear;
117fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#if 000
118adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLint drawOffset, drawPitch;
119fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#endif
120273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   int roundEnable;
121adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
122adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
123adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
124adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_depthbuffer_state {
125b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   GLuint clear;
126adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLfloat scale;
127adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
128adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
129fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#if 000
130adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_pixel_state {
131adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLint readOffset, readPitch;
132adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
133fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#endif
134adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
135adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_scissor_state {
136ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_clip_rect_t rect;
137adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean enabled;
138adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
139adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint numClipRects;			/* Cliprects active */
140adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint numAllocedClipRects;		/* Cliprects available */
141ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_clip_rect_t *pClipRects;
142adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
143adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
144adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_stencilbuffer_state {
145adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean hwBuffer;
146adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint clear;			/* rb3d_stencilrefmask value */
147adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
148adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
149adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_stipple_state {
150adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint mask[32];
151adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
152adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
153adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
154adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
155adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_0   0x1
156adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_1   0x2
15748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define TEX_2	0x4
15848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define TEX_3	0x8
15948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define TEX_4	0x10
16048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define TEX_5	0x20
16148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define TEX_ALL 0x3f
162adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
163adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef struct r200_tex_obj r200TexObj, *r200TexObjPtr;
164adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
165adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Texture object in locally shared texture space.
166adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
167adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_tex_obj {
168adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   driTextureObject   base;
169adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
170adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint bufAddr;			/* Offset to start of locally
171adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   shared texture block */
172adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
173adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint dirty_state;		        /* Flags (1 per texunit) for
174adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   whether or not this texobj
175adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   has dirty hardware state
176adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   (pp_*) that needs to be
177adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   brought into the
178adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   texunit. */
179adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
180ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_tex_image_t image[6][RADEON_MAX_TEXTURE_LEVELS];
181adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					/* Six, for the cube faces */
182adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
183adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txfilter;		        /* hardware register values */
184adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txformat;
185adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txformat_x;
186adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txoffset;		        /* Image location in texmem.
187adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   All cube faces follow. */
188adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txsize;		        /* npot only */
189adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txpitch;		        /* npot only */
190adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_border_color;
191adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_cubic_faces;	        /* cube face 1,2,3,4 log2 sizes */
192adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
193adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean  border_fallback;
1944837ea30208d002bc36a836d2117f826d40c8bfaRoland Scheidegger
1954837ea30208d002bc36a836d2117f826d40c8bfaRoland Scheidegger   GLuint tile_bits;			/* hw texture tile bits used on this texture */
196adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
197adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
198adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
199adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_texture_env_state {
200adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200TexObjPtr texobj;
20136603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   GLuint outputreg;
20236603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   GLuint unitneeded;
203adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
204adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
20548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define R200_MAX_TEXTURE_UNITS 6
206adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
207adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_texture_state {
208adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_texture_env_state unit[R200_MAX_TEXTURE_UNITS];
209adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
210adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
211adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
212adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_state_atom {
213adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom *next, *prev;
214adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   const char *name;		         /* for debug */
215adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int cmd_size;		         /* size in bytes */
216adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint idx;
217adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int *cmd;			         /* one or more cmd's */
218adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int *lastcmd;			 /* one or more cmd's */
219a05b1549f7b6da7d9313b9addf2d01b9c61f34d7Keith Whitwell   GLboolean dirty;
220adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean (*check)( GLcontext *, int );    /* is this state active? */
221adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
222adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
223adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
224adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
225adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Trying to keep these relatively short as the variables are becoming
226adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * extravagently long.  Drop the driver name prefix off the front of
227adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * everything - I think we know which driver we're in by now, and keep the
228adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * prefix to 3 letters unless absolutely impossible.
229adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
230adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
231adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_CMD_0             0
232adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_PP_MISC           1
233adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_PP_FOG_COLOR      2
234adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RE_SOLID_COLOR    3
235adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_BLENDCNTL    4
236adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_DEPTHOFFSET  5
237adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_DEPTHPITCH   6
238adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_ZSTENCILCNTL 7
239adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_CMD_1             8
240adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_PP_CNTL           9
241adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_CNTL         10
242adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_COLOROFFSET  11
243adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_CMD_2             12 /* why */
244adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_COLORPITCH   13 /* why */
245033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_STATE_SIZE_OLDDRM 14
246033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_CMD_3             14
247033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_RB3D_BLENDCOLOR   15
248033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_RB3D_ABLENDCNTL   16
249033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_RB3D_CBLENDCNTL   17
250033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_STATE_SIZE_NEWDRM 18
251adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
252adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define SET_CMD_0               0
253adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define SET_SE_CNTL             1
254adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define SET_RE_CNTL             2 /* replace se_coord_fmt */
255adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define SET_STATE_SIZE          3
256adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
257adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTE_CMD_0               0
258adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTE_SE_VTE_CNTL         1
259adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTE_STATE_SIZE          2
260adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
261adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_CMD_0               0
262adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_RE_LINE_PATTERN     1
263adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_RE_LINE_STATE       2
264adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_CMD_1               3
265adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_SE_LINE_WIDTH       4
266adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_STATE_SIZE          5
267adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
268adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSK_CMD_0               0
269adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSK_RB3D_STENCILREFMASK 1
270adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSK_RB3D_ROPCNTL        2
271adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSK_RB3D_PLANEMASK      3
272adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSK_STATE_SIZE          4
273adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
274adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_CMD_0           0
275adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_XSCALE          1
276adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_XOFFSET         2
277adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_YSCALE          3
278adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_YOFFSET         4
279adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_ZSCALE          5
280adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_ZOFFSET         6
281adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_STATE_SIZE      7
282adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
283adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ZBS_CMD_0               0
284adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ZBS_SE_ZBIAS_FACTOR     1
285adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ZBS_SE_ZBIAS_CONSTANT   2
286adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ZBS_STATE_SIZE          3
287adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
288adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSC_CMD_0               0
289adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSC_RE_MISC             1
290adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSC_STATE_SIZE          2
291adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
292adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TAM_CMD_0               0
293adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TAM_DEBUG3              1
294adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TAM_STATE_SIZE          2
295adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
296adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_CMD_0                   0
297adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_TXFILTER             1  /*2c00*/
298adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_TXFORMAT             2  /*2c04*/
299adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_TXFORMAT_X           3  /*2c08*/
300adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_TXSIZE               4  /*2c0c*/
301adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_TXPITCH              5  /*2c10*/
302adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_BORDER_COLOR         6  /*2c14*/
303f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define TEX_CMD_1_OLDDRM            7
304f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define TEX_PP_TXOFFSET_OLDDRM      8  /*2d00 */
305f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define TEX_STATE_SIZE_OLDDRM       9
306f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define TEX_PP_CUBIC_FACES          7
307f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define TEX_PP_TXMULTI_CTL          8
308f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define TEX_CMD_1_NEWDRM            9
309f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define TEX_PP_TXOFFSET_NEWDRM     10
310f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define TEX_STATE_SIZE_NEWDRM      11
311f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
312f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define CUBE_CMD_0                  0  /* 1 register follows */ /* this command unnecessary */
313f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define CUBE_PP_CUBIC_FACES         1  /* 0x2c18 */             /* with new enough drm */
314adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_CMD_1                  2  /* 5 registers follow */
315adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_PP_CUBIC_OFFSET_F1     3  /* 0x2d04 */
316adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_PP_CUBIC_OFFSET_F2     4  /* 0x2d08 */
317adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_PP_CUBIC_OFFSET_F3     5  /* 0x2d0c */
318adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_PP_CUBIC_OFFSET_F4     6  /* 0x2d10 */
319adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_PP_CUBIC_OFFSET_F5     7  /* 0x2d14 */
320adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_STATE_SIZE             8
321adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
322adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_CMD_0                   0
323adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_PP_TXCBLEND             1
324adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_PP_TXCBLEND2            2
325adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_PP_TXABLEND             3
326adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_PP_TXABLEND2            4
327adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_STATE_SIZE              5
328adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
329adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_CMD_0                    0
330adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_0                1
331adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_1                2
332adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_2                3
333adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_3                4
334adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_4                5
335adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_5                6
336adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_STATE_SIZE               7
337adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
338f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define ATF_CMD_0                   0
339f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define ATF_TFACTOR_0               1
340f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define ATF_TFACTOR_1               2
341f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define ATF_TFACTOR_2               3
342f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define ATF_TFACTOR_3               4
343f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define ATF_TFACTOR_4               5
344f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define ATF_TFACTOR_5               6
345f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define ATF_TFACTOR_6               7
346f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define ATF_TFACTOR_7               8
347f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define ATF_STATE_SIZE              9
348f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
349f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger/* ATI_FRAGMENT_SHADER */
350f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define AFS_CMD_0                 0
351f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define AFS_IC0                   1 /* 2f00 */
352f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define AFS_IC1                   2 /* 2f04 */
353f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define AFS_IA0                   3 /* 2f08 */
354f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define AFS_IA1                   4 /* 2f0c */
355f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger#define AFS_STATE_SIZE           33
356f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
35798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define PVS_CMD_0                 0
35898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define PVS_CNTL_1                1
35998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define PVS_CNTL_2                2
36098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define PVS_STATE_SIZE            3
36198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
36298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger/* those are quite big... */
36398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPI_CMD_0                 0
36498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPI_OPDST_0               1
36598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPI_SRC0_0                2
36698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPI_SRC1_0                3
36798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPI_SRC2_0                4
36898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPI_OPDST_63              253
36998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPI_SRC0_63               254
37098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPI_SRC1_63               255
37198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPI_SRC2_63               256
37298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPI_STATE_SIZE            257
37398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
37498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPP_CMD_0                0
37598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPP_PARAM0_0             1
37698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPP_PARAM1_0             2
37798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPP_PARAM2_0             3
37898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPP_PARAM3_0             4
37998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPP_PARAM0_95            381
38098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPP_PARAM1_95            382
38198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPP_PARAM2_95            383
38298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPP_PARAM3_95            384
38398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VPP_STATE_SIZE           385
38498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
385adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_CMD_0                 0
386adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_LIGHT_MODEL_CTL_0     1
387adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_LIGHT_MODEL_CTL_1     2
388adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_PER_LIGHT_CTL_0       3
389adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_PER_LIGHT_CTL_1       4
390adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_PER_LIGHT_CTL_2       5
391adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_PER_LIGHT_CTL_3       6
392adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_CMD_1                 7
393adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_UCP_VERT_BLEND_CTL    8
394adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_STATE_SIZE            9
395adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
396adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_CMD_0                     0
397adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_MATRIX_SELECT_0           1
398adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_MATRIX_SELECT_1           2
399adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_MATRIX_SELECT_2           3
400adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_MATRIX_SELECT_3           4
401adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_MATRIX_SELECT_4           5
402adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_STATE_SIZE                6
403adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
404adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_CMD_0                 0
405adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_TEX_PROC_CTL_2            1
406adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_TEX_PROC_CTL_3            2
407adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_TEX_PROC_CTL_0            3
408adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_TEX_PROC_CTL_1            4
409adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_TEX_CYL_WRAP_CTL      5
410adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_STATE_SIZE            6
411adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
412adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_CMD_0            0
413adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_EMMISSIVE_RED    1
414adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_EMMISSIVE_GREEN  2
415adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_EMMISSIVE_BLUE   3
416adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_EMMISSIVE_ALPHA  4
417adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_AMBIENT_RED      5
418adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_AMBIENT_GREEN    6
419adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_AMBIENT_BLUE     7
420adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_AMBIENT_ALPHA    8
421adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_DIFFUSE_RED      9
422adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_DIFFUSE_GREEN    10
423adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_DIFFUSE_BLUE     11
424adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_DIFFUSE_ALPHA    12
425adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_SPECULAR_RED     13
426adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_SPECULAR_GREEN   14
427adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_SPECULAR_BLUE    15
428adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_SPECULAR_ALPHA   16
429adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_CMD_1            17
430adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_SHININESS        18
431adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_STATE_SIZE       19
432adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
433adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VAP_CMD_0                   0
434adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VAP_SE_VAP_CNTL             1
435adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VAP_STATE_SIZE              2
436adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
437adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Replaces a lot of packet info from radeon
438adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
439adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_CMD_0                   0
440adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_VTXFMT_0            1
441adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_VTXFMT_1            2
442adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_TCL_OUTPUT_VTXFMT_0 3
443adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_TCL_OUTPUT_VTXFMT_1 4
444adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_CMD_1               5
445adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_TCL_OUTPUT_COMPSEL  6
446adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_CMD_2               7
447adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_STATE_CNTL          8
448adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_STATE_SIZE          9
449adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
45044dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger/* SPR - point sprite state
45144dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger */
452cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define SPR_CMD_0              0
453cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define SPR_POINT_SPRITE_CNTL  1
454cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define SPR_STATE_SIZE         2
455cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger
456cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_CMD_0              0
457cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_VPORT_SCALE_0      1
458cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_VPORT_SCALE_1      2
459cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_VPORT_SCALE_PTSIZE 3
460cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_VPORT_SCALE_3      4
461cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_CMD_1              5
462cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_ATT_CONST_QUAD     6
463cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_ATT_CONST_LIN      7
464cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_ATT_CONST_CON      8
465cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_ATT_CONST_3        9
466cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_EYE_X             10
467cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_EYE_Y             11
468cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_EYE_Z             12
469cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_EYE_3             13
470cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_CLAMP_MIN         14
471cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_CLAMP_MAX         15
472cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_CLAMP_2           16
473cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_CLAMP_3           17
474cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger#define PTP_STATE_SIZE        18
475adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
476adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_COLOR(v,n)   (((v)>>(R200_VTX_COLOR_0_SHIFT+(n)*2))&\
477adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell                         R200_VTX_COLOR_MASK)
478adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
47995a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick/**
48095a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick * Given the \c R200_SE_VTX_FMT_1 for the current vertex state, determine
48195a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick * how many components are in texture coordinate \c n.
48295a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick */
48395a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick#define VTX_TEXn_COUNT(v,n)   (((v) >> (3 * n)) & 0x07)
48495a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick
485adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MAT_CMD_0              0
486adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MAT_ELT_0              1
487adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MAT_STATE_SIZE         17
488adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
489adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_CMD_0                  0
490adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_VERT_GUARD_CLIP_ADJ    1
491adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_VERT_GUARD_DISCARD_ADJ 2
492adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_HORZ_GUARD_CLIP_ADJ    3
493adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_HORZ_GUARD_DISCARD_ADJ 4
494adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_STATE_SIZE             5
495adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
496adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* position changes frequently when lighting in modelpos - separate
497adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * out to new state item?
498adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
499adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_CMD_0                  0
500adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_AMBIENT_RED            1
501adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_AMBIENT_GREEN          2
502adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_AMBIENT_BLUE           3
503adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_AMBIENT_ALPHA          4
504adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIFFUSE_RED            5
505adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIFFUSE_GREEN          6
506adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIFFUSE_BLUE           7
507adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIFFUSE_ALPHA          8
508adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPECULAR_RED           9
509adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPECULAR_GREEN         10
510adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPECULAR_BLUE          11
511adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPECULAR_ALPHA         12
512adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_POSITION_X             13
513adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_POSITION_Y             14
514adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_POSITION_Z             15
515adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_POSITION_W             16
516adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIRECTION_X            17
517adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIRECTION_Y            18
518adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIRECTION_Z            19
519adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIRECTION_W            20
5205d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer#define LIT_ATTEN_QUADRATIC        21
521adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_ATTEN_LINEAR           22
5225d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer#define LIT_ATTEN_CONST            23
523adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_ATTEN_XXX              24
524adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_CMD_1                  25
525adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPOT_DCD               26
526adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPOT_DCM               27
527adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPOT_EXPONENT          28
528adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPOT_CUTOFF            29
529adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPECULAR_THRESH        30
530adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_RANGE_CUTOFF           31 /* ? */
5315d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer#define LIT_ATTEN_CONST_INV        32
532adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_STATE_SIZE             33
533adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
534adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Fog
535adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
536adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_CMD_0      0
537adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_R          1
538adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_C          2
539adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_D          3
540adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_PAD        4
541adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_STATE_SIZE 5
542adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
543adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* UCP
544adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
545adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_CMD_0      0
546adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_X          1
547adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_Y          2
548adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_Z          3
549adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_W          4
550adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_STATE_SIZE 5
551adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
552adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* GLT - Global ambient
553adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
554adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_CMD_0      0
555adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_RED        1
556adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_GREEN      2
557adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_BLUE       3
558adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_ALPHA      4
559adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_STATE_SIZE 5
560adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
561adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* EYE
562adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
563adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_CMD_0          0
564adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_X              1
565adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_Y              2
566adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_Z              3
567adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_RESCALE_FACTOR 4
568adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_STATE_SIZE     5
569adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
570adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* CST - constant state
571adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
572adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_0                             0
573adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_PP_CNTL_X                         1
574adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_1                             2
575adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_RB3D_DEPTHXY_OFFSET               3
576adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_2                             4
577adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_RE_AUX_SCISSOR_CNTL               5
578adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_3                             6
579adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_RE_SCISSOR_TL_0                   7
580adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_RE_SCISSOR_BR_0                   8
581adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_4                             9
582adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_SE_VAP_CNTL_STATUS                10
583adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_5                             11
584adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_RE_POINTSIZE                      12
585adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_6                             13
586adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_SE_TCL_INPUT_VTX_0                14
587adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_SE_TCL_INPUT_VTX_1                15
588adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_SE_TCL_INPUT_VTX_2                16
589adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_SE_TCL_INPUT_VTX_3                17
590adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_STATE_SIZE                        18
591adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
592fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger#define PRF_CMD_0         0
593fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger#define PRF_PP_TRI_PERF   1
594fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger#define PRF_PP_PERF_CNTL  2
595fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger#define PRF_STATE_SIZE    3
596adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
597adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
598adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_hw_state {
5990c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   /* Head of the linked list of state atoms. */
6000c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   struct r200_state_atom atomlist;
601adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
602adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Hardware state, stored as cmdbuf commands:
603adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    *   -- Need to doublebuffer for
604adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    *           - reviving state after loss of context
605adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    *           - eliding noop statechange loops? (except line stipple count)
606adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
607adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom ctx;
608adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom set;
609adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom vte;
610adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom lin;
611adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom msk;
612adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom vpt;
613adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom vap;
614adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom vtx;
615adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom tcl;
616adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom msl;
617adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom tcg;
618adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom msc;
619adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom cst;
620adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom tam;
621adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom tf;
62248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   struct r200_state_atom tex[6];
62348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   struct r200_state_atom cube[6];
624adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom zbs;
625fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   struct r200_state_atom mtl[2];
626fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   struct r200_state_atom mat[9];
627adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom lit[8]; /* includes vec, scl commands */
628adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom ucp[6];
629adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom pix[6]; /* pixshader stages */
630adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom eye; /* eye pos */
631adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom grd; /* guard band clipping */
632fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   struct r200_state_atom fog;
633fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   struct r200_state_atom glt;
634fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   struct r200_state_atom prf;
635f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   struct r200_state_atom afs[2];
63698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   struct r200_state_atom pvs;
63798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   struct r200_state_atom vpi[2];
63898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   struct r200_state_atom vpp[2];
639f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   struct r200_state_atom atf;
64044dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger   struct r200_state_atom spr;
641cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   struct r200_state_atom ptp;
6426f3cc6a5226fd4b5d44cca91e2f76216ecaff831Eric Anholt
6436f3cc6a5226fd4b5d44cca91e2f76216ecaff831Eric Anholt   int max_state_size;	/* Number of bytes necessary for a full state emit. */
6440c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   GLboolean is_dirty, all_dirty;
645adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
646adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
647adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_state {
648adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Derived state for internal purposes:
649adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
650adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_colorbuffer_state color;
651adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_depthbuffer_state depth;
652fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#if 00
653adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_pixel_state pixel;
654fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#endif
655adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_scissor_state scissor;
656adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_stencilbuffer_state stencil;
657adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_stipple_state stipple;
658adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_texture_state texture;
65936603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   GLuint envneeded;
660adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
661adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
662adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Need refcounting on dma buffers:
663adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
664adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_dma_buffer {
665adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int refcount;		/* the number of retained regions in buf */
666adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   drmBufPtr buf;
667adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
668adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
669bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl#define GET_START(rvb) (rmesa->r200Screen->gart_buffer_offset +		\
670adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			(rvb)->address - rmesa->dma.buf0_address +	\
671adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			(rvb)->start)
672adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
673adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* A retained region, eg vertices for indexed vertices.
674adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
675adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_dma_region {
676adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_buffer *buf;
677adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   char *address;		/* == buf->address */
678adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int start, end, ptr;		/* offsets from start of buf */
679adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int aos_start;
680adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int aos_stride;
681adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int aos_size;
682adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
683adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
684adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
685adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_dma {
686adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Active dma region.  Allocations for vertices and retained
687adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    * regions come from here.  Also used for emitting random vertices,
688adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    * these may be flushed by calling flush_current();
689adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
690adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region current;
691adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
692adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   void (*flush)( r200ContextPtr );
693adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
694adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   char *buf0_address;		/* start of buf[0], for index calcs */
695adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint nr_released_bufs;	/* flush after so many buffers released */
696adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
697adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
698adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_dri_mirror {
699adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   __DRIcontextPrivate	*context;	/* DRI context */
700adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   __DRIscreenPrivate	*screen;	/* DRI screen */
701adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   __DRIdrawablePrivate	*drawable;	/* DRI drawable bound to this ctx */
702adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
703c06b25594e5effe34a90c067e1a3da0f61cf2b13Ian Romanick   drm_context_t hwContext;
704ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_hw_lock_t *hwLock;
705adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int fd;
706adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int drmMinor;
707adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
708adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
709adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
7108a6182105772280e2727de4a00809c8fb7b13c87Roland Scheidegger#define R200_CMD_BUF_SZ  (16*1024)
711adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
712adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_store {
713adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint statenr;
714adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint primnr;
715adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   char cmd_buf[R200_CMD_BUF_SZ];
716adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int cmd_used;
717adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int elts_start;
718adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
719adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
720adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
721adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* r200_tcl.c
722adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
723adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_tcl_info {
724adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vertex_format;
725adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLint last_offset;
726adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint hw_primitive;
727adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
7286ff023fe3a3fab14c33d20218155f82e1ed76b7eRoland Scheidegger/* FIXME: what's the maximum number of components? */
7296ff023fe3a3fab14c33d20218155f82e1ed76b7eRoland Scheidegger   struct r200_dma_region *aos_components[11];
730adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint nr_aos_components;
731adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
732adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint *Elts;
733adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
734adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region indexed_verts;
735adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region obj;
736adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region rgba;
737adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region spec;
738adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region fog;
739adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region tex[R200_MAX_TEXTURE_UNITS];
740adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region norm;
741adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
742adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
743adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
744adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* r200_swtcl.c
745adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
746adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_swtcl_info {
747adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint RenderIndex;
748e946688edac5cdf153652defae3ef732a3487416Ian Romanick
749e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
750e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Size of a hardware vertex.  This is calculated when \c ::vertex_attrs is
751e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * installed in the Mesa state vector.
752e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
753adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vertex_size;
754e946688edac5cdf153652defae3ef732a3487416Ian Romanick
755e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
756e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Attributes instructing the Mesa TCL pipeline where / how to put vertex
757e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * data in the hardware buffer.
758e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
759e946688edac5cdf153652defae3ef732a3487416Ian Romanick   struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
760e946688edac5cdf153652defae3ef732a3487416Ian Romanick
761e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
762e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Number of elements of \c ::vertex_attrs that are actually used.
763e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
764e946688edac5cdf153652defae3ef732a3487416Ian Romanick   GLuint vertex_attr_count;
765e946688edac5cdf153652defae3ef732a3487416Ian Romanick
766e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
767e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Cached pointer to the buffer where Mesa will store vertex data.
768e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
7695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLubyte *verts;
770adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
771adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Fallback rasterization functions
772adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
773adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200_point_func draw_point;
774adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200_line_func draw_line;
775adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200_tri_func draw_tri;
776adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
777adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint hw_primitive;
778adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLenum render_primitive;
779adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint numverts;
780adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
781e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
782e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Offset of the 4UB color data within a hardware (swtcl) vertex.
783e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
784e946688edac5cdf153652defae3ef732a3487416Ian Romanick   GLuint coloroffset;
785e946688edac5cdf153652defae3ef732a3487416Ian Romanick
786e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
787e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Offset of the 3UB specular color data within a hardware (swtcl) vertex.
788e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
789e946688edac5cdf153652defae3ef732a3487416Ian Romanick   GLuint specoffset;
790e946688edac5cdf153652defae3ef732a3487416Ian Romanick
791e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
792e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Should Mesa project vertex data or will the hardware do it?
793e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
794e946688edac5cdf153652defae3ef732a3487416Ian Romanick   GLboolean needproj;
795e946688edac5cdf153652defae3ef732a3487416Ian Romanick
796adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region indexed_verts;
797adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
798adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
799adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
800adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_ioctl {
801adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vertex_offset;
802adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vertex_size;
803adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
804adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
805adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
806adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
807adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_MAX_PRIMS 64
808adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
809adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
810adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Want to keep a cache of these around.  Each is parameterized by
811adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * only a single value which has only a small range.  Only expect a
812adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * few, so just rescan the list each time?
813adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
814adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct dynfn {
815adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *next, *prev;
816adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int key[2];
817adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   char *code;
818adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
819adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
820adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct dfn_lists {
821adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Vertex2f;
822adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Vertex2fv;
823adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Vertex3f;
824adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Vertex3fv;
825adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color4ub;
826adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color4ubv;
827adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color3ub;
828adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color3ubv;
829adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color4f;
830adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color4fv;
831adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color3f;
832adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color3fv;
833adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn SecondaryColor3ubEXT;
834adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn SecondaryColor3ubvEXT;
835adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn SecondaryColor3fEXT;
836adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn SecondaryColor3fvEXT;
837adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Normal3f;
838adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Normal3fv;
83995a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn TexCoord3f;
84095a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn TexCoord3fv;
841adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn TexCoord2f;
842adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn TexCoord2fv;
843adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn TexCoord1f;
844adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn TexCoord1fv;
84595a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn MultiTexCoord3fARB;
84695a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn MultiTexCoord3fvARB;
847adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn MultiTexCoord2fARB;
848adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn MultiTexCoord2fvARB;
849adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn MultiTexCoord1fARB;
850adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn MultiTexCoord1fvARB;
851d294f79190a5b25ef0fbbbf3ac94b15c9402d009Roland Scheidegger   struct dynfn FogCoordfEXT;
852d294f79190a5b25ef0fbbbf3ac94b15c9402d009Roland Scheidegger   struct dynfn FogCoordfvEXT;
853adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
854adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
855adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct dfn_generators {
856adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Vertex2f)( GLcontext *, const int * );
857adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Vertex2fv)( GLcontext *, const int * );
858adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Vertex3f)( GLcontext *, const int * );
859adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Vertex3fv)( GLcontext *, const int * );
860adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color4ub)( GLcontext *, const int * );
861adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color4ubv)( GLcontext *, const int * );
862adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color3ub)( GLcontext *, const int * );
863adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color3ubv)( GLcontext *, const int * );
864adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color4f)( GLcontext *, const int * );
865adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color4fv)( GLcontext *, const int * );
866adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color3f)( GLcontext *, const int * );
867adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color3fv)( GLcontext *, const int * );
868adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*SecondaryColor3ubEXT)( GLcontext *, const int * );
869adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*SecondaryColor3ubvEXT)( GLcontext *, const int * );
870adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*SecondaryColor3fEXT)( GLcontext *, const int * );
871adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*SecondaryColor3fvEXT)( GLcontext *, const int * );
872adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Normal3f)( GLcontext *, const int * );
873adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Normal3fv)( GLcontext *, const int * );
87495a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn *(*TexCoord3f)( GLcontext *, const int * );
87595a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn *(*TexCoord3fv)( GLcontext *, const int * );
876adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*TexCoord2f)( GLcontext *, const int * );
877adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*TexCoord2fv)( GLcontext *, const int * );
878adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*TexCoord1f)( GLcontext *, const int * );
879adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*TexCoord1fv)( GLcontext *, const int * );
88095a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn *(*MultiTexCoord3fARB)( GLcontext *, const int * );
88195a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn *(*MultiTexCoord3fvARB)( GLcontext *, const int * );
882adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*MultiTexCoord2fARB)( GLcontext *, const int * );
883adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*MultiTexCoord2fvARB)( GLcontext *, const int * );
884adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*MultiTexCoord1fARB)( GLcontext *, const int * );
885adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*MultiTexCoord1fvARB)( GLcontext *, const int * );
886d294f79190a5b25ef0fbbbf3ac94b15c9402d009Roland Scheidegger   struct dynfn *(*FogCoordfEXT)( GLcontext *, const int * );
887d294f79190a5b25ef0fbbbf3ac94b15c9402d009Roland Scheidegger   struct dynfn *(*FogCoordfvEXT)( GLcontext *, const int * );
888adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
889adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
890adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
891adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
892adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_prim {
893adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint start;
894adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint end;
895adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint prim;
896adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
897adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
89848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   /* A maximum total of 29 elements per vertex:  3 floats for position, 3
899adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    * floats for normal, 4 floats for color, 4 bytes for secondary color,
90048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger    * 3 floats for each texture unit (18 floats total).
901adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    *
90248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger    * we maybe need add. 4 to prevent segfault if someone specifies
90348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger    * GL_TEXTURE6/GL_TEXTURE7 (esp. for the codegen-path) (FIXME: )
904adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    *
905adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    * The position data is never actually stored here, so 3 elements could be
906adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    * trimmed out of the buffer.
907adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
90848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger
90948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define R200_MAX_VERTEX_SIZE ((3*6)+11)
91048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger
91148ccaf200940613032dfaaafe71382947f398004Roland Scheideggerstruct r200_vbinfo {
91248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   GLint counter, initial_counter;
91348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   GLint *dmaptr;
91448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   void (*notify)( void );
91548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   GLint vertex_size;
91648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger
91748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   union { float f; int i; r200_color_t color; } vertex[R200_MAX_VERTEX_SIZE];
918adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
919adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLfloat *normalptr;
920adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLfloat *floatcolorptr;
921d294f79190a5b25ef0fbbbf3ac94b15c9402d009Roland Scheidegger   GLfloat *fogptr;
922adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200_color_t *colorptr;
923adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLfloat *floatspecptr;
924adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200_color_t *specptr;
92548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   GLfloat *texcoordptr[8];	/* 6 (TMU) + 2 for r200_vtxfmt_c.c when GL_TEXTURE6/7 */
926adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
927adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
928adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLenum *prim;		/* &ctx->Driver.CurrentExecPrimitive */
929adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint primflags;
930adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean enabled;		/* *_NO_VTXFMT / *_NO_TCL env vars */
931adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean installed;
932adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean fell_back;
933adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean recheck;
934adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLint nrverts;
935adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vtxfmt_0, vtxfmt_1;
936adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
937adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint installed_vertex_format;
938adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint installed_color_3f_sz;
939adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
940adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_prim primlist[R200_MAX_PRIMS];
941adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int nrprims;
942adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
943adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dfn_lists dfn_cache;
944adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dfn_generators codegen;
945adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLvertexformat vtxfmt;
946adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
947adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
948adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
949adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_context {
950adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLcontext *glCtx;			/* Mesa context */
951adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
952adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Driver and hardware state management
953adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
954adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_hw_state hw;
955adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state state;
95698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   struct r200_vertex_program *curr_vp_hw;
957adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
958adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Texture object bookkeeping
959adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
960adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   unsigned              nr_heaps;
9613a5626cb846ad767fe1c38fe35ebe4df3e3a0454Eric Anholt   driTexHeap          * texture_heaps[ RADEON_NR_TEX_HEAPS ];
962adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   driTextureObject      swapped;
963d907a75498360fb96ec2314bb0abb105be74d500Alan Hourihane   int                   texture_depth;
964d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul   float                 initialMaxAnisotropy;
965adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
966adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Rasterization and vertex state:
967adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
968adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint TclFallback;
969adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint Fallback;
970adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint NewGLState;
971bb38cadb1c5f2dc13096a091bdaf61dc3e3cfa4dMichal Krol   DECLARE_RENDERINPUTS(tnl_index_bitset);	/* index of bits for last tnl_install_attrs */
972adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
973adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Vertex buffers
974adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
975adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_ioctl ioctl;
976adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma dma;
977adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_store store;
9787a086dc05e665a78f7e9d069aa4fc70e844b8988Eric Anholt   /* A full state emit as of the first state emit in the main store, in case
9797a086dc05e665a78f7e9d069aa4fc70e844b8988Eric Anholt    * the context is lost.
9807a086dc05e665a78f7e9d069aa4fc70e844b8988Eric Anholt    */
9817a086dc05e665a78f7e9d069aa4fc70e844b8988Eric Anholt   struct r200_store backup_store;
982adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
983adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Page flipping
984adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
985adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint doPageFlip;
986adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
987adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Busy waiting
988adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
989adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint do_usleeps;
990adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint do_irqs;
991adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint irqsEmitted;
992ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_irq_wait_t iw;
993adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
994adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Clientdata textures;
995adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
996bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   GLuint prefer_gart_client_texturing;
997adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
998adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Drawable, cliprect and scissor information
999adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
1000adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint numClipRects;			/* Cliprects for the draw buffer */
1001ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_clip_rect_t *pClipRects;
1002adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   unsigned int lastStamp;
1003adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean lost_context;
10047a086dc05e665a78f7e9d069aa4fc70e844b8988Eric Anholt   GLboolean save_on_next_emit;
10053a5626cb846ad767fe1c38fe35ebe4df3e3a0454Eric Anholt   radeonScreenPtr r200Screen;	/* Screen private DRI data */
1006ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_sarea_t *sarea;		/* Private SAREA data */
1007adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1008adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* TCL stuff
1009adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
1010adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLmatrix TexGenMatrix[R200_MAX_TEXTURE_UNITS];
1011adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean recheck_texgen[R200_MAX_TEXTURE_UNITS];
1012adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean TexGenNeedNormals[R200_MAX_TEXTURE_UNITS];
101324a44d74b6e9880dfc019bd1cfa9ce0351377c85Roland Scheidegger   GLuint TexMatEnabled;
1014adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint TexMatCompSel;
1015adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint TexGenEnabled;
1016adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint TexGenCompSel;
1017adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLmatrix tmpmat;
1018adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1019adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* VBI / buffer swap
1020adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
1021adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vbl_seq;
1022adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vblank_flags;
1023adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1024afa446db83ecf5dcb38ce46648fb12911628de32Ian Romanick   int64_t swap_ust;
1025afa446db83ecf5dcb38ce46648fb12911628de32Ian Romanick   int64_t swap_missed_ust;
1026adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1027adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint swap_count;
1028adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint swap_missed_count;
1029adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1030adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1031adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* r200_tcl.c
1032adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
1033adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_tcl_info tcl;
1034adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1035adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* r200_swtcl.c
1036adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
1037adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_swtcl_info swtcl;
1038adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1039adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* r200_vtxfmt.c
1040adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
1041adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_vbinfo vb;
1042adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1043adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Mirrors of some DRI state
1044adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
1045adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dri_mirror dri;
1046bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl
1047bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   /* Configuration cache
1048bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl    */
1049bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   driOptionCache optionCache;
1050b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger
1051b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   GLboolean using_hyperz;
10524837ea30208d002bc36a836d2117f826d40c8bfaRoland Scheidegger   GLboolean texmicrotile;
1053f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
1054f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger  struct ati_fragment_shader *afs_loaded;
1055adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
1056adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1057adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_CONTEXT(ctx)		((r200ContextPtr)(ctx->DriverCtx))
1058adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1059adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1060adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic __inline GLuint r200PackColor( GLuint cpp,
1061adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					GLubyte r, GLubyte g,
1062adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					GLubyte b, GLubyte a )
1063adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
1064adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   switch ( cpp ) {
1065adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 2:
1066adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      return PACK_COLOR_565( r, g, b );
1067adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 4:
1068adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      return PACK_COLOR_8888( a, r, g, b );
1069adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   default:
1070adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      return 0;
1071adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
1072adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
1073adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1074adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1075adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern void r200DestroyContext( __DRIcontextPrivate *driContextPriv );
1076adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern GLboolean r200CreateContext( const __GLcontextModes *glVisual,
1077adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				    __DRIcontextPrivate *driContextPriv,
1078adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				    void *sharedContextPrivate);
1079adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern void r200SwapBuffers( __DRIdrawablePrivate *dPriv );
1080f2ad1b60c0da11283b399008f491792790cea294Brian Paulextern void r200CopySubBuffer( __DRIdrawablePrivate * dPriv,
1081f2ad1b60c0da11283b399008f491792790cea294Brian Paul			       int x, int y, int w, int h );
1082adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern GLboolean r200MakeCurrent( __DRIcontextPrivate *driContextPriv,
1083adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				  __DRIdrawablePrivate *driDrawPriv,
1084adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				  __DRIdrawablePrivate *driReadPriv );
1085adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern GLboolean r200UnbindContext( __DRIcontextPrivate *driContextPriv );
1086adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1087adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* ================================================================
1088adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * Debugging:
1089adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
1090adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DO_DEBUG		1
1091adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1092adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#if DO_DEBUG
1093adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern int R200_DEBUG;
1094adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#else
1095adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_DEBUG		0
1096adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#endif
1097adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1098adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_TEXTURE	0x001
1099adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_STATE	0x002
1100adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_IOCTL	0x004
1101adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_PRIMS	0x008
1102adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_VERTS	0x010
1103adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_FALLBACKS	0x020
1104adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_VFMT	0x040
1105adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_CODEGEN	0x080
1106adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_VERBOSE	0x100
1107adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_DRI       0x200
1108adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_DMA       0x400
1109adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_SANITY    0x800
1110adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_SYNC      0x1000
1111adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_PIXEL     0x2000
1112adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_MEMORY    0x4000
1113adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1114adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#endif /* __R200_CONTEXT_H__ */
1115