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