r200_context.h revision 4837ea30208d002bc36a836d2117f826d40c8bfa
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"
49adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
5095a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick#define ENABLE_HW_3D_TEXTURE 1  /* XXX this is temporary! */
51adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
52adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_context;
53adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef struct r200_context r200ContextRec;
54adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef struct r200_context *r200ContextPtr;
55adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
56adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_lock.h"
57adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_screen.h"
58adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "mm.h"
59adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
60adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Flags for software fallback cases */
61adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* See correponding strings in r200_swtcl.c */
62adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_FALLBACK_TEXTURE           0x1
63adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_FALLBACK_DRAW_BUFFER       0x2
64adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_FALLBACK_STENCIL           0x4
65adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_FALLBACK_RENDER_MODE       0x8
66adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_FALLBACK_BLEND_EQ          0x10
67adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_FALLBACK_BLEND_FUNC        0x20
68adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_FALLBACK_DISABLE           0x40
69adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_FALLBACK_BORDER_MODE       0x80
70adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
71adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* The blit width for texture uploads
72adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
73adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define BLIT_WIDTH_BYTES 1024
74adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
75adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Use the templated vertex format:
76adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
77adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define COLOR_IS_RGBA
78adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TAG(x) r200##x
79adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "tnl_dd/t_dd_vertex.h"
80adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#undef TAG
81adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
82adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef void (*r200_tri_func)( r200ContextPtr,
83adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				 r200Vertex *,
84adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				 r200Vertex *,
85adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				 r200Vertex * );
86adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
87adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef void (*r200_line_func)( r200ContextPtr,
88adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				  r200Vertex *,
89adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				  r200Vertex * );
90adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
91adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef void (*r200_point_func)( r200ContextPtr,
92adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				   r200Vertex * );
93adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
94adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
95adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_colorbuffer_state {
96adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint clear;
97adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLint drawOffset, drawPitch;
98273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   int roundEnable;
99adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
100adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
101adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
102adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_depthbuffer_state {
103b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   GLuint clear;
104adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLfloat scale;
105adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
106adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
107adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_pixel_state {
108adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLint readOffset, readPitch;
109adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
110adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
111adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_scissor_state {
112ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_clip_rect_t rect;
113adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean enabled;
114adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
115adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint numClipRects;			/* Cliprects active */
116adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint numAllocedClipRects;		/* Cliprects available */
117ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_clip_rect_t *pClipRects;
118adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
119adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
120adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_stencilbuffer_state {
121adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean hwBuffer;
122adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint clear;			/* rb3d_stencilrefmask value */
123adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
124adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
125adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_stipple_state {
126adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint mask[32];
127adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
128adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
129adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
130adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
131adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_0   0x1
132adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_1   0x2
13348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define TEX_2	0x4
13448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define TEX_3	0x8
13548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define TEX_4	0x10
13648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define TEX_5	0x20
13748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define TEX_ALL 0x3f
138adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
139adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelltypedef struct r200_tex_obj r200TexObj, *r200TexObjPtr;
140adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
141adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Texture object in locally shared texture space.
142adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
143adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_tex_obj {
144adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   driTextureObject   base;
145adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
146adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint bufAddr;			/* Offset to start of locally
147adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   shared texture block */
148adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
149adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint dirty_state;		        /* Flags (1 per texunit) for
150adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   whether or not this texobj
151adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   has dirty hardware state
152adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   (pp_*) that needs to be
153adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   brought into the
154adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   texunit. */
155adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
156ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_tex_image_t image[6][RADEON_MAX_TEXTURE_LEVELS];
157adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					/* Six, for the cube faces */
158adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
159adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txfilter;		        /* hardware register values */
160adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txformat;
161adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txformat_x;
162adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txoffset;		        /* Image location in texmem.
163adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					   All cube faces follow. */
164adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txsize;		        /* npot only */
165adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_txpitch;		        /* npot only */
166adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_border_color;
167adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint pp_cubic_faces;	        /* cube face 1,2,3,4 log2 sizes */
168adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
169adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean  border_fallback;
1704837ea30208d002bc36a836d2117f826d40c8bfaRoland Scheidegger
1714837ea30208d002bc36a836d2117f826d40c8bfaRoland Scheidegger   GLuint tile_bits;			/* hw texture tile bits used on this texture */
172adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
173adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
174adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
175adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_texture_env_state {
176adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200TexObjPtr texobj;
177adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLenum format;
178adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLenum envMode;
179adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
180adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
18148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define R200_MAX_TEXTURE_UNITS 6
182adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
183adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_texture_state {
184adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_texture_env_state unit[R200_MAX_TEXTURE_UNITS];
185adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
186adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
187adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
188adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_state_atom {
189adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom *next, *prev;
190adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   const char *name;		         /* for debug */
191adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int cmd_size;		         /* size in bytes */
192adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint idx;
193adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int *cmd;			         /* one or more cmd's */
194adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int *lastcmd;			 /* one or more cmd's */
195a05b1549f7b6da7d9313b9addf2d01b9c61f34d7Keith Whitwell   GLboolean dirty;
196adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean (*check)( GLcontext *, int );    /* is this state active? */
197adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
198adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
199adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
200adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
201adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Trying to keep these relatively short as the variables are becoming
202adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * extravagently long.  Drop the driver name prefix off the front of
203adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * everything - I think we know which driver we're in by now, and keep the
204adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * prefix to 3 letters unless absolutely impossible.
205adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
206adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
207adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_CMD_0             0
208adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_PP_MISC           1
209adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_PP_FOG_COLOR      2
210adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RE_SOLID_COLOR    3
211adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_BLENDCNTL    4
212adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_DEPTHOFFSET  5
213adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_DEPTHPITCH   6
214adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_ZSTENCILCNTL 7
215adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_CMD_1             8
216adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_PP_CNTL           9
217adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_CNTL         10
218adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_COLOROFFSET  11
219adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_CMD_2             12 /* why */
220adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CTX_RB3D_COLORPITCH   13 /* why */
221033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_STATE_SIZE_OLDDRM 14
222033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_CMD_3             14
223033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_RB3D_BLENDCOLOR   15
224033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_RB3D_ABLENDCNTL   16
225033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_RB3D_CBLENDCNTL   17
226033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger#define CTX_STATE_SIZE_NEWDRM 18
227adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
228adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define SET_CMD_0               0
229adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define SET_SE_CNTL             1
230adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define SET_RE_CNTL             2 /* replace se_coord_fmt */
231adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define SET_STATE_SIZE          3
232adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
233adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTE_CMD_0               0
234adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTE_SE_VTE_CNTL         1
235adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTE_STATE_SIZE          2
236adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
237adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_CMD_0               0
238adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_RE_LINE_PATTERN     1
239adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_RE_LINE_STATE       2
240adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_CMD_1               3
241adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_SE_LINE_WIDTH       4
242adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIN_STATE_SIZE          5
243adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
244adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSK_CMD_0               0
245adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSK_RB3D_STENCILREFMASK 1
246adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSK_RB3D_ROPCNTL        2
247adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSK_RB3D_PLANEMASK      3
248adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSK_STATE_SIZE          4
249adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
250adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_CMD_0           0
251adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_XSCALE          1
252adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_XOFFSET         2
253adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_YSCALE          3
254adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_YOFFSET         4
255adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_ZSCALE          5
256adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_SE_VPORT_ZOFFSET         6
257adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VPT_STATE_SIZE      7
258adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
259adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ZBS_CMD_0               0
260adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ZBS_SE_ZBIAS_FACTOR     1
261adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ZBS_SE_ZBIAS_CONSTANT   2
262adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ZBS_STATE_SIZE          3
263adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
264adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSC_CMD_0               0
265adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSC_RE_MISC             1
266adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSC_STATE_SIZE          2
267adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
268adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TAM_CMD_0               0
269adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TAM_DEBUG3              1
270adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TAM_STATE_SIZE          2
271adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
272adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_CMD_0                   0
273adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_TXFILTER             1  /*2c00*/
274adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_TXFORMAT             2  /*2c04*/
275adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_TXFORMAT_X           3  /*2c08*/
276adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_TXSIZE               4  /*2c0c*/
277adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_TXPITCH              5  /*2c10*/
278adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_BORDER_COLOR         6  /*2c14*/
279adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_CMD_1                   7
280adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_PP_TXOFFSET             8  /*2d00 */
281adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TEX_STATE_SIZE              9
282adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
283adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_CMD_0                  0  /* 1 register follows */
284adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_PP_CUBIC_FACES         1  /* 0x2c18 */
285adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_CMD_1                  2  /* 5 registers follow */
286adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_PP_CUBIC_OFFSET_F1     3  /* 0x2d04 */
287adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_PP_CUBIC_OFFSET_F2     4  /* 0x2d08 */
288adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_PP_CUBIC_OFFSET_F3     5  /* 0x2d0c */
289adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_PP_CUBIC_OFFSET_F4     6  /* 0x2d10 */
290adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_PP_CUBIC_OFFSET_F5     7  /* 0x2d14 */
291adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CUBE_STATE_SIZE             8
292adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
293adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_CMD_0                   0
294adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_PP_TXCBLEND             1
295adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_PP_TXCBLEND2            2
296adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_PP_TXABLEND             3
297adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_PP_TXABLEND2            4
298adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define PIX_STATE_SIZE              5
299adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
300adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_CMD_0                    0
301adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_0                1
302adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_1                2
303adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_2                3
304adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_3                4
305adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_4                5
306adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_TFACTOR_5                6
307adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TF_STATE_SIZE               7
308adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
309adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_CMD_0                 0
310adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_LIGHT_MODEL_CTL_0     1
311adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_LIGHT_MODEL_CTL_1     2
312adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_PER_LIGHT_CTL_0       3
313adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_PER_LIGHT_CTL_1       4
314adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_PER_LIGHT_CTL_2       5
315adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_PER_LIGHT_CTL_3       6
316adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_CMD_1                 7
317adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_UCP_VERT_BLEND_CTL    8
318adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_STATE_SIZE            9
319adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
320adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_CMD_0                     0
321adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_MATRIX_SELECT_0           1
322adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_MATRIX_SELECT_1           2
323adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_MATRIX_SELECT_2           3
324adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_MATRIX_SELECT_3           4
325adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_MATRIX_SELECT_4           5
326adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MSL_STATE_SIZE                6
327adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
328adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_CMD_0                 0
329adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_TEX_PROC_CTL_2            1
330adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_TEX_PROC_CTL_3            2
331adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_TEX_PROC_CTL_0            3
332adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_TEX_PROC_CTL_1            4
333adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_TEX_CYL_WRAP_CTL      5
334adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCG_STATE_SIZE            6
335adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
336adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_CMD_0            0
337adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_EMMISSIVE_RED    1
338adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_EMMISSIVE_GREEN  2
339adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_EMMISSIVE_BLUE   3
340adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_EMMISSIVE_ALPHA  4
341adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_AMBIENT_RED      5
342adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_AMBIENT_GREEN    6
343adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_AMBIENT_BLUE     7
344adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_AMBIENT_ALPHA    8
345adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_DIFFUSE_RED      9
346adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_DIFFUSE_GREEN    10
347adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_DIFFUSE_BLUE     11
348adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_DIFFUSE_ALPHA    12
349adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_SPECULAR_RED     13
350adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_SPECULAR_GREEN   14
351adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_SPECULAR_BLUE    15
352adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_SPECULAR_ALPHA   16
353adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_CMD_1            17
354adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_SHININESS        18
355adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MTL_STATE_SIZE       19
356adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
357adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VAP_CMD_0                   0
358adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VAP_SE_VAP_CNTL             1
359adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VAP_STATE_SIZE              2
360adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
361adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Replaces a lot of packet info from radeon
362adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
363adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_CMD_0                   0
364adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_VTXFMT_0            1
365adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_VTXFMT_1            2
366adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_TCL_OUTPUT_VTXFMT_0 3
367adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_TCL_OUTPUT_VTXFMT_1 4
368adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_CMD_1               5
369adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_TCL_OUTPUT_COMPSEL  6
370adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_CMD_2               7
371adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_STATE_CNTL          8
372adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_STATE_SIZE          9
373adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
374adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
375adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define VTX_COLOR(v,n)   (((v)>>(R200_VTX_COLOR_0_SHIFT+(n)*2))&\
376adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell                         R200_VTX_COLOR_MASK)
377adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
37895a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick/**
37995a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick * Given the \c R200_SE_VTX_FMT_1 for the current vertex state, determine
38095a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick * how many components are in texture coordinate \c n.
38195a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick */
38295a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick#define VTX_TEXn_COUNT(v,n)   (((v) >> (3 * n)) & 0x07)
38395a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick
384adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MAT_CMD_0              0
385adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MAT_ELT_0              1
386adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define MAT_STATE_SIZE         17
387adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
388adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_CMD_0                  0
389adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_VERT_GUARD_CLIP_ADJ    1
390adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_VERT_GUARD_DISCARD_ADJ 2
391adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_HORZ_GUARD_CLIP_ADJ    3
392adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_HORZ_GUARD_DISCARD_ADJ 4
393adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GRD_STATE_SIZE             5
394adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
395adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* position changes frequently when lighting in modelpos - separate
396adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * out to new state item?
397adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
398adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_CMD_0                  0
399adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_AMBIENT_RED            1
400adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_AMBIENT_GREEN          2
401adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_AMBIENT_BLUE           3
402adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_AMBIENT_ALPHA          4
403adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIFFUSE_RED            5
404adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIFFUSE_GREEN          6
405adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIFFUSE_BLUE           7
406adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIFFUSE_ALPHA          8
407adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPECULAR_RED           9
408adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPECULAR_GREEN         10
409adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPECULAR_BLUE          11
410adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPECULAR_ALPHA         12
411adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_POSITION_X             13
412adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_POSITION_Y             14
413adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_POSITION_Z             15
414adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_POSITION_W             16
415adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIRECTION_X            17
416adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIRECTION_Y            18
417adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIRECTION_Z            19
418adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_DIRECTION_W            20
4195d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer#define LIT_ATTEN_QUADRATIC        21
420adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_ATTEN_LINEAR           22
4215d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer#define LIT_ATTEN_CONST            23
422adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_ATTEN_XXX              24
423adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_CMD_1                  25
424adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPOT_DCD               26
425adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPOT_DCM               27
426adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPOT_EXPONENT          28
427adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPOT_CUTOFF            29
428adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_SPECULAR_THRESH        30
429adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_RANGE_CUTOFF           31 /* ? */
4305d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer#define LIT_ATTEN_CONST_INV        32
431adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define LIT_STATE_SIZE             33
432adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
433adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Fog
434adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
435adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_CMD_0      0
436adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_R          1
437adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_C          2
438adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_D          3
439adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_PAD        4
440adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define FOG_STATE_SIZE 5
441adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
442adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* UCP
443adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
444adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_CMD_0      0
445adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_X          1
446adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_Y          2
447adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_Z          3
448adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_W          4
449adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define UCP_STATE_SIZE 5
450adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
451adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* GLT - Global ambient
452adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
453adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_CMD_0      0
454adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_RED        1
455adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_GREEN      2
456adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_BLUE       3
457adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_ALPHA      4
458adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define GLT_STATE_SIZE 5
459adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
460adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* EYE
461adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
462adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_CMD_0          0
463adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_X              1
464adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_Y              2
465adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_Z              3
466adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_RESCALE_FACTOR 4
467adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define EYE_STATE_SIZE     5
468adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
469adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* CST - constant state
470adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
471adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_0                             0
472adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_PP_CNTL_X                         1
473adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_1                             2
474adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_RB3D_DEPTHXY_OFFSET               3
475adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_2                             4
476adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_RE_AUX_SCISSOR_CNTL               5
477adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_3                             6
478adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_RE_SCISSOR_TL_0                   7
479adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_RE_SCISSOR_BR_0                   8
480adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_4                             9
481adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_SE_VAP_CNTL_STATUS                10
482adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_5                             11
483adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_RE_POINTSIZE                      12
484adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_CMD_6                             13
485adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_SE_TCL_INPUT_VTX_0                14
486adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_SE_TCL_INPUT_VTX_1                15
487adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_SE_TCL_INPUT_VTX_2                16
488adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_SE_TCL_INPUT_VTX_3                17
489adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CST_STATE_SIZE                        18
490adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
491adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
492adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
493adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
494adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_hw_state {
4950c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   /* Head of the linked list of state atoms. */
4960c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   struct r200_state_atom atomlist;
497adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
498adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Hardware state, stored as cmdbuf commands:
499adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    *   -- Need to doublebuffer for
500adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    *           - reviving state after loss of context
501adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    *           - eliding noop statechange loops? (except line stipple count)
502adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
503adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom ctx;
504adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom set;
505adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom vte;
506adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom lin;
507adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom msk;
508adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom vpt;
509adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom vap;
510adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom vtx;
511adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom tcl;
512adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom msl;
513adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom tcg;
514adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom msc;
515adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom cst;
516adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom tam;
517adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom tf;
51848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   struct r200_state_atom tex[6];
51948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   struct r200_state_atom cube[6];
520adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom zbs;
521adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom mtl[2];
52248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   struct r200_state_atom mat[9];
523adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom lit[8]; /* includes vec, scl commands */
524adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom ucp[6];
525adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom pix[6]; /* pixshader stages */
526adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom eye; /* eye pos */
527adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom grd; /* guard band clipping */
528adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom fog;
529adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state_atom glt;
5306f3cc6a5226fd4b5d44cca91e2f76216ecaff831Eric Anholt
5316f3cc6a5226fd4b5d44cca91e2f76216ecaff831Eric Anholt   int max_state_size;	/* Number of bytes necessary for a full state emit. */
5320c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   GLboolean is_dirty, all_dirty;
533adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
534adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
535adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_state {
536adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Derived state for internal purposes:
537adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
538adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_colorbuffer_state color;
539adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_depthbuffer_state depth;
540adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_pixel_state pixel;
541adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_scissor_state scissor;
542adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_stencilbuffer_state stencil;
543adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_stipple_state stipple;
544adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_texture_state texture;
545adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
546adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
547adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Need refcounting on dma buffers:
548adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
549adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_dma_buffer {
550adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int refcount;		/* the number of retained regions in buf */
551adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   drmBufPtr buf;
552adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
553adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
554bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl#define GET_START(rvb) (rmesa->r200Screen->gart_buffer_offset +		\
555adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			(rvb)->address - rmesa->dma.buf0_address +	\
556adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			(rvb)->start)
557adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
558adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* A retained region, eg vertices for indexed vertices.
559adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
560adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_dma_region {
561adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_buffer *buf;
562adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   char *address;		/* == buf->address */
563adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int start, end, ptr;		/* offsets from start of buf */
564adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int aos_start;
565adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int aos_stride;
566adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int aos_size;
567adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
568adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
569adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
570adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_dma {
571adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Active dma region.  Allocations for vertices and retained
572adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    * regions come from here.  Also used for emitting random vertices,
573adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    * these may be flushed by calling flush_current();
574adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
575adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region current;
576adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
577adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   void (*flush)( r200ContextPtr );
578adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
579adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   char *buf0_address;		/* start of buf[0], for index calcs */
580adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint nr_released_bufs;	/* flush after so many buffers released */
581adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
582adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
583adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_dri_mirror {
584adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   __DRIcontextPrivate	*context;	/* DRI context */
585adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   __DRIscreenPrivate	*screen;	/* DRI screen */
586adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   __DRIdrawablePrivate	*drawable;	/* DRI drawable bound to this ctx */
587adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
588c06b25594e5effe34a90c067e1a3da0f61cf2b13Ian Romanick   drm_context_t hwContext;
589ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_hw_lock_t *hwLock;
590adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int fd;
591adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int drmMinor;
592adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
593adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
594adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
595adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_CMD_BUF_SZ  (8*1024)
596adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
597adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_store {
598adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint statenr;
599adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint primnr;
600adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   char cmd_buf[R200_CMD_BUF_SZ];
601adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int cmd_used;
602adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int elts_start;
603adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
604adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
605adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
606adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* r200_tcl.c
607adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
608adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_tcl_info {
609adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vertex_format;
610adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLint last_offset;
611adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint hw_primitive;
612adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
613adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region *aos_components[8];
614adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint nr_aos_components;
615adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
616adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint *Elts;
617adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
618adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region indexed_verts;
619adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region obj;
620adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region rgba;
621adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region spec;
622adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region fog;
623adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region tex[R200_MAX_TEXTURE_UNITS];
624adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region norm;
625adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
626adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
627adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
628adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* r200_swtcl.c
629adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
630adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_swtcl_info {
631adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint RenderIndex;
632e946688edac5cdf153652defae3ef732a3487416Ian Romanick
633e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
634e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Size of a hardware vertex.  This is calculated when \c ::vertex_attrs is
635e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * installed in the Mesa state vector.
636e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
637adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vertex_size;
638e946688edac5cdf153652defae3ef732a3487416Ian Romanick
639e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
640e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Attributes instructing the Mesa TCL pipeline where / how to put vertex
641e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * data in the hardware buffer.
642e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
643e946688edac5cdf153652defae3ef732a3487416Ian Romanick   struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
644e946688edac5cdf153652defae3ef732a3487416Ian Romanick
645e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
646e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Number of elements of \c ::vertex_attrs that are actually used.
647e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
648e946688edac5cdf153652defae3ef732a3487416Ian Romanick   GLuint vertex_attr_count;
649e946688edac5cdf153652defae3ef732a3487416Ian Romanick
650e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
651e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Cached pointer to the buffer where Mesa will store vertex data.
652e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
6535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLubyte *verts;
654adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
655adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Fallback rasterization functions
656adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
657adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200_point_func draw_point;
658adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200_line_func draw_line;
659adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200_tri_func draw_tri;
660adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
661adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint hw_primitive;
662adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLenum render_primitive;
663adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint numverts;
664adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
665e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
666e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Offset of the 4UB color data within a hardware (swtcl) vertex.
667e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
668e946688edac5cdf153652defae3ef732a3487416Ian Romanick   GLuint coloroffset;
669e946688edac5cdf153652defae3ef732a3487416Ian Romanick
670e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
671e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Offset of the 3UB specular color data within a hardware (swtcl) vertex.
672e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
673e946688edac5cdf153652defae3ef732a3487416Ian Romanick   GLuint specoffset;
674e946688edac5cdf153652defae3ef732a3487416Ian Romanick
675e946688edac5cdf153652defae3ef732a3487416Ian Romanick   /**
676e946688edac5cdf153652defae3ef732a3487416Ian Romanick    * Should Mesa project vertex data or will the hardware do it?
677e946688edac5cdf153652defae3ef732a3487416Ian Romanick    */
678e946688edac5cdf153652defae3ef732a3487416Ian Romanick   GLboolean needproj;
679e946688edac5cdf153652defae3ef732a3487416Ian Romanick
680adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma_region indexed_verts;
681adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
682adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
683adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
684adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_ioctl {
685adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vertex_offset;
686adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vertex_size;
687adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
688adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
689adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
690adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
691adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_MAX_PRIMS 64
692adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
693adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
694adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Want to keep a cache of these around.  Each is parameterized by
695adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * only a single value which has only a small range.  Only expect a
696adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * few, so just rescan the list each time?
697adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
698adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct dynfn {
699adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *next, *prev;
700adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int key[2];
701adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   char *code;
702adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
703adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
704adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct dfn_lists {
705adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Vertex2f;
706adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Vertex2fv;
707adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Vertex3f;
708adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Vertex3fv;
709adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color4ub;
710adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color4ubv;
711adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color3ub;
712adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color3ubv;
713adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color4f;
714adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color4fv;
715adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color3f;
716adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Color3fv;
717adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn SecondaryColor3ubEXT;
718adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn SecondaryColor3ubvEXT;
719adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn SecondaryColor3fEXT;
720adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn SecondaryColor3fvEXT;
721adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Normal3f;
722adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn Normal3fv;
72395a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn TexCoord3f;
72495a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn TexCoord3fv;
725adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn TexCoord2f;
726adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn TexCoord2fv;
727adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn TexCoord1f;
728adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn TexCoord1fv;
72995a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn MultiTexCoord3fARB;
73095a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn MultiTexCoord3fvARB;
731adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn MultiTexCoord2fARB;
732adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn MultiTexCoord2fvARB;
733adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn MultiTexCoord1fARB;
734adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn MultiTexCoord1fvARB;
735d294f79190a5b25ef0fbbbf3ac94b15c9402d009Roland Scheidegger   struct dynfn FogCoordfEXT;
736d294f79190a5b25ef0fbbbf3ac94b15c9402d009Roland Scheidegger   struct dynfn FogCoordfvEXT;
737adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
738adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
739adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct dfn_generators {
740adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Vertex2f)( GLcontext *, const int * );
741adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Vertex2fv)( GLcontext *, const int * );
742adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Vertex3f)( GLcontext *, const int * );
743adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Vertex3fv)( GLcontext *, const int * );
744adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color4ub)( GLcontext *, const int * );
745adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color4ubv)( GLcontext *, const int * );
746adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color3ub)( GLcontext *, const int * );
747adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color3ubv)( GLcontext *, const int * );
748adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color4f)( GLcontext *, const int * );
749adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color4fv)( GLcontext *, const int * );
750adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color3f)( GLcontext *, const int * );
751adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Color3fv)( GLcontext *, const int * );
752adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*SecondaryColor3ubEXT)( GLcontext *, const int * );
753adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*SecondaryColor3ubvEXT)( GLcontext *, const int * );
754adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*SecondaryColor3fEXT)( GLcontext *, const int * );
755adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*SecondaryColor3fvEXT)( GLcontext *, const int * );
756adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Normal3f)( GLcontext *, const int * );
757adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*Normal3fv)( GLcontext *, const int * );
75895a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn *(*TexCoord3f)( GLcontext *, const int * );
75995a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn *(*TexCoord3fv)( GLcontext *, const int * );
760adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*TexCoord2f)( GLcontext *, const int * );
761adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*TexCoord2fv)( GLcontext *, const int * );
762adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*TexCoord1f)( GLcontext *, const int * );
763adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*TexCoord1fv)( GLcontext *, const int * );
76495a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn *(*MultiTexCoord3fARB)( GLcontext *, const int * );
76595a0bd6762737bb25bdf5c4147da9d1372f6aac3Ian Romanick   struct dynfn *(*MultiTexCoord3fvARB)( GLcontext *, const int * );
766adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*MultiTexCoord2fARB)( GLcontext *, const int * );
767adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*MultiTexCoord2fvARB)( GLcontext *, const int * );
768adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*MultiTexCoord1fARB)( GLcontext *, const int * );
769adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dynfn *(*MultiTexCoord1fvARB)( GLcontext *, const int * );
770d294f79190a5b25ef0fbbbf3ac94b15c9402d009Roland Scheidegger   struct dynfn *(*FogCoordfEXT)( GLcontext *, const int * );
771d294f79190a5b25ef0fbbbf3ac94b15c9402d009Roland Scheidegger   struct dynfn *(*FogCoordfvEXT)( GLcontext *, const int * );
772adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
773adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
774adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
775adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
776adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_prim {
777adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint start;
778adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint end;
779adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint prim;
780adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
781adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
78248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   /* A maximum total of 29 elements per vertex:  3 floats for position, 3
783adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    * floats for normal, 4 floats for color, 4 bytes for secondary color,
78448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger    * 3 floats for each texture unit (18 floats total).
785adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    *
78648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger    * we maybe need add. 4 to prevent segfault if someone specifies
78748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger    * GL_TEXTURE6/GL_TEXTURE7 (esp. for the codegen-path) (FIXME: )
788adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    *
789adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    * The position data is never actually stored here, so 3 elements could be
790adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    * trimmed out of the buffer.
791adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
79248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger
79348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger#define R200_MAX_VERTEX_SIZE ((3*6)+11)
79448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger
79548ccaf200940613032dfaaafe71382947f398004Roland Scheideggerstruct r200_vbinfo {
79648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   GLint counter, initial_counter;
79748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   GLint *dmaptr;
79848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   void (*notify)( void );
79948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   GLint vertex_size;
80048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger
80148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   union { float f; int i; r200_color_t color; } vertex[R200_MAX_VERTEX_SIZE];
802adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
803adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLfloat *normalptr;
804adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLfloat *floatcolorptr;
805d294f79190a5b25ef0fbbbf3ac94b15c9402d009Roland Scheidegger   GLfloat *fogptr;
806adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200_color_t *colorptr;
807adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLfloat *floatspecptr;
808adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200_color_t *specptr;
80948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   GLfloat *texcoordptr[8];	/* 6 (TMU) + 2 for r200_vtxfmt_c.c when GL_TEXTURE6/7 */
810adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
811adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
812adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLenum *prim;		/* &ctx->Driver.CurrentExecPrimitive */
813adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint primflags;
814adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean enabled;		/* *_NO_VTXFMT / *_NO_TCL env vars */
815adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean installed;
816adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean fell_back;
817adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean recheck;
818adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLint nrverts;
819adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vtxfmt_0, vtxfmt_1;
820adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
821adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint installed_vertex_format;
822adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint installed_color_3f_sz;
823adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
824adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_prim primlist[R200_MAX_PRIMS];
825adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   int nrprims;
826adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
827adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dfn_lists dfn_cache;
828adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct dfn_generators codegen;
829adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLvertexformat vtxfmt;
830adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
831adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
832adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
833adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstruct r200_context {
834adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLcontext *glCtx;			/* Mesa context */
835adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
836adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Driver and hardware state management
837adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
838adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_hw_state hw;
839adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_state state;
840adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
841adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Texture object bookkeeping
842adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
843adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   unsigned              nr_heaps;
844adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   driTexHeap          * texture_heaps[ R200_NR_TEX_HEAPS ];
845adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   driTextureObject      swapped;
846d907a75498360fb96ec2314bb0abb105be74d500Alan Hourihane   int                   texture_depth;
847d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul   float                 initialMaxAnisotropy;
848adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
849adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Rasterization and vertex state:
850adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
851adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint TclFallback;
852adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint Fallback;
853adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint NewGLState;
854b1ebd306bf4fdc4076d3d3daa410b08f477cb4c4Eric Anholt   GLuint tnl_index;	/* index of bits for last tnl_install_attrs */
855adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
856adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Vertex buffers
857adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
858adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_ioctl ioctl;
859adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dma dma;
860adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_store store;
8617a086dc05e665a78f7e9d069aa4fc70e844b8988Eric Anholt   /* A full state emit as of the first state emit in the main store, in case
8627a086dc05e665a78f7e9d069aa4fc70e844b8988Eric Anholt    * the context is lost.
8637a086dc05e665a78f7e9d069aa4fc70e844b8988Eric Anholt    */
8647a086dc05e665a78f7e9d069aa4fc70e844b8988Eric Anholt   struct r200_store backup_store;
865adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
866adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Page flipping
867adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
868adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint doPageFlip;
869adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
870adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Busy waiting
871adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
872adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint do_usleeps;
873adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint do_irqs;
874adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint irqsEmitted;
875ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_irq_wait_t iw;
876adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
877adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Clientdata textures;
878adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
879bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   GLuint prefer_gart_client_texturing;
880adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
881adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Drawable, cliprect and scissor information
882adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
883adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint numClipRects;			/* Cliprects for the draw buffer */
884ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_clip_rect_t *pClipRects;
885adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   unsigned int lastStamp;
886adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean lost_context;
8877a086dc05e665a78f7e9d069aa4fc70e844b8988Eric Anholt   GLboolean save_on_next_emit;
888adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200ScreenPtr r200Screen;	/* Screen private DRI data */
889ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_sarea_t *sarea;		/* Private SAREA data */
890adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
891adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* TCL stuff
892adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
893adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLmatrix TexGenMatrix[R200_MAX_TEXTURE_UNITS];
894adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean recheck_texgen[R200_MAX_TEXTURE_UNITS];
895adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLboolean TexGenNeedNormals[R200_MAX_TEXTURE_UNITS];
896adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint TexMatEnabled;
897adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint TexMatCompSel;
898adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint TexGenEnabled;
899adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint TexGenCompSel;
900adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLmatrix tmpmat;
901adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
902adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* VBI / buffer swap
903adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
904adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vbl_seq;
905adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint vblank_flags;
906adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
907afa446db83ecf5dcb38ce46648fb12911628de32Ian Romanick   int64_t swap_ust;
908afa446db83ecf5dcb38ce46648fb12911628de32Ian Romanick   int64_t swap_missed_ust;
909adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
910adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint swap_count;
911adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint swap_missed_count;
912adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
913adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   PFNGLXGETUSTPROC get_ust;
914adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
915adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* r200_tcl.c
916adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
917adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_tcl_info tcl;
918adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
919adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* r200_swtcl.c
920adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
921adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_swtcl_info swtcl;
922adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
923adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* r200_vtxfmt.c
924adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
925adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_vbinfo vb;
926adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
927adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Mirrors of some DRI state
928adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
929adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   struct r200_dri_mirror dri;
930bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl
931bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   /* Configuration cache
932bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl    */
933bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   driOptionCache optionCache;
934b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger
935b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   GLboolean using_hyperz;
9364837ea30208d002bc36a836d2117f826d40c8bfaRoland Scheidegger   GLboolean texmicrotile;
937adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell};
938adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
939adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_CONTEXT(ctx)		((r200ContextPtr)(ctx->DriverCtx))
940adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
941adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
942adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic __inline GLuint r200PackColor( GLuint cpp,
943adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					GLubyte r, GLubyte g,
944adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					GLubyte b, GLubyte a )
945adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
946adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   switch ( cpp ) {
947adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 2:
948adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      return PACK_COLOR_565( r, g, b );
949adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 4:
950adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      return PACK_COLOR_8888( a, r, g, b );
951adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   default:
952adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      return 0;
953adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
954adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
955adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
956adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
957adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern void r200DestroyContext( __DRIcontextPrivate *driContextPriv );
958adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern GLboolean r200CreateContext( const __GLcontextModes *glVisual,
959adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				    __DRIcontextPrivate *driContextPriv,
960adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				    void *sharedContextPrivate);
961adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern void r200SwapBuffers( __DRIdrawablePrivate *dPriv );
962adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern GLboolean r200MakeCurrent( __DRIcontextPrivate *driContextPriv,
963adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				  __DRIdrawablePrivate *driDrawPriv,
964adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				  __DRIdrawablePrivate *driReadPriv );
965adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern GLboolean r200UnbindContext( __DRIcontextPrivate *driContextPriv );
966adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
967adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* ================================================================
968adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * Debugging:
969adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
970adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DO_DEBUG		1
971adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
972adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#if DO_DEBUG
973adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellextern int R200_DEBUG;
974adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#else
975adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define R200_DEBUG		0
976adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#endif
977adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
978adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_TEXTURE	0x001
979adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_STATE	0x002
980adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_IOCTL	0x004
981adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_PRIMS	0x008
982adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_VERTS	0x010
983adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_FALLBACKS	0x020
984adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_VFMT	0x040
985adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_CODEGEN	0x080
986adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_VERBOSE	0x100
987adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_DRI       0x200
988adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_DMA       0x400
989adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_SANITY    0x800
990adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_SYNC      0x1000
991adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_PIXEL     0x2000
992adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define DEBUG_MEMORY    0x4000
993adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
994adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#endif /* __R200_CONTEXT_H__ */
995