radeon_context.h revision 5d00e131d8a264498b8d050c3eded093ee5c42f2
15df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_context.h,v 1.6 2002/12/16 16:18:58 dawes Exp $ */
25df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/**************************************************************************
35df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
45df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulCopyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
55df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul                     VA Linux Systems Inc., Fremont, California.
65df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
75df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulAll Rights Reserved.
85df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
95df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulPermission is hereby granted, free of charge, to any person obtaining
105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paula copy of this software and associated documentation files (the
115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul"Software"), to deal in the Software without restriction, including
125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulwithout limitation the rights to use, copy, modify, merge, publish,
135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Pauldistribute, sublicense, and/or sell copies of the Software, and to
145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulpermit persons to whom the Software is furnished to do so, subject to
155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulthe following conditions:
165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulThe above copyright notice and this permission notice (including the
185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulnext paragraph) shall be included in all copies or substantial
195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulportions of the Software.
205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian PaulWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul**************************************************************************/
305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/*
325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Authors:
335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul *   Kevin E. Martin <martin@valinux.com>
345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul *   Gareth Hughes <gareth@valinux.com>
355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul *   Keith Whitwell <keith@tungstengraphics.com>
365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#ifndef __RADEON_CONTEXT_H__
395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define __RADEON_CONTEXT_H__
405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#ifdef GLX_DIRECT_RENDERING
425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include <inttypes.h>
445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "dri_util.h"
455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_common.h"
465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "texmem.h"
475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "macros.h"
495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "mtypes.h"
505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "colormac.h"
515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_context;
535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paultypedef struct radeon_context radeonContextRec;
545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paultypedef struct radeon_context *radeonContextPtr;
555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_lock.h"
575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "radeon_screen.h"
585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "mm.h"
595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell#include "math/m_vector.h"
6157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell
625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* Flags for software fallback cases */
635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* See correponding strings in radeon_swtcl.c */
645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_FALLBACK_TEXTURE		0x0001
655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_FALLBACK_DRAW_BUFFER	0x0002
665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_FALLBACK_STENCIL		0x0004
675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_FALLBACK_RENDER_MODE	0x0008
685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_FALLBACK_BLEND_EQ	0x0010
695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_FALLBACK_BLEND_FUNC	0x0020
705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_FALLBACK_DISABLE 	0x0040
715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_FALLBACK_BORDER_MODE	0x0080
725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* The blit width for texture uploads
745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define BLIT_WIDTH_BYTES 1024
765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* Use the templated vertex format:
785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define COLOR_IS_RGBA
805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TAG(x) radeon##x
815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#include "tnl_dd/t_dd_vertex.h"
825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#undef TAG
835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paultypedef void (*radeon_tri_func)( radeonContextPtr,
855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul				 radeonVertex *,
865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul				 radeonVertex *,
875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul				 radeonVertex * );
885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paultypedef void (*radeon_line_func)( radeonContextPtr,
905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul				  radeonVertex *,
915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul				  radeonVertex * );
925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paultypedef void (*radeon_point_func)( radeonContextPtr,
945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul				   radeonVertex * );
955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_colorbuffer_state {
985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint clear;
995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLint drawOffset, drawPitch;
10099ef0a03292e7dc6aa2465aaaa620f394d2c286bAlan Hourihane   int roundEnable;
1015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
1025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_depthbuffer_state {
1055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint clear;
1065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLfloat scale;
1075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
1085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_pixel_state {
1105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLint readOffset, readPitch;
1115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
1125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_scissor_state {
1145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   XF86DRIClipRectRec rect;
1155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLboolean enabled;
1165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint numClipRects;			/* Cliprects active */
1185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint numAllocedClipRects;		/* Cliprects available */
1195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   XF86DRIClipRectPtr pClipRects;
1205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
1215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_stencilbuffer_state {
1235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLboolean hwBuffer;
1245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint clear;			/* rb3d_stencilrefmask value */
1255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
1265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_stipple_state {
1285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint mask[32];
1295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
1305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_0   0x1
1345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_1   0x2
1355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_ALL 0x3
1365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paultypedef struct radeon_tex_obj radeonTexObj, *radeonTexObjPtr;
1385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* Texture object in locally shared texture space.
1405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
1415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_tex_obj {
1425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   driTextureObject   base;
1435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint bufAddr;			/* Offset to start of locally
1455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul					   shared texture block */
1465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint dirty_state;		        /* Flags (1 per texunit) for
1485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul					   whether or not this texobj
1495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul					   has dirty hardware state
1505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul					   (pp_*) that needs to be
1515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul					   brought into the
1525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul					   texunit. */
1535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   drmRadeonTexImage image[6][RADEON_MAX_TEXTURE_LEVELS];
1555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul					/* Six, for the cube faces */
1565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint pp_txfilter;		        /* hardware register values */
1585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint pp_txformat;
1595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint pp_txoffset;		        /* Image location in texmem.
1605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul					   All cube faces follow. */
1615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint pp_txsize;		        /* npot only */
1625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint pp_txpitch;		        /* npot only */
1635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint pp_border_color;
1645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint pp_cubic_faces;	        /* cube face 1,2,3,4 log2 sizes */
1655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLboolean  border_fallback;
1675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
1685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_texture_env_state {
1715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   radeonTexObjPtr texobj;
1725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLenum format;
1735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLenum envMode;
1745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
1755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_texture_state {
1775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_texture_env_state unit[RADEON_MAX_TEXTURE_UNITS];
1785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
1795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_state_atom {
1825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom *next, *prev;
1835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   const char *name;		         /* for debug */
1845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int cmd_size;		         /* size in bytes */
1855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint is_tcl;
1865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int *cmd;			         /* one or more cmd's */
1875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int *lastcmd;			 /* one or more cmd's */
18822d1acf2ee25280c3294c2cfded232e612ffac2eFelix Kuehling   GLboolean dirty;                      /* dirty-mark in emit_state_list */
1895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLboolean (*check)( GLcontext * );    /* is this state active? */
1905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
1915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
1945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* Trying to keep these relatively short as the variables are becoming
1955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * extravagently long.  Drop the driver name prefix off the front of
1965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * everything - I think we know which driver we're in by now, and keep the
1975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * prefix to 3 letters unless absolutely impossible.
1985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
1995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_CMD_0             0
2015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_PP_MISC           1
2025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_PP_FOG_COLOR      2
2035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_RE_SOLID_COLOR    3
2045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_RB3D_BLENDCNTL    4
2055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_RB3D_DEPTHOFFSET  5
2065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_RB3D_DEPTHPITCH   6
2075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_RB3D_ZSTENCILCNTL 7
2085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_CMD_1             8
2095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_PP_CNTL           9
2105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_RB3D_CNTL         10
2115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_RB3D_COLOROFFSET  11
2125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_CMD_2             12
2135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_RB3D_COLORPITCH   13
2145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define CTX_STATE_SIZE        14
2155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define SET_CMD_0               0
2175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define SET_SE_CNTL             1
2185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define SET_SE_COORDFMT         2
2195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define SET_CMD_1               3
2205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define SET_SE_CNTL_STATUS      4
2215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define SET_STATE_SIZE          5
2225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIN_CMD_0               0
2245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIN_RE_LINE_PATTERN     1
2255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIN_RE_LINE_STATE       2
2265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIN_CMD_1               3
2275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIN_SE_LINE_WIDTH       4
2285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIN_STATE_SIZE          5
2295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MSK_CMD_0               0
2315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MSK_RB3D_STENCILREFMASK 1
2325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MSK_RB3D_ROPCNTL        2
2335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MSK_RB3D_PLANEMASK      3
2345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MSK_STATE_SIZE          4
2355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define VPT_CMD_0           0
2375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define VPT_SE_VPORT_XSCALE          1
2385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define VPT_SE_VPORT_XOFFSET         2
2395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define VPT_SE_VPORT_YSCALE          3
2405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define VPT_SE_VPORT_YOFFSET         4
2415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define VPT_SE_VPORT_ZSCALE          5
2425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define VPT_SE_VPORT_ZOFFSET         6
2435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define VPT_STATE_SIZE      7
2445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MSC_CMD_0               0
2465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MSC_RE_MISC             1
2475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MSC_STATE_SIZE          2
2485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_CMD_0                   0
2505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_PP_TXFILTER             1
2515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_PP_TXFORMAT             2
2525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_PP_TXOFFSET             3
2535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_PP_TXCBLEND             4
2545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_PP_TXABLEND             5
2555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_PP_TFACTOR              6
2565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_CMD_1                   7
2575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_PP_BORDER_COLOR         8
2585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TEX_STATE_SIZE              9
2595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TXR_CMD_0                   0 /* rectangle textures */
2615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TXR_PP_TEX_SIZE             1 /* 0x1d04, 0x1d0c for NPOT! */
2625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TXR_PP_TEX_PITCH            2 /* 0x1d08, 0x1d10 for NPOT! */
2635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TXR_STATE_SIZE              3
2645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define ZBS_CMD_0              0
2665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define ZBS_SE_ZBIAS_FACTOR             1
2675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define ZBS_SE_ZBIAS_CONSTANT           2
2685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define ZBS_STATE_SIZE         3
2695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_CMD_0                        0
2715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_OUTPUT_VTXFMT         1
2725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_OUTPUT_VTXSEL         2
2735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_MATRIX_SELECT_0       3
2745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_MATRIX_SELECT_1       4
2755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_UCP_VERT_BLEND_CTL    5
2765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_TEXTURE_PROC_CTL      6
2775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_LIGHT_MODEL_CTL       7
2785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_PER_LIGHT_CTL_0       8
2795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_PER_LIGHT_CTL_1       9
2805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_PER_LIGHT_CTL_2       10
2815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_PER_LIGHT_CTL_3       11
2825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define TCL_STATE_SIZE                   12
2835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
2845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_CMD_0            0
2855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_EMMISSIVE_RED    1
2865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_EMMISSIVE_GREEN  2
2875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_EMMISSIVE_BLUE   3
2885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_EMMISSIVE_ALPHA  4
2895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_AMBIENT_RED      5
2905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_AMBIENT_GREEN    6
2915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_AMBIENT_BLUE     7
2925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_AMBIENT_ALPHA    8
2935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_DIFFUSE_RED      9
2945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_DIFFUSE_GREEN    10
2955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_DIFFUSE_BLUE     11
2965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_DIFFUSE_ALPHA    12
2975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_SPECULAR_RED     13
2985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_SPECULAR_GREEN   14
2995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_SPECULAR_BLUE    15
3005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_SPECULAR_ALPHA   16
3015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_SHININESS        17
3025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MTL_STATE_SIZE       18
3035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define VTX_CMD_0              0
3055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define VTX_SE_COORD_FMT       1
3065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define VTX_STATE_SIZE         2
3075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MAT_CMD_0              0
3095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MAT_ELT_0              1
3105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define MAT_STATE_SIZE         17
3115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GRD_CMD_0                  0
3135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GRD_VERT_GUARD_CLIP_ADJ    1
3145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GRD_VERT_GUARD_DISCARD_ADJ 2
3155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GRD_HORZ_GUARD_CLIP_ADJ    3
3165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GRD_HORZ_GUARD_DISCARD_ADJ 4
3175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GRD_STATE_SIZE             5
3185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* position changes frequently when lighting in modelpos - separate
3205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * out to new state item?
3215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
3225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_CMD_0                  0
3235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_AMBIENT_RED            1
3245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_AMBIENT_GREEN          2
3255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_AMBIENT_BLUE           3
3265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_AMBIENT_ALPHA          4
3275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_DIFFUSE_RED            5
3285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_DIFFUSE_GREEN          6
3295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_DIFFUSE_BLUE           7
3305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_DIFFUSE_ALPHA          8
3315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_SPECULAR_RED           9
3325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_SPECULAR_GREEN         10
3335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_SPECULAR_BLUE          11
3345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_SPECULAR_ALPHA         12
3355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_POSITION_X             13
3365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_POSITION_Y             14
3375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_POSITION_Z             15
3385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_POSITION_W             16
3395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_DIRECTION_X            17
3405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_DIRECTION_Y            18
3415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_DIRECTION_Z            19
3425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_DIRECTION_W            20
3435d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer#define LIT_ATTEN_QUADRATIC        21
3445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_ATTEN_LINEAR           22
3455d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer#define LIT_ATTEN_CONST            23
3465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_ATTEN_XXX              24
3475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_CMD_1                  25
3485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_SPOT_DCD               26
3495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_SPOT_EXPONENT          27
3505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_SPOT_CUTOFF            28
3515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_SPECULAR_THRESH        29
3525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_RANGE_CUTOFF           30 /* ? */
3535d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer#define LIT_ATTEN_CONST_INV        31
3545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define LIT_STATE_SIZE             32
3555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* Fog
3575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
3585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define FOG_CMD_0      0
3595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define FOG_R          1
3605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define FOG_C          2
3615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define FOG_D          3
3625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define FOG_PAD        4
3635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define FOG_STATE_SIZE 5
3645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* UCP
3665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
3675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define UCP_CMD_0      0
3685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define UCP_X          1
3695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define UCP_Y          2
3705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define UCP_Z          3
3715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define UCP_W          4
3725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define UCP_STATE_SIZE 5
3735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* GLT - Global ambient
3755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
3765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GLT_CMD_0      0
3775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GLT_RED        1
3785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GLT_GREEN      2
3795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GLT_BLUE       3
3805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GLT_ALPHA      4
3815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define GLT_STATE_SIZE 5
3825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* EYE
3845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
3855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define EYE_CMD_0          0
3865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define EYE_X              1
3875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define EYE_Y              2
3885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define EYE_Z              3
3895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define EYE_RESCALE_FACTOR 4
3905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define EYE_STATE_SIZE     5
3915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define SHN_CMD_0          0
3935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define SHN_SHININESS      1
3945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define SHN_STATE_SIZE     2
3955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
3995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_hw_state {
4015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* All state should be on one of these lists:
4025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
4035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom dirty; /* dirty list head placeholder */
4045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom clean; /* clean list head placeholder */
4055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Hardware state, stored as cmdbuf commands:
4075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    *   -- Need to doublebuffer for
4085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    *           - reviving state after loss of context
4095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    *           - eliding noop statechange loops? (except line stipple count)
4105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
4115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom ctx;
4125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom set;
4135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom lin;
4145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom msk;
4155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom vpt;
4165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom tcl;
4175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom msc;
4185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom tex[2];
4195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom zbs;
4205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom mtl;
4215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom mat[5];
4225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom lit[8]; /* includes vec, scl commands */
4235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom ucp[6];
4245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom eye; /* eye pos */
4255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom grd; /* guard band clipping */
4265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom fog;
4275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom glt;
4285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state_atom txr[2]; /* for NPOT */
4295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
4305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_state {
4325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Derived state for internal purposes:
4335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
4345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_colorbuffer_state color;
4355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_depthbuffer_state depth;
4365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_pixel_state pixel;
4375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_scissor_state scissor;
4385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_stencilbuffer_state stencil;
4395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_stipple_state stipple;
4405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_texture_state texture;
4415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
4425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* Need refcounting on dma buffers:
4455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
4465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_dma_buffer {
4475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int refcount;		/* the number of retained regions in buf */
4485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   drmBufPtr buf;
4495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
4505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
451bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl#define GET_START(rvb) (rmesa->radeonScreen->gart_buffer_offset +			\
4525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul			(rvb)->address - rmesa->dma.buf0_address +	\
4535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul			(rvb)->start)
4545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* A retained region, eg vertices for indexed vertices.
4565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
4575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_dma_region {
4585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma_buffer *buf;
4595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   char *address;		/* == buf->address */
4605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int start, end, ptr;		/* offsets from start of buf */
4615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int aos_start;
4625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int aos_stride;
4635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int aos_size;
4645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
4655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_dma {
4685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Active dma region.  Allocations for vertices and retained
4695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    * regions come from here.  Also used for emitting random vertices,
4705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    * these may be flushed by calling flush_current();
4715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
4725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma_region current;
4735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   void (*flush)( radeonContextPtr );
4755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   char *buf0_address;		/* start of buf[0], for index calcs */
4775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint nr_released_bufs;	/* flush after so many buffers released */
4785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
4795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_dri_mirror {
4815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   __DRIcontextPrivate	*context;	/* DRI context */
4825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   __DRIscreenPrivate	*screen;	/* DRI screen */
4835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   __DRIdrawablePrivate	*drawable;	/* DRI drawable bound to this ctx */
4845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   drmContext hwContext;
4865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   drmLock *hwLock;
4875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int fd;
4885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int drmMinor;
4895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
4905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_CMD_BUF_SZ  (8*1024)
4935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
4945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_store {
4955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint statenr;
4965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint primnr;
4975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   char cmd_buf[RADEON_CMD_BUF_SZ];
4985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int cmd_used;
4995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int elts_start;
5005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
5015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* radeon_tcl.c
5045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
5055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_tcl_info {
5065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vertex_format;
5075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLint last_offset;
5085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint hw_primitive;
5095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
51057c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell   /* Temporary for cases where incoming vertex data is incompatible
51157c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell    * with maos code.
51257c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell    */
51357c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell   GLvector4f ObjClean;
51457c9814b9e87924696df4c741861c29d4236d1ebKeith Whitwell
5155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma_region *aos_components[8];
5165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint nr_aos_components;
5175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint *Elts;
5195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma_region indexed_verts;
5215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma_region obj;
5225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma_region rgba;
5235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma_region spec;
5245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma_region fog;
5255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma_region tex[RADEON_MAX_TEXTURE_UNITS];
5265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma_region norm;
5275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
5285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* radeon_swtcl.c
5315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
5325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_swtcl_info {
5335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint SetupIndex;
5345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint SetupNewInputs;
5355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint RenderIndex;
5365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vertex_size;
5375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vertex_stride_shift;
5385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vertex_format;
5395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLubyte *verts;
5405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Fallback rasterization functions
5425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
5435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   radeon_point_func draw_point;
5445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   radeon_line_func draw_line;
5455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   radeon_tri_func draw_tri;
5465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint hw_primitive;
5485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLenum render_primitive;
5495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint numverts;
5505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma_region indexed_verts;
5525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
5535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_ioctl {
5565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vertex_offset;
5575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vertex_size;
5585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
5595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_MAX_PRIMS 64
5635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* Want to keep a cache of these around.  Each is parameterized by
5665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * only a single value which has only a small range.  Only expect a
5675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * few, so just rescan the list each time?
5685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
5695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct dynfn {
5705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *next, *prev;
5715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int key;
5725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   char *code;
5735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
5745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
5755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct dfn_lists {
5765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Vertex2f;
5775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Vertex2fv;
5785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Vertex3f;
5795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Vertex3fv;
5805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Color4ub;
5815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Color4ubv;
5825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Color3ub;
5835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Color3ubv;
5845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Color4f;
5855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Color4fv;
5865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Color3f;
5875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Color3fv;
5885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn SecondaryColor3ubEXT;
5895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn SecondaryColor3ubvEXT;
5905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn SecondaryColor3fEXT;
5915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn SecondaryColor3fvEXT;
5925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Normal3f;
5935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn Normal3fv;
5945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn TexCoord2f;
5955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn TexCoord2fv;
5965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn TexCoord1f;
5975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn TexCoord1fv;
5985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn MultiTexCoord2fARB;
5995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn MultiTexCoord2fvARB;
6005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn MultiTexCoord1fARB;
6015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn MultiTexCoord1fvARB;
6025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
6035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct dfn_generators {
6055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Vertex2f)( GLcontext *, int );
6065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Vertex2fv)( GLcontext *, int );
6075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Vertex3f)( GLcontext *, int );
6085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Vertex3fv)( GLcontext *, int );
6095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Color4ub)( GLcontext *, int );
6105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Color4ubv)( GLcontext *, int );
6115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Color3ub)( GLcontext *, int );
6125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Color3ubv)( GLcontext *, int );
6135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Color4f)( GLcontext *, int );
6145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Color4fv)( GLcontext *, int );
6155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Color3f)( GLcontext *, int );
6165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Color3fv)( GLcontext *, int );
6175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*SecondaryColor3ubEXT)( GLcontext *, int );
6185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*SecondaryColor3ubvEXT)( GLcontext *, int );
6195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*SecondaryColor3fEXT)( GLcontext *, int );
6205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*SecondaryColor3fvEXT)( GLcontext *, int );
6215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Normal3f)( GLcontext *, int );
6225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*Normal3fv)( GLcontext *, int );
6235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*TexCoord2f)( GLcontext *, int );
6245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*TexCoord2fv)( GLcontext *, int );
6255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*TexCoord1f)( GLcontext *, int );
6265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*TexCoord1fv)( GLcontext *, int );
6275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*MultiTexCoord2fARB)( GLcontext *, int );
6285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*MultiTexCoord2fvARB)( GLcontext *, int );
6295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*MultiTexCoord1fARB)( GLcontext *, int );
6305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dynfn *(*MultiTexCoord1fvARB)( GLcontext *, int );
6315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
6325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_prim {
6365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint start;
6375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint end;
6385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint prim;
6395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
6405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_vbinfo {
6425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLint counter, initial_counter;
6435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLint *dmaptr;
6445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   void (*notify)( void );
6455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLint vertex_size;
6465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* A maximum total of 15 elements per vertex:  3 floats for position, 3
6485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    * floats for normal, 4 floats for color, 4 bytes for secondary color,
6495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    * 2 floats for each texture unit (4 floats total).
6505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    *
6515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    * As soon as the 3rd TMU is supported or cube maps (or 3D textures) are
6525df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    * supported, this value will grow.
6535df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    *
6545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    * The position data is never actually stored here, so 3 elements could be
6555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    * trimmed out of the buffer.
6565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
6575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   union { float f; int i; radeon_color_t color; } vertex[15];
6585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLfloat *normalptr;
6605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLfloat *floatcolorptr;
6615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   radeon_color_t *colorptr;
6625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLfloat *floatspecptr;
6635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   radeon_color_t *specptr;
6645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLfloat *texcoordptr[2];
6655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLenum *prim;		/* &ctx->Driver.CurrentExecPrimitive */
6675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint primflags;
6685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLboolean enabled;		/* *_NO_VTXFMT / *_NO_TCL env vars */
6695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLboolean installed;
6705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLboolean fell_back;
6715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLboolean recheck;
6725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLint nrverts;
6735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vertex_format;
6745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint installed_vertex_format;
6765df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint installed_color_3f_sz;
6775df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6785df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_prim primlist[RADEON_MAX_PRIMS];
6795df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   int nrprims;
6805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dfn_lists dfn_cache;
6825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct dfn_generators codegen;
6835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLvertexformat vtxfmt;
6845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
6855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstruct radeon_context {
6905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLcontext *glCtx;			/* Mesa context */
6915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Driver and hardware state management
6935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
6945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_hw_state hw;
6955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_state state;
6965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
6975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Texture object bookkeeping
6985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
6995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   unsigned              nr_heaps;
7005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   driTexHeap          * texture_heaps[ RADEON_NR_TEX_HEAPS ];
7015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   driTextureObject      swapped;
702d907a75498360fb96ec2314bb0abb105be74d500Alan Hourihane   int                   texture_depth;
703d3fd7ba8af15bead2f770d68a893449adeb11397Brian Paul   float                 initialMaxAnisotropy;
7045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Rasterization and vertex state:
7065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint TclFallback;
7085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint Fallback;
7095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint NewGLState;
7105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Vertex buffers
7125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_ioctl ioctl;
7145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dma dma;
7155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_store store;
7165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Page flipping
7185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint doPageFlip;
7205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Busy waiting
7225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint do_usleeps;
7245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint do_irqs;
7255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint irqsEmitted;
7265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   drmRadeonIrqWait iw;
7275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Drawable, cliprect and scissor information
7295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint numClipRects;			/* Cliprects for the draw buffer */
7315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   XF86DRIClipRectPtr pClipRects;
7325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   unsigned int lastStamp;
7335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLboolean lost_context;
7345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   radeonScreenPtr radeonScreen;	/* Screen private DRI data */
7355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   RADEONSAREAPrivPtr sarea;		/* Private SAREA data */
7365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* TCL stuff
7385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLmatrix TexGenMatrix[RADEON_MAX_TEXTURE_UNITS];
7405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLboolean recheck_texgen[RADEON_MAX_TEXTURE_UNITS];
7415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLboolean TexGenNeedNormals[RADEON_MAX_TEXTURE_UNITS];
7425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint TexMatEnabled;
7435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint TexGenEnabled;
7445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLmatrix tmpmat;
7455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint last_ReallyEnabled;
7465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* VBI
7485df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7495df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vbl_seq;
7505df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint vblank_flags;
7515df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
752afa446db83ecf5dcb38ce46648fb12911628de32Ian Romanick   int64_t swap_ust;
753afa446db83ecf5dcb38ce46648fb12911628de32Ian Romanick   int64_t swap_missed_ust;
7545df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7555df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint swap_count;
7565df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint swap_missed_count;
7575df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7585df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   PFNGLXGETUSTPROC get_ust;
7595df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7605df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* radeon_tcl.c
7615df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7625df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_tcl_info tcl;
7635df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7645df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* radeon_swtcl.c
7655df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7665df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_swtcl_info swtcl;
7675df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7685df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* radeon_vtxfmt.c
7695df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7705df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_vbinfo vb;
7715df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7725df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Mirrors of some DRI state
7735df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7745df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   struct radeon_dri_mirror dri;
7755df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
776bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   /* Configuration cache
777bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl    */
778bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   driOptionCache optionCache;
779bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl
7805df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7815df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   /* Performance counters
7825df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul    */
7835df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint boxes;			/* Draw performance boxes */
7845df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint hardwareWentIdle;
7855df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint c_clears;
7865df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint c_drawWaits;
7875df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint c_textureSwaps;
7885df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint c_textureBytes;
7895df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   GLuint c_vertexBuffers;
7905df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul};
7915df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7925df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_CONTEXT(ctx)		((radeonContextPtr)(ctx->DriverCtx))
7935df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7945df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
7955df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulstatic __inline GLuint radeonPackColor( GLuint cpp,
7965df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul					GLubyte r, GLubyte g,
7975df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul					GLubyte b, GLubyte a )
7985df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul{
7995df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   switch ( cpp ) {
8005df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   case 2:
8015df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      return PACK_COLOR_565( r, g, b );
8025df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   case 4:
8035df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      return PACK_COLOR_8888( a, r, g, b );
8045df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   default:
8055df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul      return 0;
8065df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul   }
8075df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul}
8085df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
8095df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_OLD_PACKETS 1
8105df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
8115df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
8125df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulextern void radeonDestroyContext( __DRIcontextPrivate *driContextPriv );
8135df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulextern GLboolean radeonCreateContext(const __GLcontextModes *glVisual,
8145df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul				     __DRIcontextPrivate *driContextPriv,
8155df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul				     void *sharedContextPrivate);
8165df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulextern void radeonSwapBuffers( __DRIdrawablePrivate *dPriv );
8175df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulextern GLboolean radeonMakeCurrent( __DRIcontextPrivate *driContextPriv,
8185df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul				    __DRIdrawablePrivate *driDrawPriv,
8195df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul				    __DRIdrawablePrivate *driReadPriv );
8205df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulextern GLboolean radeonUnbindContext( __DRIcontextPrivate *driContextPriv );
8215df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
8225df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul/* ================================================================
8235df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul * Debugging:
8245df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul */
8255df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DO_DEBUG		1
8265df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
8275df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#if DO_DEBUG
8285df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paulextern int RADEON_DEBUG;
8295df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#else
8305df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define RADEON_DEBUG		0
8315df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#endif
8325df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
8335df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_TEXTURE	0x001
8345df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_STATE	0x002
8355df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_IOCTL	0x004
8365df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_PRIMS	0x008
8375df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_VERTS	0x010
8385df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_FALLBACKS	0x020
8395df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_VFMT	0x040
8405df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_CODEGEN	0x080
8415df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_VERBOSE	0x100
8425df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_DRI       0x200
8435df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_DMA       0x400
8445df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#define DEBUG_SANITY    0x800
8455df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul
8465df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#endif
8475df82c82bd53db90eb72c5aad4dd20cf6f1116b1Brian Paul#endif /* __RADEON_CONTEXT_H__ */
848