r200_state_init.c revision 0c0a55a21158e1f97cf140c0a1c0531c06751873
1adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/*
2adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellCopyright (C) The Weather Channel, Inc.  2002.  All Rights Reserved.
3adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
4adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThe Weather Channel (TM) funded Tungsten Graphics to develop the
5adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellinitial release of the Radeon 8500 driver under the XFree86 license.
6adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThis notice must be preserved.
7adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
8adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellPermission is hereby granted, free of charge, to any person obtaining
9adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwella copy of this software and associated documentation files (the
10adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell"Software"), to deal in the Software without restriction, including
11adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellwithout limitation the rights to use, copy, modify, merge, publish,
12adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwelldistribute, sublicense, and/or sell copies of the Software, and to
13adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellpermit persons to whom the Software is furnished to do so, subject to
14adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellthe following conditions:
15adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
16adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellThe above copyright notice and this permission notice (including the
17adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellnext paragraph) shall be included in all copies or substantial
18adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellportions of the Software.
19adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
20adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellIN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
24adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell*/
28adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
29adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/*
30adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * Authors:
31adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell *   Keith Whitwell <keith@tungstengraphics.com>
32adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
33adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
34ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/glheader.h"
35ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/imports.h"
36ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/enums.h"
37ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/colormac.h"
38ecadb51bbcb972a79f3ed79e65a7986b9396e757Brian Paul#include "main/api_arrayelt.h"
39adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
40adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "swrast/swrast.h"
4180c88304fc9d09531b2530b74973821e47b46753Keith Whitwell#include "vbo/vbo.h"
42adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "tnl/tnl.h"
43adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "tnl/t_pipeline.h"
44adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "swrast_setup/swrast_setup.h"
45adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
46adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_context.h"
47adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_ioctl.h"
48adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_state.h"
49adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_tcl.h"
50adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_tex.h"
51adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#include "r200_swtcl.h"
52adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
53273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane#include "xmlpool.h"
54273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane
55adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* =============================================================
56adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell * State initialization
57adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
58adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
59adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellvoid r200PrintDirty( r200ContextPtr rmesa, const char *msg )
60adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
61b6e486906968d82c7b8a869d7ab51697a7cce80cDave Airlie   struct radeon_state_atom *l;
62adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
63adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   fprintf(stderr, msg);
64adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   fprintf(stderr, ": ");
65adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
660c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   foreach(l, &rmesa->hw.atomlist) {
670c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt      if (l->dirty || rmesa->hw.all_dirty)
680c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt	 fprintf(stderr, "%s, ", l->name);
69adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
70adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
71adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   fprintf(stderr, "\n");
72adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
73adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
74adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdpkt( int id )
75adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
76ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
77adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
78adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.packet.cmd_type = RADEON_CMD_PACKET;
79adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.packet.packet_id = id;
80adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
81adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
82adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
83adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdvec( int offset, int stride, int count )
84adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
85ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
86adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
87adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.cmd_type = RADEON_CMD_VECTORS;
88adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.offset = offset;
89adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.stride = stride;
90adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.vectors.count = count;
91adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
92adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
93adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
9498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger/* warning: the count here is divided by 4 compared to other cmds
9598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   (so it doesn't exceed the char size)! */
9698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheideggerstatic int cmdveclinear( int offset, int count )
9798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger{
9898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   drm_radeon_cmd_header_t h;
9998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.i = 0;
10098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.cmd_type = RADEON_CMD_VECLINEAR;
10198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.addr_lo = offset & 0xff;
10298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.addr_hi = (offset & 0xff00) >> 8;
10398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   h.veclinear.count = count;
10498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   return h.i;
10598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
10698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
107adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdscl( int offset, int stride, int count )
108adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
109ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
110adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
111adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.cmd_type = RADEON_CMD_SCALARS;
112adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.offset = offset;
113adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.stride = stride;
114adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.count = count;
115adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
116adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
117adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
118adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellstatic int cmdscl2( int offset, int stride, int count )
119adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
120ae4a1cc0666860bf5cc37a5cb549afc9aa5448b0Jon Smirl   drm_radeon_cmd_header_t h;
121adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.i = 0;
122adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.cmd_type = RADEON_CMD_SCALARS2;
123adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.offset = offset - 0x100;
124adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.stride = stride;
125adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   h.scalars.count = count;
126adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   return h.i;
127adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
128adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
129adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define CHECK( NM, FLAG )				\
1304637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom) \
131adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{							\
13236603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   r200ContextPtr rmesa = R200_CONTEXT(ctx);		\
13336603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   (void) rmesa;					\
1340c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie   return (FLAG) ? atom->cmd_size : 0;			\
135adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
136adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
137adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define TCL_CHECK( NM, FLAG )				\
1384637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom) \
1394637235183b80963536f2364e4d50fcb894886ddDave Airlie{									\
1404637235183b80963536f2364e4d50fcb894886ddDave Airlie   r200ContextPtr rmesa = R200_CONTEXT(ctx);				\
1410c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie   return (!rmesa->radeon.TclFallback && !ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size : 0; \
14298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
14398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
14498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define TCL_OR_VP_CHECK( NM, FLAG )			\
1454637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom ) \
14698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger{							\
14798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   r200ContextPtr rmesa = R200_CONTEXT(ctx);		\
1480c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie   return (!rmesa->radeon.TclFallback && (FLAG)) ? atom->cmd_size : 0;	\
149adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
150adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
15198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger#define VP_CHECK( NM, FLAG )				\
1524637235183b80963536f2364e4d50fcb894886ddDave Airliestatic int check_##NM( GLcontext *ctx, struct radeon_state_atom *atom ) \
1534637235183b80963536f2364e4d50fcb894886ddDave Airlie{									\
1544637235183b80963536f2364e4d50fcb894886ddDave Airlie   r200ContextPtr rmesa = R200_CONTEXT(ctx);				\
1554637235183b80963536f2364e4d50fcb894886ddDave Airlie   (void) atom;								\
1560c0a55a21158e1f97cf140c0a1c0531c06751873Dave Airlie   return (!rmesa->radeon.TclFallback && ctx->VertexProgram._Enabled && (FLAG)) ? atom->cmd_size : 0; \
15798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger}
158adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
159adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellCHECK( always, GL_TRUE )
160bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon SmirlCHECK( never, GL_FALSE )
161adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellCHECK( tex_any, ctx->Texture._EnabledUnits )
162f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( tf, (ctx->Texture._EnabledUnits && !ctx->ATIFragmentShader._Enabled) );
1634637235183b80963536f2364e4d50fcb894886ddDave AirlieCHECK( tex_pair, (rmesa->state.texture.unit[atom->idx].unitneeded | rmesa->state.texture.unit[atom->idx & ~1].unitneeded) )
1644637235183b80963536f2364e4d50fcb894886ddDave AirlieCHECK( tex, rmesa->state.texture.unit[atom->idx].unitneeded )
165f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( pix_zero, !ctx->ATIFragmentShader._Enabled )
1664637235183b80963536f2364e4d50fcb894886ddDave Airlie   CHECK( texenv, (rmesa->state.envneeded & (1 << (atom->idx)) && !ctx->ATIFragmentShader._Enabled) )
167f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( afs_pass1, (ctx->ATIFragmentShader._Enabled && (ctx->ATIFragmentShader.Current->NumPasses > 1)) )
168f20917de5bd2b1fc152e74304d3649a1f6042422Roland ScheideggerCHECK( afs, ctx->ATIFragmentShader._Enabled )
1694637235183b80963536f2364e4d50fcb894886ddDave AirlieCHECK( tex_cube, rmesa->state.texture.unit[atom->idx].unitneeded & TEXTURE_CUBE_BIT )
170014bfda235e5315baf84b1d47329be167dd2ec7fRoland ScheideggerTCL_CHECK( tcl_fog, ctx->Fog.Enabled )
171adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellTCL_CHECK( tcl, GL_TRUE )
1724637235183b80963536f2364e4d50fcb894886ddDave AirlieTCL_CHECK( tcl_tex, rmesa->state.texture.unit[atom->idx].unitneeded )
173adbec39bbf671ad80f6c557801e274cac0d305faKeith WhitwellTCL_CHECK( tcl_lighting, ctx->Light.Enabled )
1744637235183b80963536f2364e4d50fcb894886ddDave AirlieTCL_CHECK( tcl_light, ctx->Light.Enabled && ctx->Light.Light[atom->idx].Enabled )
1754637235183b80963536f2364e4d50fcb894886ddDave AirlieTCL_OR_VP_CHECK( tcl_ucp, (ctx->Transform.ClipPlanesEnabled & (1 << (atom->idx))) )
17698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerTCL_OR_VP_CHECK( tcl_or_vp, GL_TRUE )
17798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerVP_CHECK( tcl_vp, GL_TRUE )
17898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerVP_CHECK( tcl_vp_size, ctx->VertexProgram.Current->Base.NumNativeInstructions > 64 )
17998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland ScheideggerVP_CHECK( tcl_vpp_size, ctx->VertexProgram.Current->Base.NumNativeParameters > 96 )
180adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
181adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
182adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* Initialize the context's hardware state.
183adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell */
184adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwellvoid r200InitState( r200ContextPtr rmesa )
185adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell{
1864637235183b80963536f2364e4d50fcb894886ddDave Airlie   GLcontext *ctx = rmesa->radeon.glCtx;
187adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   GLuint color_fmt, depth_fmt, i;
188fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   GLint drawPitch, drawOffset;
189adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
1904637235183b80963536f2364e4d50fcb894886ddDave Airlie   switch ( rmesa->radeon.radeonScreen->cpp ) {
191adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 2:
192adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      color_fmt = R200_COLOR_FORMAT_RGB565;
193adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      break;
194adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 4:
195adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      color_fmt = R200_COLOR_FORMAT_ARGB8888;
196adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      break;
197adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   default:
198adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      fprintf( stderr, "Error: Unsupported pixel depth... exiting\n" );
199adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      exit( -1 );
200adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
201adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
202d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->radeon.state.color.clear = 0x00000000;
203adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
204adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   switch ( ctx->Visual.depthBits ) {
205adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 16:
206d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.depth.clear = 0x0000ffff;
207d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.depth.scale = 1.0 / (GLfloat)0xffff;
208adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      depth_fmt = R200_DEPTH_FORMAT_16BIT_INT_Z;
209d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.stencil.clear = 0x00000000;
210adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      break;
211adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   case 24:
212d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.depth.clear = 0x00ffffff;
213d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.depth.scale = 1.0 / (GLfloat)0xffffff;
214adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      depth_fmt = R200_DEPTH_FORMAT_24BIT_INT_Z;
215d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.stencil.clear = 0xffff0000;
216adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      break;
217adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   default:
218adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      fprintf( stderr, "Error: Unsupported depth %d... exiting\n",
219adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	       ctx->Visual.depthBits );
220adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      exit( -1 );
221adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
222adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
223adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Only have hw stencil when depth buffer is 24 bits deep */
224d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->radeon.state.stencil.hwBuffer = ( ctx->Visual.stencilBits > 0 &&
225adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     ctx->Visual.depthBits == 24 );
226adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
2274637235183b80963536f2364e4d50fcb894886ddDave Airlie   rmesa->radeon.Fallback = 0;
228adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
2294637235183b80963536f2364e4d50fcb894886ddDave Airlie   if ( ctx->Visual.doubleBufferMode && rmesa->radeon.sarea->pfCurrentPage == 0 ) {
2304637235183b80963536f2364e4d50fcb894886ddDave Airlie      drawOffset = rmesa->radeon.radeonScreen->backOffset;
2314637235183b80963536f2364e4d50fcb894886ddDave Airlie      drawPitch  = rmesa->radeon.radeonScreen->backPitch;
232fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   } else {
2334637235183b80963536f2364e4d50fcb894886ddDave Airlie      drawOffset = rmesa->radeon.radeonScreen->frontOffset;
2344637235183b80963536f2364e4d50fcb894886ddDave Airlie      drawPitch  = rmesa->radeon.radeonScreen->frontPitch;
235fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   }
236fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#if 000
237fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   if ( ctx->Visual.doubleBufferMode && rmesa->sarea->pfCurrentPage == 0 ) {
238d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.drawOffset = rmesa->radeon.radeonScreen->backOffset;
239d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.drawPitch  = rmesa->radeon.radeonScreen->backPitch;
240adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   } else {
241d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.drawOffset = rmesa->radeon.radeonScreen->frontOffset;
242d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.drawPitch  = rmesa->radeon.radeonScreen->frontPitch;
243adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
244adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
245d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->state.pixel.readOffset = rmesa->radeon.state.color.drawOffset;
246d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->state.pixel.readPitch  = rmesa->radeon.state.color.drawPitch;
247fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#endif
248adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
2496f3cc6a5226fd4b5d44cca91e2f76216ecaff831Eric Anholt   rmesa->hw.max_state_size = 0;
250adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
251adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#define ALLOC_STATE( ATOM, CHK, SZ, NM, IDX )				\
252adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   do {								\
253adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.cmd_size = SZ;				\
2544637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->hw.ATOM.cmd = (GLuint *)CALLOC(SZ * sizeof(int));	\
2554637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->hw.ATOM.lastcmd = (GLuint *)CALLOC(SZ * sizeof(int));	\
256adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.name = NM;					\
257adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ATOM.idx = IDX;					\
2580c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt      rmesa->hw.ATOM.check = check_##CHK;			\
2590c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt      rmesa->hw.ATOM.dirty = GL_FALSE;				\
2606f3cc6a5226fd4b5d44cca91e2f76216ecaff831Eric Anholt      rmesa->hw.max_state_size += SZ * sizeof(int);		\
261adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   } while (0)
262f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
263f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger
264adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Allocate state buffers:
265adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
2664637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsBlendColor)
267033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      ALLOC_STATE( ctx, always, CTX_STATE_SIZE_NEWDRM, "CTX/context", 0 );
268033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger   else
269033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      ALLOC_STATE( ctx, always, CTX_STATE_SIZE_OLDDRM, "CTX/context", 0 );
270adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( set, always, SET_STATE_SIZE, "SET/setup", 0 );
271adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lin, always, LIN_STATE_SIZE, "LIN/line", 0 );
272adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msk, always, MSK_STATE_SIZE, "MSK/mask", 0 );
273adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vpt, always, VPT_STATE_SIZE, "VPT/viewport", 0 );
274adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vtx, always, VTX_STATE_SIZE, "VTX/vertex", 0 );
275adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vap, always, VAP_STATE_SIZE, "VAP/vap", 0 );
276adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( vte, always, VTE_STATE_SIZE, "VTE/vte", 0 );
277adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msc, always, MSC_STATE_SIZE, "MSC/misc", 0 );
278adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( cst, always, CST_STATE_SIZE, "CST/constant", 0 );
279adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( zbs, always, ZBS_STATE_SIZE, "ZBS/zbias", 0 );
280f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   ALLOC_STATE( tf, tf, TF_STATE_SIZE, "TF/tfactor", 0 );
2814637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsFragShader) {
2824637235183b80963536f2364e4d50fcb894886ddDave Airlie      if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200) {
283f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      /* make sure texture units 0/1 are emitted pair-wise for r200 t0 hang workaround */
284f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[0], tex_pair, TEX_STATE_SIZE_NEWDRM, "TEX/tex-0", 0 );
285f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[1], tex_pair, TEX_STATE_SIZE_NEWDRM, "TEX/tex-1", 1 );
286f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tam, tex_any, TAM_STATE_SIZE, "TAM/tam", 0 );
287f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
288f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      else {
289f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[0], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-0", 0 );
290f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[1], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-1", 1 );
291f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tam, never, TAM_STATE_SIZE, "TAM/tam", 0 );
292f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
293f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[2], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-2", 2 );
294f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[3], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-3", 3 );
295f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[4], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-4", 4 );
296f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[5], tex, TEX_STATE_SIZE_NEWDRM, "TEX/tex-5", 5 );
297f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( atf, afs, ATF_STATE_SIZE, "ATF/tfactor", 0 );
298f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( afs[0], afs_pass1, AFS_STATE_SIZE, "AFS/afsinst-0", 0 );
299f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( afs[1], afs, AFS_STATE_SIZE, "AFS/afsinst-1", 1 );
30048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   }
30148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   else {
3024637235183b80963536f2364e4d50fcb894886ddDave Airlie      if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200) {
303f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[0], tex_pair, TEX_STATE_SIZE_OLDDRM, "TEX/tex-0", 0 );
304f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[1], tex_pair, TEX_STATE_SIZE_OLDDRM, "TEX/tex-1", 1 );
305f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tam, tex_any, TAM_STATE_SIZE, "TAM/tam", 0 );
306f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
307f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      else {
308f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[0], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-0", 0 );
309f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tex[1], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-1", 1 );
310f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 ALLOC_STATE( tam, never, TAM_STATE_SIZE, "TAM/tam", 0 );
311f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
312f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[2], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-2", 2 );
313f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[3], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-3", 3 );
314f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[4], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-4", 4 );
315f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( tex[5], tex, TEX_STATE_SIZE_OLDDRM, "TEX/tex-5", 5 );
316f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( atf, never, ATF_STATE_SIZE, "TF/tfactor", 0 );
317f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( afs[0], never, AFS_STATE_SIZE, "AFS/afsinst-0", 0 );
318f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      ALLOC_STATE( afs[1], never, AFS_STATE_SIZE, "AFS/afsinst-1", 1 );
31948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   }
3204637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsCubeMapsR200) {
32148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[0], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-0", 0 );
32248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[1], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-1", 1 );
32348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[2], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-2", 2 );
32448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[3], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-3", 3 );
32548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[4], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-4", 4 );
32648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[5], tex_cube, CUBE_STATE_SIZE, "CUBE/tex-5", 5 );
327bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   }
328bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   else {
329bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl      ALLOC_STATE( cube[0], never, CUBE_STATE_SIZE, "CUBE/tex-0", 0 );
330bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl      ALLOC_STATE( cube[1], never, CUBE_STATE_SIZE, "CUBE/tex-1", 1 );
33148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[2], never, CUBE_STATE_SIZE, "CUBE/tex-2", 2 );
33248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[3], never, CUBE_STATE_SIZE, "CUBE/tex-3", 3 );
33348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[4], never, CUBE_STATE_SIZE, "CUBE/tex-4", 4 );
33448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      ALLOC_STATE( cube[5], never, CUBE_STATE_SIZE, "CUBE/tex-5", 5 );
335bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl   }
3364637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsVertexProgram) {
33798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( pvs, tcl_vp, PVS_STATE_SIZE, "PVS/pvscntl", 0 );
33898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpi[0], tcl_vp, VPI_STATE_SIZE, "VP/vertexprog-0", 0 );
33998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpi[1], tcl_vp_size, VPI_STATE_SIZE, "VP/vertexprog-1", 1 );
34098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpp[0], tcl_vp, VPP_STATE_SIZE, "VPP/vertexparam-0", 0 );
34198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpp[1], tcl_vpp_size, VPP_STATE_SIZE, "VPP/vertexparam-1", 1 );
34298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   }
34398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   else {
34498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( pvs, never, PVS_STATE_SIZE, "PVS/pvscntl", 0 );
34598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpi[0], never, VPI_STATE_SIZE, "VP/vertexprog-0", 0 );
34698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpi[1], never, VPI_STATE_SIZE, "VP/vertexprog-1", 1 );
34798c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpp[0], never, VPP_STATE_SIZE, "VPP/vertexparam-0", 0 );
34898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      ALLOC_STATE( vpp[1], never, VPP_STATE_SIZE, "VPP/vertexparam-1", 1 );
34998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   }
35098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   /* FIXME: this atom has two commands, we need only one (ucp_vert_blend) for vp */
35198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   ALLOC_STATE( tcl, tcl_or_vp, TCL_STATE_SIZE, "TCL/tcl", 0 );
352adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( msl, tcl, MSL_STATE_SIZE, "MSL/matrix-select", 0 );
353adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( tcg, tcl, TCG_STATE_SIZE, "TCG/texcoordgen", 0 );
354adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mtl[0], tcl_lighting, MTL_STATE_SIZE, "MTL0/material0", 0 );
355a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger   ALLOC_STATE( mtl[1], tcl_lighting, MTL_STATE_SIZE, "MTL1/material1", 1 );
35698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   ALLOC_STATE( grd, tcl_or_vp, GRD_STATE_SIZE, "GRD/guard-band", 0 );
357014bfda235e5315baf84b1d47329be167dd2ec7fRoland Scheidegger   ALLOC_STATE( fog, tcl_fog, FOG_STATE_SIZE, "FOG/fog", 0 );
358adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( glt, tcl_lighting, GLT_STATE_SIZE, "GLT/light-global", 0 );
359adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( eye, tcl_lighting, EYE_STATE_SIZE, "EYE/eye-vector", 0 );
360adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mat[R200_MTX_MV], tcl, MAT_STATE_SIZE, "MAT/modelview", 0 );
361adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mat[R200_MTX_IMV], tcl, MAT_STATE_SIZE, "MAT/it-modelview", 0 );
362adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mat[R200_MTX_MVP], tcl, MAT_STATE_SIZE, "MAT/modelproject", 0 );
363adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mat[R200_MTX_TEX0], tcl_tex, MAT_STATE_SIZE, "MAT/texmat0", 0 );
364adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( mat[R200_MTX_TEX1], tcl_tex, MAT_STATE_SIZE, "MAT/texmat1", 1 );
36548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   ALLOC_STATE( mat[R200_MTX_TEX2], tcl_tex, MAT_STATE_SIZE, "MAT/texmat2", 2 );
36648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   ALLOC_STATE( mat[R200_MTX_TEX3], tcl_tex, MAT_STATE_SIZE, "MAT/texmat3", 3 );
36748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   ALLOC_STATE( mat[R200_MTX_TEX4], tcl_tex, MAT_STATE_SIZE, "MAT/texmat4", 4 );
36848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   ALLOC_STATE( mat[R200_MTX_TEX5], tcl_tex, MAT_STATE_SIZE, "MAT/texmat5", 5 );
369adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[0], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-0", 0 );
370adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[1], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-1", 1 );
371adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[2], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-2", 2 );
372adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[3], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-3", 3 );
373adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[4], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-4", 4 );
374adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( ucp[5], tcl_ucp, UCP_STATE_SIZE, "UCP/userclip-5", 5 );
375adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[0], tcl_light, LIT_STATE_SIZE, "LIT/light-0", 0 );
376adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[1], tcl_light, LIT_STATE_SIZE, "LIT/light-1", 1 );
377adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[2], tcl_light, LIT_STATE_SIZE, "LIT/light-2", 2 );
378adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[3], tcl_light, LIT_STATE_SIZE, "LIT/light-3", 3 );
379adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[4], tcl_light, LIT_STATE_SIZE, "LIT/light-4", 4 );
380adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[5], tcl_light, LIT_STATE_SIZE, "LIT/light-5", 5 );
381adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[6], tcl_light, LIT_STATE_SIZE, "LIT/light-6", 6 );
382adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ALLOC_STATE( lit[7], tcl_light, LIT_STATE_SIZE, "LIT/light-7", 7 );
383f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   ALLOC_STATE( pix[0], pix_zero, PIX_STATE_SIZE, "PIX/pixstage-0", 0 );
38436603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[1], texenv, PIX_STATE_SIZE, "PIX/pixstage-1", 1 );
38536603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[2], texenv, PIX_STATE_SIZE, "PIX/pixstage-2", 2 );
38636603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[3], texenv, PIX_STATE_SIZE, "PIX/pixstage-3", 3 );
38736603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[4], texenv, PIX_STATE_SIZE, "PIX/pixstage-4", 4 );
38836603539ccdb1c507724d8a1c314e6c9cc9863d9Roland Scheidegger   ALLOC_STATE( pix[5], texenv, PIX_STATE_SIZE, "PIX/pixstage-5", 5 );
3894637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsTriPerf) {
390fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger      ALLOC_STATE( prf, always, PRF_STATE_SIZE, "PRF/performance-tri", 0 );
391fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   }
392fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   else {
393fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger      ALLOC_STATE( prf, never, PRF_STATE_SIZE, "PRF/performance-tri", 0 );
394fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   }
3954637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsPointSprites) {
39644dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger      ALLOC_STATE( spr, always, SPR_STATE_SIZE, "SPR/pointsprite", 0 );
397cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      ALLOC_STATE( ptp, tcl, PTP_STATE_SIZE, "PTP/pointparams", 0 );
398cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   }
399cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   else {
40044dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger      ALLOC_STATE (spr, never, SPR_STATE_SIZE, "SPR/pointsprite", 0 );
401cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      ALLOC_STATE (ptp, never, PTP_STATE_SIZE, "PTP/pointparams", 0 );
402cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   }
403adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
4040c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   r200SetUpAtomList( rmesa );
405adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
406adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Fill in the packet headers:
407adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
408adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_CMD_0] = cmdpkt(RADEON_EMIT_PP_MISC);
409adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_CMD_1] = cmdpkt(RADEON_EMIT_PP_CNTL);
410adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_CMD_2] = cmdpkt(RADEON_EMIT_RB3D_COLORPITCH);
4114637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsBlendColor)
412033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_CMD_3] = cmdpkt(R200_EMIT_RB3D_BLENDCOLOR);
413adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_CMD_0] = cmdpkt(RADEON_EMIT_RE_LINE_PATTERN);
414adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_CMD_1] = cmdpkt(RADEON_EMIT_SE_LINE_WIDTH);
415adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_CMD_0] = cmdpkt(RADEON_EMIT_RB3D_STENCILREFMASK);
416adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_CMD_0] = cmdpkt(RADEON_EMIT_SE_VPORT_XSCALE);
417adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.set.cmd[SET_CMD_0] = cmdpkt(RADEON_EMIT_SE_CNTL);
418adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msc.cmd[MSC_CMD_0] = cmdpkt(RADEON_EMIT_RE_MISC);
419adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_CMD_0] = cmdpkt(R200_EMIT_PP_CNTL_X);
420adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_CMD_1] = cmdpkt(R200_EMIT_RB3D_DEPTHXY_OFFSET);
421adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_CMD_2] = cmdpkt(R200_EMIT_RE_AUX_SCISSOR_CNTL);
422adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_CMD_3] = cmdpkt(R200_EMIT_RE_SCISSOR_TL_0);
423adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_CMD_4] = cmdpkt(R200_EMIT_SE_VAP_CNTL_STATUS);
424adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_CMD_5] = cmdpkt(R200_EMIT_RE_POINTSIZE);
425adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_CMD_6] = cmdpkt(R200_EMIT_TCL_INPUT_VTX_VECTOR_ADDR_0);
426adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tam.cmd[TAM_CMD_0] = cmdpkt(R200_EMIT_PP_TAM_DEBUG3);
427f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   rmesa->hw.tf.cmd[TF_CMD_0] = cmdpkt(R200_EMIT_TFACTOR_0);
4284637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsFragShader) {
429f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.atf.cmd[ATF_CMD_0] = cmdpkt(R200_EMIT_ATF_TFACTOR);
430f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[0].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCTLALL_0);
431f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[0].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_0);
432f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[1].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCTLALL_1);
433f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[1].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_1);
434f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[2].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCTLALL_2);
435f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[2].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_2);
436f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[3].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCTLALL_3);
437f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[3].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_3);
438f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[4].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCTLALL_4);
439f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[4].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_4);
440f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[5].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCTLALL_5);
441f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[5].cmd[TEX_CMD_1_NEWDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_5);
442f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   } else {
443f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[0].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXFILTER_0);
444f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[0].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_0);
445f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[1].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXFILTER_1);
446f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[1].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_1);
447f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[2].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXFILTER_2);
448f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[2].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_2);
449f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[3].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXFILTER_3);
450f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[3].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_3);
451f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[4].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXFILTER_4);
452f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[4].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_4);
453f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[5].cmd[TEX_CMD_0] = cmdpkt(R200_EMIT_PP_TXFILTER_5);
454f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      rmesa->hw.tex[5].cmd[TEX_CMD_1_OLDDRM] = cmdpkt(R200_EMIT_PP_TXOFFSET_5);
455f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   }
456f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   rmesa->hw.afs[0].cmd[AFS_CMD_0] = cmdpkt(R200_EMIT_PP_AFS_0);
457f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger   rmesa->hw.afs[1].cmd[AFS_CMD_0] = cmdpkt(R200_EMIT_PP_AFS_1);
45898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.pvs.cmd[PVS_CMD_0] = cmdpkt(R200_EMIT_VAP_PVS_CNTL);
459adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cube[0].cmd[CUBE_CMD_0] = cmdpkt(R200_EMIT_PP_CUBIC_FACES_0);
460adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cube[0].cmd[CUBE_CMD_1] = cmdpkt(R200_EMIT_PP_CUBIC_OFFSETS_0);
461adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cube[1].cmd[CUBE_CMD_0] = cmdpkt(R200_EMIT_PP_CUBIC_FACES_1);
462adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cube[1].cmd[CUBE_CMD_1] = cmdpkt(R200_EMIT_PP_CUBIC_OFFSETS_1);
46348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.cube[2].cmd[CUBE_CMD_0] = cmdpkt(R200_EMIT_PP_CUBIC_FACES_2);
46448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.cube[2].cmd[CUBE_CMD_1] = cmdpkt(R200_EMIT_PP_CUBIC_OFFSETS_2);
46548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.cube[3].cmd[CUBE_CMD_0] = cmdpkt(R200_EMIT_PP_CUBIC_FACES_3);
46648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.cube[3].cmd[CUBE_CMD_1] = cmdpkt(R200_EMIT_PP_CUBIC_OFFSETS_3);
46748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.cube[4].cmd[CUBE_CMD_0] = cmdpkt(R200_EMIT_PP_CUBIC_FACES_4);
46848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.cube[4].cmd[CUBE_CMD_1] = cmdpkt(R200_EMIT_PP_CUBIC_OFFSETS_4);
46948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.cube[5].cmd[CUBE_CMD_0] = cmdpkt(R200_EMIT_PP_CUBIC_FACES_5);
47048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.cube[5].cmd[CUBE_CMD_1] = cmdpkt(R200_EMIT_PP_CUBIC_OFFSETS_5);
471adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.pix[0].cmd[PIX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCBLEND_0);
472adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.pix[1].cmd[PIX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCBLEND_1);
47348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.pix[2].cmd[PIX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCBLEND_2);
47448ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.pix[3].cmd[PIX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCBLEND_3);
47548ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.pix[4].cmd[PIX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCBLEND_4);
47648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.pix[5].cmd[PIX_CMD_0] = cmdpkt(R200_EMIT_PP_TXCBLEND_5);
477adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.zbs.cmd[ZBS_CMD_0] = cmdpkt(RADEON_EMIT_SE_ZBIAS_FACTOR);
478adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_CMD_0] = cmdpkt(R200_EMIT_TCL_LIGHT_MODEL_CTL_0);
479adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_CMD_1] = cmdpkt(R200_EMIT_TCL_UCP_VERT_BLEND_CTL);
480adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_CMD_0] = cmdpkt(R200_EMIT_TEX_PROC_CTL_2);
481adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_CMD_0] = cmdpkt(R200_EMIT_MATRIX_SELECT_0);
482adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vap.cmd[VAP_CMD_0] = cmdpkt(R200_EMIT_VAP_CTL);
483adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_CMD_0] = cmdpkt(R200_EMIT_VTX_FMT_0);
484adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_CMD_1] = cmdpkt(R200_EMIT_OUTPUT_VTX_COMP_SEL);
485adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_CMD_2] = cmdpkt(R200_EMIT_SE_VTX_STATE_CNTL);
486adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vte.cmd[VTE_CMD_0] = cmdpkt(R200_EMIT_VTE_CNTL);
487fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   rmesa->hw.prf.cmd[PRF_CMD_0] = cmdpkt(R200_EMIT_PP_TRI_PERF_CNTL);
48844dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger   rmesa->hw.spr.cmd[SPR_CMD_0] = cmdpkt(R200_EMIT_TCL_POINT_SPRITE_CNTL);
489adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mtl[0].cmd[MTL_CMD_0] =
490adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MAT_0_EMISS, 1, 16 );
491adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mtl[0].cmd[MTL_CMD_1] =
492adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdscl2( R200_SS_MAT_0_SHININESS, 1, 1 );
493a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger   rmesa->hw.mtl[1].cmd[MTL_CMD_0] =
494a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      cmdvec( R200_VS_MAT_1_EMISS, 1, 16 );
495a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger   rmesa->hw.mtl[1].cmd[MTL_CMD_1] =
496a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      cmdscl2( R200_SS_MAT_1_SHININESS, 1, 1 );
497a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger
49898c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpi[0].cmd[VPI_CMD_0] =
49998c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PROG0, 64 );
50098c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpi[1].cmd[VPI_CMD_0] =
50198c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PROG1, 64 );
50298c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpp[0].cmd[VPP_CMD_0] =
50398c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PARAM0, 96 );
50498c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger   rmesa->hw.vpp[1].cmd[VPP_CMD_0] =
50598c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger      cmdveclinear( R200_PVS_PARAM1, 96 );
50698c791b543c4ba86b8bb54488bd872b33b10b1aaRoland Scheidegger
507adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_CMD_0] =
508adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdscl( R200_SS_VERT_GUARD_CLIP_ADJ_ADDR, 1, 4 );
509adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.fog.cmd[FOG_CMD_0] =
510adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_FOG_PARAM_ADDR, 1, 4 );
511adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.glt.cmd[GLT_CMD_0] =
512adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_GLOBAL_AMBIENT_ADDR, 1, 4 );
513adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_CMD_0] =
514adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_EYE_VECTOR_ADDR, 1, 4 );
515adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
516adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_MV].cmd[MAT_CMD_0] =
517adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_0_MV, 1, 16);
518adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_IMV].cmd[MAT_CMD_0] =
519adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_1_INV_MV, 1, 16);
520adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_MVP].cmd[MAT_CMD_0] =
521adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_2_MVP, 1, 16);
522adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_TEX0].cmd[MAT_CMD_0] =
523adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_3_TEX0, 1, 16);
524adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.mat[R200_MTX_TEX1].cmd[MAT_CMD_0] =
525adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      cmdvec( R200_VS_MATRIX_4_TEX1, 1, 16);
52648ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX2].cmd[MAT_CMD_0] =
52748ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_5_TEX2, 1, 16);
52848ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX3].cmd[MAT_CMD_0] =
52948ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_6_TEX3, 1, 16);
53048ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX4].cmd[MAT_CMD_0] =
53148ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_7_TEX4, 1, 16);
53248ccaf200940613032dfaaafe71382947f398004Roland Scheidegger   rmesa->hw.mat[R200_MTX_TEX5].cmd[MAT_CMD_0] =
53348ccaf200940613032dfaaafe71382947f398004Roland Scheidegger      cmdvec( R200_VS_MATRIX_8_TEX5, 1, 16);
534adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
535adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 8; i++) {
536adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.lit[i].cmd[LIT_CMD_0] =
537adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdvec( R200_VS_LIGHT_AMBIENT_ADDR + i, 8, 24 );
538adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.lit[i].cmd[LIT_CMD_1] =
539adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdscl( R200_SS_LIGHT_DCD_ADDR + i, 8, 7 );
540adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
541adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
542adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 6; i++) {
543adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.ucp[i].cmd[UCP_CMD_0] =
544adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	 cmdvec( R200_VS_UCP_ADDR + i, 1, 4 );
545adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
546adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
547cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CMD_0] =
548cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      cmdvec( R200_VS_PNT_SPRITE_VPORT_SCALE, 1, 4 );
549cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CMD_1] =
550cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      cmdvec( R200_VS_PNT_SPRITE_ATT_CONST, 1, 12 );
551cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger
552adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Initial Harware state:
553adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell    */
554adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_MISC] = (R200_ALPHA_TEST_PASS
555adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     /* | R200_RIGHT_HAND_CUBE_OGL*/);
556adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
557adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_FOG_COLOR] = (R200_FOG_VERTEX |
558adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					  R200_FOG_USE_SPEC_ALPHA);
559adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
560adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RE_SOLID_COLOR] = 0x00000000;
561adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
562adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_BLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
563033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
564033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
565033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger
5664637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.radeonScreen->drmSupportsBlendColor) {
567033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_BLENDCOLOR] = 0x00000000;
568033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_ABLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
569033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
570033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
571033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_CBLENDCNTL] = (R200_COMB_FCN_ADD_CLAMP |
572033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ONE << R200_SRC_BLEND_SHIFT) |
573033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger				(R200_BLEND_GL_ZERO << R200_DST_BLEND_SHIFT));
574033728555cb2f39d8c77f228e1eccc45329bb40aRoland Scheidegger   }
575adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
576adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHOFFSET] =
5774637235183b80963536f2364e4d50fcb894886ddDave Airlie      rmesa->radeon.radeonScreen->depthOffset + rmesa->radeon.radeonScreen->fbLocation;
578adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
579adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] =
5804637235183b80963536f2364e4d50fcb894886ddDave Airlie      ((rmesa->radeon.radeonScreen->depthPitch &
581adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell	R200_DEPTHPITCH_MASK) |
582adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_DEPTH_ENDIAN_NO_SWAP);
583b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger
584b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   if (rmesa->using_hyperz)
585b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_DEPTHPITCH] |= R200_DEPTH_HYPERZ;
586adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
587adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] = (depth_fmt |
588b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger					       R200_Z_TEST_LESS |
589adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_TEST_ALWAYS |
590adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_FAIL_KEEP |
591adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_ZPASS_KEEP |
592adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_STENCIL_ZFAIL_KEEP |
593adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					       R200_Z_WRITE_ENABLE);
594adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
595b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   if (rmesa->using_hyperz) {
596b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= R200_Z_COMPRESSION_ENABLE |
597b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger						  R200_Z_DECOMPRESSION_ENABLE;
5984637235183b80963536f2364e4d50fcb894886ddDave Airlie/*      if (rmesa->radeon.radeonScreen->chip_family == CHIP_FAMILY_R200)
599b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger	 rmesa->hw.ctx.cmd[CTX_RB3D_ZSTENCILCNTL] |= RADEON_Z_HIERARCHY_ENABLE;*/
600b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger   }
601b31b7836d6e7abf80dd4feacce333d4b1fe6e4abRoland Scheidegger
602adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_PP_CNTL] = (R200_ANTI_ALIAS_NONE
603adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell 				     | R200_TEX_BLEND_0_ENABLE);
604adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
605adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] = color_fmt;
6064637235183b80963536f2364e4d50fcb894886ddDave Airlie   switch ( driQueryOptioni( &rmesa->radeon.optionCache, "dither_mode" ) ) {
607273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   case DRI_CONF_DITHER_XERRORDIFFRESET:
608273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_DITHER_INIT;
609273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      break;
610273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   case DRI_CONF_DITHER_ORDERED:
611273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_SCALE_DITHER_ENABLE;
612273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      break;
613273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   }
6144637235183b80963536f2364e4d50fcb894886ddDave Airlie   if ( driQueryOptioni( &rmesa->radeon.optionCache, "round_mode" ) ==
615273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane	DRI_CONF_ROUND_ROUND )
616d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.roundEnable = R200_ROUND_ENABLE;
617273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   else
618d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->radeon.state.color.roundEnable = 0;
6194637235183b80963536f2364e4d50fcb894886ddDave Airlie   if ( driQueryOptioni (&rmesa->radeon.optionCache, "color_reduction" ) ==
620273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane	DRI_CONF_COLOR_REDUCTION_DITHER )
621273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= R200_DITHER_ENABLE;
622273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane   else
623d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie      rmesa->hw.ctx.cmd[CTX_RB3D_CNTL] |= rmesa->radeon.state.color.roundEnable;
624273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane
625fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#if 000
626d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->hw.ctx.cmd[CTX_RB3D_COLOROFFSET] = ((rmesa->radeon.state.color.drawOffset +
6274637235183b80963536f2364e4d50fcb894886ddDave Airlie					       rmesa->radeon.radeonScreen->fbLocation)
628273e52f86fa41564f573c8e84d013f995e01a8f0Alan Hourihane					      & R200_COLOROFFSET_MASK);
629adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
630d29e96bf33e91d071770b86d87ffc4ef4dfc2f70Dave Airlie   rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] = ((rmesa->radeon.state.color.drawPitch &
631adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					      R200_COLORPITCH_MASK) |
632adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell					     R200_COLOR_ENDIAN_NO_SWAP);
633fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#else
634fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   rmesa->hw.ctx.cmd[CTX_RB3D_COLOROFFSET] = ((drawOffset +
6354637235183b80963536f2364e4d50fcb894886ddDave Airlie					       rmesa->radeon.radeonScreen->fbLocation)
636fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul					      & R200_COLOROFFSET_MASK);
637fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul
638fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul   rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] = ((drawPitch &
639fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul					      R200_COLORPITCH_MASK) |
640fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul					     R200_COLOR_ENDIAN_NO_SWAP);
641fcbfeb5d28aea87c60f2d02daa213d0c0c2516e8Brian Paul#endif
642a205137423e42010a025c70b05af98a6c0564f28Roland Scheidegger   /* (fixed size) sarea is initialized to zero afaics so can omit version check. Phew! */
6434637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (rmesa->radeon.sarea->tiling_enabled) {
644a205137423e42010a025c70b05af98a6c0564f28Roland Scheidegger      rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |= R200_COLOR_TILE_ENABLE;
645a205137423e42010a025c70b05af98a6c0564f28Roland Scheidegger   }
646adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
647fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   rmesa->hw.prf.cmd[PRF_PP_TRI_PERF] = R200_TRI_CUTOFF_MASK - R200_TRI_CUTOFF_MASK *
6484637235183b80963536f2364e4d50fcb894886ddDave Airlie			driQueryOptionf (&rmesa->radeon.optionCache,"texture_blend_quality");
649fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger   rmesa->hw.prf.cmd[PRF_PP_PERF_CNTL] = 0;
650fbe5296d1463e1052590b744f3d62ebb9e5d5dd4Roland Scheidegger
651adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.set.cmd[SET_SE_CNTL] = (R200_FFACE_CULL_CCW |
652adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_BFACE_SOLID |
653adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FFACE_SOLID |
654adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FLAT_SHADE_VTX_LAST |
655adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_DIFFUSE_SHADE_GOURAUD |
656adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ALPHA_SHADE_GOURAUD |
657adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_SPECULAR_SHADE_GOURAUD |
658adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_FOG_SHADE_GOURAUD |
659cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger				     R200_DISC_FOG_SHADE_GOURAUD |
660adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_VTX_PIX_CENTER_OGL |
661adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ROUND_MODE_TRUNC |
662adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_ROUND_PREC_8TH_PIX);
663adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
664adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.set.cmd[SET_RE_CNTL] = (R200_PERSPECTIVE_ENABLE |
665adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell				     R200_SCISSOR_ENABLE);
666adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
667adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_RE_LINE_PATTERN] = ((1 << 16) | 0xffff);
668adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
669adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_RE_LINE_STATE] =
670adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_LINE_CURRENT_PTR_SHIFT) |
671adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_LINE_CURRENT_COUNT_SHIFT));
672adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
673adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.lin.cmd[LIN_SE_LINE_WIDTH] = (1 << 4);
674adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
675adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_STENCILREFMASK] =
676adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0x00 << R200_STENCIL_REF_SHIFT) |
677adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0xff << R200_STENCIL_MASK_SHIFT) |
678adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0xff << R200_STENCIL_WRITEMASK_SHIFT));
679adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
680adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_ROPCNTL] = R200_ROP_COPY;
681adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msk.cmd[MSK_RB3D_PLANEMASK] = 0xffffffff;
682adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
683adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tam.cmd[TAM_DEBUG3] = 0;
684adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
685adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msc.cmd[MSC_RE_MISC] =
686adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_STIPPLE_X_OFFSET_SHIFT) |
687adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0 << R200_STIPPLE_Y_OFFSET_SHIFT) |
688adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_STIPPLE_BIG_BIT_ORDER);
689adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
690adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
691adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_PP_CNTL_X] = 0;
692adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RB3D_DEPTHXY_OFFSET] = 0;
693adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RE_AUX_SCISSOR_CNTL] = 0x0;
694adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RE_SCISSOR_TL_0] = 0;
695adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_RE_SCISSOR_BR_0] = 0;
696adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] =
697adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#ifdef MESA_BIG_ENDIAN
698adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell						R200_VC_32BIT_SWAP;
699adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#else
700adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell						R200_VC_NO_SWAP;
701adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell#endif
70210095c9024efb1767fb3df0b59672299c090ad10Eric Anholt
7034637235183b80963536f2364e4d50fcb894886ddDave Airlie   if (!(rmesa->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL)) {
70410095c9024efb1767fb3df0b59672299c090ad10Eric Anholt      /* Bypass TCL */
70510095c9024efb1767fb3df0b59672299c090ad10Eric Anholt      rmesa->hw.cst.cmd[CST_SE_VAP_CNTL_STATUS] |= (1<<8);
70610095c9024efb1767fb3df0b59672299c090ad10Eric Anholt   }
70710095c9024efb1767fb3df0b59672299c090ad10Eric Anholt
70844dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger   rmesa->hw.cst.cmd[CST_RE_POINTSIZE] =
70944dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger      (((GLuint)(ctx->Const.MaxPointSize * 16.0)) << R200_MAXPOINTSIZE_SHIFT) | 0x10;
710adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_0] =
711adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0 << R200_VERTEX_POSITION_ADDR__SHIFT);
712adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_1] =
713adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x02 << R200_VTX_COLOR_0_ADDR__SHIFT) |
714adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x03 << R200_VTX_COLOR_1_ADDR__SHIFT);
715adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_2] =
716adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x06 << R200_VTX_TEX_0_ADDR__SHIFT) |
717adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x07 << R200_VTX_TEX_1_ADDR__SHIFT) |
718adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x08 << R200_VTX_TEX_2_ADDR__SHIFT) |
719adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x09 << R200_VTX_TEX_3_ADDR__SHIFT);
720adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.cst.cmd[CST_SE_TCL_INPUT_VTX_3] =
721adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0A << R200_VTX_TEX_4_ADDR__SHIFT) |
722adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (0x0B << R200_VTX_TEX_5_ADDR__SHIFT);
723adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
724adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
725adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_XSCALE]  = 0x00000000;
726adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_XOFFSET] = 0x00000000;
727adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_YSCALE]  = 0x00000000;
728adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_YOFFSET] = 0x00000000;
729adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZSCALE]  = 0x00000000;
730adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vpt.cmd[VPT_SE_VPORT_ZOFFSET] = 0x00000000;
731adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
732adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for ( i = 0 ; i < ctx->Const.MaxTextureUnits ; i++ ) {
733adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFILTER] = R200_BORDER_MODE_OGL;
734adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT] =
735adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell         ((i << R200_TXFORMAT_ST_ROUTE_SHIFT) |  /* <-- note i */
736adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell          (2 << R200_TXFORMAT_WIDTH_SHIFT) |
737adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell          (2 << R200_TXFORMAT_HEIGHT_SHIFT));
738adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_BORDER_COLOR] = 0;
739adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.tex[i].cmd[TEX_PP_TXFORMAT_X] =
740adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell         (/* R200_TEXCOORD_PROJ | */
741adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell          0x100000);	/* Small default bias */
7424637235183b80963536f2364e4d50fcb894886ddDave Airlie      if (rmesa->radeon.radeonScreen->drmSupportsFragShader) {
743f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_NEWDRM] =
7444637235183b80963536f2364e4d50fcb894886ddDave Airlie	     rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
745f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 rmesa->hw.tex[i].cmd[TEX_PP_CUBIC_FACES] = 0;
746f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	 rmesa->hw.tex[i].cmd[TEX_PP_TXMULTI_CTL] = 0;
747f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      }
748f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger      else {
749f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger	  rmesa->hw.tex[i].cmd[TEX_PP_TXOFFSET_OLDDRM] =
7504637235183b80963536f2364e4d50fcb894886ddDave Airlie	     rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
751f20917de5bd2b1fc152e74304d3649a1f6042422Roland Scheidegger     }
752adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
753adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_FACES] = 0;
754067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F1] =
7554637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
756067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F2] =
7574637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
758067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F3] =
7594637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
760067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F4] =
7614637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
762067603db91072fc3b02e1583195641972f81168fMichel Dänzer      rmesa->hw.cube[i].cmd[CUBE_PP_CUBIC_OFFSET_F5] =
7634637235183b80963536f2364e4d50fcb894886ddDave Airlie         rmesa->radeon.radeonScreen->texOffset[RADEON_LOCAL_TEX_HEAP];
764adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
7651bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND] =
7661bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         (R200_TXC_ARG_A_ZERO |
7671bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_ARG_B_ZERO |
7681bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_ARG_C_DIFFUSE_COLOR |
7691bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_OP_MADD);
7701bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
7711bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXCBLEND2] =
7721bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         ((i << R200_TXC_TFACTOR_SEL_SHIFT) |
7731bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_SCALE_1X |
7741bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_CLAMP_0_1 |
7751bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXC_OUTPUT_REG_R0);
7761bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
7771bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND] =
7781bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         (R200_TXA_ARG_A_ZERO |
7791bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_ARG_B_ZERO |
7801bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_ARG_C_DIFFUSE_ALPHA |
7811bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_OP_MADD);
7821bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger
7831bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger      rmesa->hw.pix[i].cmd[PIX_PP_TXABLEND2] =
7841bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger         ((i << R200_TXA_TFACTOR_SEL_SHIFT) |
7851bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_SCALE_1X |
7861bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_CLAMP_0_1 |
7871bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger          R200_TXA_OUTPUT_REG_R0);
7881bf9499ee172b25a9021e7b00b766e97faa34ad4Roland Scheidegger   }
789adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
790adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_0] = 0;
791adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_1] = 0;
792adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_2] = 0;
793adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_3] = 0;
794adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_4] = 0;
795adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tf.cmd[TF_TFACTOR_5] = 0;
796adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
797adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vap.cmd[VAP_SE_VAP_CNTL] =
798adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_VAP_TCL_ENABLE |
799adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (0x9 << R200_VAP_VF_MAX_VTX_NUM__SHIFT));
800adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
801adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vte.cmd[VTE_SE_VTE_CNTL] =
802adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_VPORT_X_SCALE_ENA |
803adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Y_SCALE_ENA |
804adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Z_SCALE_ENA |
805adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_X_OFFSET_ENA |
806adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Y_OFFSET_ENA |
807adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VPORT_Z_OFFSET_ENA |
808adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell/* FIXME: Turn on for tex rect only */
809adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VTX_ST_DENORMALIZED |
810adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_VTX_W0_FMT);
811adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
812adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
813adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_VTXFMT_0] = 0;
814adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_VTXFMT_1] = 0;
815adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_0] =
816adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_VTX_Z0 | R200_VTX_W0 |
817adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_VTX_FP_RGBA << R200_VTX_COLOR_0_SHIFT)));
818adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_VTXFMT_1] = 0;
819adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_TCL_OUTPUT_COMPSEL] = (R200_OUTPUT_XYZW);
820adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.vtx.cmd[VTX_STATE_CNTL] = R200_VSC_UPDATE_USER_COLOR_0_ENABLE;
821adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
822adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
823adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Matrix selection */
824adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_0] =
825adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_MTX_MV << R200_MODELVIEW_0_SHIFT);
826adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
827adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_1] =
828adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_IMV << R200_IT_MODELVIEW_0_SHIFT);
829adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
830adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_2] =
831adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_MTX_MVP << R200_MODELPROJECT_0_SHIFT);
832adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
833adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_3] =
834adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_MTX_TEX0 << R200_TEXMAT_0_SHIFT) |
835adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX1 << R200_TEXMAT_1_SHIFT) |
836adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX2 << R200_TEXMAT_2_SHIFT) |
837adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX3 << R200_TEXMAT_3_SHIFT));
838adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
839adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.msl.cmd[MSL_MATRIX_SELECT_4] =
840adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((R200_MTX_TEX4 << R200_TEXMAT_4_SHIFT) |
841adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (R200_MTX_TEX5 << R200_TEXMAT_5_SHIFT));
842adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
843adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
844adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* General TCL state */
845adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_0] =
846adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_SPECULAR_LIGHTS |
847adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_DIFFUSE_SPECULAR_COMBINE |
848a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LOCAL_LIGHT_VEC_GL |
849a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LM0_SOURCE_MATERIAL_0 << R200_FRONT_SHININESS_SOURCE_SHIFT |
850a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       R200_LM0_SOURCE_MATERIAL_1 << R200_BACK_SHININESS_SOURCE_SHIFT);
851adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
852adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_LIGHT_MODEL_CTL_1] =
853a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger      ((R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_EMISSIVE_SOURCE_SHIFT) |
854a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_AMBIENT_SOURCE_SHIFT) |
855a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_DIFFUSE_SOURCE_SHIFT) |
856a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_0 << R200_FRONT_SPECULAR_SOURCE_SHIFT) |
857a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_EMISSIVE_SOURCE_SHIFT) |
858a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_AMBIENT_SOURCE_SHIFT) |
859a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_DIFFUSE_SOURCE_SHIFT) |
860a1b9b1a4409729fa8b6714e5847544576fcee404Roland Scheidegger       (R200_LM1_SOURCE_MATERIAL_1 << R200_BACK_SPECULAR_SOURCE_SHIFT));
861adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
862adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_0] = 0; /* filled in via callbacks */
863adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_1] = 0;
864adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_2] = 0;
865adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_PER_LIGHT_CTL_3] = 0;
866adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
867adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcl.cmd[TCL_UCP_VERT_BLEND_CTL] =
868adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      (R200_UCP_IN_CLIP_SPACE |
869adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       R200_CULL_FRONT_IS_CCW);
870adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
871adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   /* Texgen/Texmat state */
872b1ebd306bf4fdc4076d3d3daa410b08f477cb4c4Eric Anholt   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_2] = 0x00ffffff;
873adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_3] =
874adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_TEXGEN_0_INPUT_TEX_SHIFT) |
875adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_TEXGEN_1_INPUT_TEX_SHIFT) |
876adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (2 << R200_TEXGEN_2_INPUT_TEX_SHIFT) |
877adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (3 << R200_TEXGEN_3_INPUT_TEX_SHIFT) |
878adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (4 << R200_TEXGEN_4_INPUT_TEX_SHIFT) |
879adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (5 << R200_TEXGEN_5_INPUT_TEX_SHIFT));
880adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_0] = 0;
881adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_PROC_CTL_1] =
882adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ((0 << R200_TEXGEN_0_INPUT_SHIFT) |
883adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (1 << R200_TEXGEN_1_INPUT_SHIFT) |
884adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (2 << R200_TEXGEN_2_INPUT_SHIFT) |
885adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (3 << R200_TEXGEN_3_INPUT_SHIFT) |
886adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (4 << R200_TEXGEN_4_INPUT_SHIFT) |
887adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell       (5 << R200_TEXGEN_5_INPUT_SHIFT));
888adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.tcg.cmd[TCG_TEX_CYL_WRAP_CTL] = 0;
889adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
890adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
891adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 8; i++) {
892adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      struct gl_light *l = &ctx->Light.Light[i];
893adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      GLenum p = GL_LIGHT0 + i;
894adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      *(float *)&(rmesa->hw.lit[i].cmd[LIT_RANGE_CUTOFF]) = FLT_MAX;
895adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
896adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_AMBIENT, l->Ambient );
897adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_DIFFUSE, l->Diffuse );
898adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPECULAR, l->Specular );
8990846e52d46b36c411f79908df010072e03bb6437Brian Paul      ctx->Driver.Lightfv( ctx, p, GL_POSITION, NULL );
9000846e52d46b36c411f79908df010072e03bb6437Brian Paul      ctx->Driver.Lightfv( ctx, p, GL_SPOT_DIRECTION, NULL );
901adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPOT_EXPONENT, &l->SpotExponent );
902adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_SPOT_CUTOFF, &l->SpotCutoff );
903adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_CONSTANT_ATTENUATION,
904adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			   &l->ConstantAttenuation );
905adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_LINEAR_ATTENUATION,
906adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			   &l->LinearAttenuation );
907adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.Lightfv( ctx, p, GL_QUADRATIC_ATTENUATION,
908bcc6eddd335e97d49ed2ef3a1440f94d58dce12dJon Smirl			   &l->QuadraticAttenuation );
9095d00e131d8a264498b8d050c3eded093ee5c42f2Michel Dänzer      *(float *)&(rmesa->hw.lit[i].cmd[LIT_ATTEN_XXX]) = 0.0;
910adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
911adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
912adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.LightModelfv( ctx, GL_LIGHT_MODEL_AMBIENT,
913adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell			     ctx->Light.Model.Ambient );
914adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
915adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   TNL_CONTEXT(ctx)->Driver.NotifyMaterialChange( ctx );
916adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
917adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   for (i = 0 ; i < 6; i++) {
918adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell      ctx->Driver.ClipPlane( ctx, GL_CLIP_PLANE0 + i, NULL );
919adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   }
920adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
9210846e52d46b36c411f79908df010072e03bb6437Brian Paul   ctx->Driver.Fogfv( ctx, GL_FOG_MODE, NULL );
922adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_DENSITY, &ctx->Fog.Density );
923adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_START, &ctx->Fog.Start );
924adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_END, &ctx->Fog.End );
925adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   ctx->Driver.Fogfv( ctx, GL_FOG_COLOR, ctx->Fog.Color );
9260846e52d46b36c411f79908df010072e03bb6437Brian Paul   ctx->Driver.Fogfv( ctx, GL_FOG_COORDINATE_SOURCE_EXT, NULL );
927adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
928adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_VERT_GUARD_CLIP_ADJ] = IEEE_ONE;
929adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_VERT_GUARD_DISCARD_ADJ] = IEEE_ONE;
930adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_HORZ_GUARD_CLIP_ADJ] = IEEE_ONE;
931adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.grd.cmd[GRD_HORZ_GUARD_DISCARD_ADJ] = IEEE_ONE;
932adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
933adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_X] = 0;
934adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_Y] = 0;
935adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_Z] = IEEE_ONE;
936adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   rmesa->hw.eye.cmd[EYE_RESCALE_FACTOR] = IEEE_ONE;
937adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell
938cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.spr.cmd[SPR_POINT_SPRITE_CNTL] =
939cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      R200_PS_SE_SEL_STATE | R200_PS_MULT_CONST;
940cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger
941cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   /* ptp_eye is presumably used to calculate the attenuation wrt a different
942cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      location? In any case, since point attenuation triggers _needeyecoords,
943cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      it is constant. Probably ignored as long as R200_PS_USE_MODEL_EYE_VEC
944cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      isn't set */
945cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_X] = 0;
946cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_Y] = 0;
947cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_Z] = IEEE_ONE | 0x80000000; /* -1.0 */
948cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_EYE_3] = 0;
949cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   /* no idea what the ptp_vport_scale values are good for, except the
950cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger      PTSIZE one - hopefully doesn't matter */
951cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_0] = IEEE_ONE;
952cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_1] = IEEE_ONE;
953cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_PTSIZE] = IEEE_ONE;
954cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_VPORT_SCALE_3] = IEEE_ONE;
955cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_QUAD] = 0;
956cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_LIN] = 0;
957cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_CON] = IEEE_ONE;
958cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_ATT_CONST_3] = 0;
959cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_MIN] = IEEE_ONE;
960cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_MAX] = 0x44ffe000; /* 2047 */
961cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_2] = 0;
962cb977ae5f4c9fab5753c04bfdd8736978ad4feeeRoland Scheidegger   rmesa->hw.ptp.cmd[PTP_CLAMP_3] = 0;
96344dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger
964adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell   r200LightingSpaceChange( ctx );
96544dace86eaf9eded8e6465adfadf6345658686ddRoland Scheidegger
9660c8f8d3dc9d60ed34eeca7f3606651420a81753cEric Anholt   rmesa->hw.all_dirty = GL_TRUE;
967adbec39bbf671ad80f6c557801e274cac0d305faKeith Whitwell}
968