From 74477b24a8faef4ce0870b4a68270e586d107ff7 Mon Sep 17 00:00:00 2001 From: Nicolai Haehnle Date: Thu, 17 Feb 2005 21:45:20 +0000 Subject: [PATCH] RADEON_DEBUG is a bitfield, so use & instead of ==. Also, put the hash in preprocessor directives at the beginning of the line to fix error messages. --- src/mesa/drivers/dri/r300/r300_render.c | 196 ++++++++++++------------ 1 file changed, 98 insertions(+), 98 deletions(-) diff --git a/src/mesa/drivers/dri/r300/r300_render.c b/src/mesa/drivers/dri/r300/r300_render.c index 71a060db4d1..f7951c01b1a 100644 --- a/src/mesa/drivers/dri/r300/r300_render.c +++ b/src/mesa/drivers/dri/r300/r300_render.c @@ -69,7 +69,7 @@ void update_zbias(GLcontext * ctx, int prim) case GL_POINTS: if(ctx->Polygon.OffsetPoint == GL_TRUE) enabled=1; - break; + break; case GL_LINES: case GL_LINE_STRIP: case GL_LINE_LOOP: @@ -89,9 +89,9 @@ void update_zbias(GLcontext * ctx, int prim) fprintf(stderr, "%s:%s Do not know how to handle primitive %02x - help me !\n", __FILE__, __FUNCTION__, prim & PRIM_MODE_MASK); - + } - + if(enabled){ values[0]=values[2]=r300PackFloat32(ctx->Polygon.OffsetFactor * 12.0); values[1]=values[3]=r300PackFloat32(ctx->Polygon.OffsetUnits * 4.0); @@ -99,7 +99,7 @@ void update_zbias(GLcontext * ctx, int prim) values[0]=values[2]=r300PackFloat32(0.0); values[1]=values[3]=r300PackFloat32(0.0); } - + if(values[0] != rmesa->hw.zbs.cmd[R300_ZBS_T_FACTOR] || values[1] != rmesa->hw.zbs.cmd[R300_ZBS_T_CONSTANT] || values[2] != rmesa->hw.zbs.cmd[R300_ZBS_W_FACTOR] || @@ -110,7 +110,7 @@ void update_zbias(GLcontext * ctx, int prim) rmesa->hw.zbs.cmd[R300_ZBS_T_CONSTANT] = values[1]; rmesa->hw.zbs.cmd[R300_ZBS_W_FACTOR] = values[2]; rmesa->hw.zbs.cmd[R300_ZBS_W_CONSTANT] = values[3]; - + } } @@ -127,14 +127,14 @@ static int r300_get_primitive_type(r300ContextPtr rmesa, GLcontext *ctx, int pri struct vertex_buffer *VB = &tnl->vb; GLuint i; int type=-1; - + switch (prim & PRIM_MODE_MASK) { case GL_POINTS: type=R300_VAP_VF_CNTL__PRIM_POINTS; - break; + break; case GL_LINES: type=R300_VAP_VF_CNTL__PRIM_LINES; - break; + break; case GL_LINE_STRIP: type=R300_VAP_VF_CNTL__PRIM_LINE_STRIP; break; @@ -169,7 +169,7 @@ static int r300_get_primitive_type(r300ContextPtr rmesa, GLcontext *ctx, int pri return type; } -static int r300_get_num_verts(r300ContextPtr rmesa, +static int r300_get_num_verts(r300ContextPtr rmesa, GLcontext *ctx, int num_verts, int prim) @@ -179,16 +179,16 @@ static int r300_get_num_verts(r300ContextPtr rmesa, GLuint i; int type=-1, verts_off=0; char *name="UNKNOWN"; - + switch (prim & PRIM_MODE_MASK) { case GL_POINTS: name="P"; verts_off = 0; - break; + break; case GL_LINES: name="L"; verts_off = num_verts % 2; - break; + break; case GL_LINE_STRIP: name="LS"; if(num_verts < 2) @@ -236,16 +236,16 @@ static int r300_get_num_verts(r300ContextPtr rmesa, return -1; break; } - + if(num_verts - verts_off == 0){ WARN_ONCE("user error: Need more than %d vertices to draw primitive %s !\n", num_verts, name); return 0; } - + if(verts_off > 0){ WARN_ONCE("user error: %d is not a valid number of vertices for primitive %s !\n", num_verts, name); } - + return num_verts - verts_off; } @@ -254,12 +254,12 @@ void dump_inputs(GLcontext *ctx, int render_inputs) int k; fprintf(stderr, "inputs:"); fprintf(stderr, "%08x ", render_inputs); - + if(render_inputs & _TNL_BIT_POS) fprintf(stderr, "_TNL_BIT_POS "); if(render_inputs & _TNL_BIT_NORMAL) fprintf(stderr, "_TNL_BIT_NORMAL "); - + /* color components */ if(render_inputs & _TNL_BIT_COLOR0) fprintf(stderr, "_TNL_BIT_COLOR0 "); @@ -268,26 +268,26 @@ void dump_inputs(GLcontext *ctx, int render_inputs) if(render_inputs & _TNL_BIT_FOG) fprintf(stderr, "_TNL_BIT_FOG "); - + /* texture coordinates */ for(k=0;k < ctx->Const.MaxTextureUnits;k++) if(render_inputs & (_TNL_BIT_TEX0<ObjPtr->size, VB->ObjPtr->stride); - fprintf(stderr,"ColorPtr[0]: size=%d stride=%d\n", + fprintf(stderr,"ColorPtr[0]: size=%d stride=%d\n", VB->ColorPtr[0]->size, VB->ColorPtr[0]->stride); - fprintf(stderr,"TexCoordPtr[0]: size=%d stride=%d\n", + fprintf(stderr,"TexCoordPtr[0]: size=%d stride=%d\n", VB->TexCoordPtr[0]->size, VB->TexCoordPtr[0]->stride); #endif - + if(type<0 || num_verts <= 0)return; if(!VB->ObjPtr){ @@ -344,7 +344,7 @@ static void r300_render_immediate_primitive(r300ContextPtr rmesa, /* A packet cannot have more than 16383 data words.. */ if((num_verts*4*rmesa->state.aos_count)>16380){ WARN_ONCE("Too many vertices to paint. Fix me !\n"); - return; + return; } //fprintf(stderr, "aos_count=%d start=%d end=%d\n", rmesa->state.aos_count, start, end); @@ -353,7 +353,7 @@ static void r300_render_immediate_primitive(r300ContextPtr rmesa, WARN_ONCE("Aeiee ! aos_count==0, while it shouldn't. Skipping rendering\n"); return; } - + render_inputs = rmesa->state.render_inputs; if(!render_inputs){ @@ -362,31 +362,31 @@ static void r300_render_immediate_primitive(r300ContextPtr rmesa, } //dump_inputs(ctx, render_inputs); return ; - + start_immediate_packet(num_verts, type, 4*rmesa->state.aos_count); for(i=start;iObjPtr, GLfloat, i)[0], VEC_ELT(VB->ObjPtr, GLfloat, i)[1], VEC_ELT(VB->ObjPtr, GLfloat, i)[2], VEC_ELT(VB->ObjPtr, GLfloat, i)[3], - + VEC_ELT(VB->ColorPtr[0], GLfloat, i)[0], VEC_ELT(VB->ColorPtr[0], GLfloat, i)[1], VEC_ELT(VB->ColorPtr[0], GLfloat, i)[2], VEC_ELT(VB->ColorPtr[0], GLfloat, i)[3] ); #endif - - + + /* coordinates */ if(render_inputs & _TNL_BIT_POS) output_vector(VB->ObjPtr, i); if(render_inputs & _TNL_BIT_NORMAL) output_vector(VB->NormalPtr, i); - + /* color components */ if(render_inputs & _TNL_BIT_COLOR0) output_vector(VB->ColorPtr[0], i); @@ -395,12 +395,12 @@ static void r300_render_immediate_primitive(r300ContextPtr rmesa, /* if(render_inputs & _TNL_BIT_FOG) // Causes lock ups when immediate mode is on output_vector(VB->FogCoordPtr, i);*/ - + /* texture coordinates */ for(k=0;k < ctx->Const.MaxTextureUnits;k++) if(render_inputs & (_TNL_BIT_TEX0<TexCoordPtr[k], i); - + if(render_inputs & _TNL_BIT_INDEX) output_vector(VB->IndexPtr[0], i); if(render_inputs & _TNL_BIT_POINTSIZE) @@ -421,15 +421,15 @@ static GLboolean r300_run_immediate_render(GLcontext *ctx, struct gl_texture_object *to=ctx->Texture.Unit[0].Current2D; r300TexObjPtr t=to->DriverData; LOCAL_VARS - - + + /* Update texture state - needs to be done only when actually changed.. All the time for now.. */ if (RADEON_DEBUG == DEBUG_PRIMS) fprintf(stderr, "%s\n", __FUNCTION__); - + #if 1 /* we need this, somehow */ /* Flush state - make sure command buffer is nice and large */ r300Flush(ctx); @@ -439,15 +439,15 @@ static GLboolean r300_run_immediate_render(GLcontext *ctx, r300EnsureCmdBufSpace(rmesa, rmesa->hw.max_state_size + 4+2+30 +VB->PrimitiveCount*(1+8)+VB->Count*4*rmesa->state.texture.tc_count+4, __FUNCTION__); #endif - + /* needed before starting 3d operation .. */ reg_start(R300_RB3D_DSTCACHE_CTLSTAT,0); e32(0x0000000a); - + reg_start(0x4f18,0); e32(0x00000003); - - + + #if 0 /* looks like the Z offset issue got fixed */ rmesa->hw.vte.cmd[1] = R300_VPORT_X_SCALE_ENA | R300_VPORT_X_OFFSET_ENA @@ -456,24 +456,24 @@ static GLboolean r300_run_immediate_render(GLcontext *ctx, | R300_VTX_W0_FMT; R300_STATECHANGE(rmesa, vte); #endif - - - + + + /* Magic register - note it is right after 20b0 */ - + if(rmesa->state.texture.tc_count>0){ reg_start(0x20b4,0); e32(0x0000000c); - + } - + r300EmitState(rmesa); - + #if 0 reg_start(R300_RB3D_COLORMASK, 0); e32(0xf); - + vsf_start_fragment(0x406, 4); efloat(0.0); efloat(0.0); @@ -486,7 +486,7 @@ static GLboolean r300_run_immediate_render(GLcontext *ctx, efloat(0.0); efloat(1.0); #endif - + /* Setup INPUT_ROUTE and INPUT_CNTL */ r300EmitArrays(ctx, GL_TRUE); @@ -502,16 +502,16 @@ static GLboolean r300_run_immediate_render(GLcontext *ctx, r300_render_immediate_primitive(rmesa, ctx, start, start + length, prim); } - + /* This sequence is required after any 3d drawing packet I suspect it work arounds a bug (or deficiency) in hardware */ - + reg_start(R300_RB3D_DSTCACHE_CTLSTAT,0); e32(0x0000000a); - + reg_start(0x4f18,0); e32(0x00000003); - + return GL_FALSE; } @@ -529,7 +529,7 @@ unsigned long get_num_elts(unsigned long count) { #ifdef PLAY_WITH_MAGIC_1 return count; -#else +#else /* round up elt count so that magic_1 is 0 (divisable by 4)*/ return (count+3) & (~3); //return count - (count % 4); @@ -554,19 +554,19 @@ static void inline fire_EB(PREFIX unsigned long addr, int vertex_count, int type WARN_ONCE("Dont know how to handle this yet!\n"); return ; } -#endif +#endif check_space(6); - + start_packet3(RADEON_CP_PACKET3_3D_DRAW_INDX_2, 0); e32(R300_VAP_VF_CNTL__PRIM_WALK_INDICES | (vertex_count<<16) | type); - + start_packet3(RADEON_CP_PACKET3_INDX_BUFFER, 2); e32(R300_EB_UNK1 | (magic_1 << 16) | R300_EB_UNK2); e32(addr); e32(((vertex_count+1) / 2) + magic_1); /* This still fails once in a while */ } -static void r300_render_vb_primitive(r300ContextPtr rmesa, +static void r300_render_vb_primitive(r300ContextPtr rmesa, GLcontext *ctx, int start, int end, @@ -578,26 +578,26 @@ static void r300_render_vb_primitive(r300ContextPtr rmesa, TNLcontext *tnl = TNL_CONTEXT(ctx); struct vertex_buffer *VB = &tnl->vb; int i; - + type=r300_get_primitive_type(rmesa, ctx, prim); num_verts=r300_get_num_verts(rmesa, ctx, end-start, prim); - + if(type<0 || num_verts <= 0)return; - + if(rmesa->state.Elts){ unsigned long elt_count; - + WARN_ONCE("Rendering with elts\n"); -#if 1 +#if 1 start_index32_packet(num_verts, type); for(i=0; i < num_verts; i++) e32(rmesa->state.Elts[start+i]); /* start ? */ -#else +#else elt_count=get_num_elts(num_verts); //emit_elts(ctx, rmesa->state.Elts, VB->Count, get_num_elts(VB->Count)); emit_elts(ctx, rmesa->state.Elts+start, num_verts, elt_count, get_align(elt_count)); fire_EB(PASS_PREFIX rsp->gartTextures.handle/*rmesa->state.elt_ao.aos_offset*/, elt_count, type); -#endif +#endif }else fire_AOS(PASS_PREFIX num_verts, type); } @@ -610,28 +610,28 @@ static GLboolean r300_run_vb_render(GLcontext *ctx, struct vertex_buffer *VB = &tnl->vb; int i, j; LOCAL_VARS - + if (RADEON_DEBUG == DEBUG_PRIMS) fprintf(stderr, "%s\n", __FUNCTION__); - + r300ReleaseArrays(ctx); r300EmitArrays(ctx, GL_FALSE); //dump_inputs(ctx, rmesa->state.render_inputs); #if 0 /* Cant do this here yet due to magic_1 */ if(rmesa->state.Elts) emit_elts(ctx, rmesa->state.Elts, /*600*/VB->Count, get_num_elts(/*600*/VB->Count)); -#endif - +#endif + // LOCK_HARDWARE(&(rmesa->radeon)); reg_start(R300_RB3D_DSTCACHE_CTLSTAT,0); e32(0x0000000a); - + reg_start(0x4f18,0); e32(0x00000003); - r300EmitState(rmesa); + r300EmitState(rmesa); rmesa->state.Elts = VB->Elts; @@ -648,16 +648,16 @@ static GLboolean r300_run_vb_render(GLcontext *ctx, reg_start(R300_RB3D_DSTCACHE_CTLSTAT,0); e32(0x0000000a); - + reg_start(0x4f18,0); e32(0x00000003); // end_3d(PASS_PREFIX_VOID); - + /* Flush state - we are done drawing.. */ // r300FlushCmdBufLocked(rmesa, __FUNCTION__); // radeonWaitForIdleLocked(&(rmesa->radeon)); - + // UNLOCK_HARDWARE(&(rmesa->radeon)); return GL_FALSE; } @@ -675,21 +675,21 @@ static GLboolean r300_run_render(GLcontext *ctx, TNLcontext *tnl = TNL_CONTEXT(ctx); struct vertex_buffer *VB = &tnl->vb; GLuint i; - - if (RADEON_DEBUG == DEBUG_PRIMS) + + if (RADEON_DEBUG & DEBUG_PRIMS) fprintf(stderr, "%s\n", __FUNCTION__); - - - #if 1 - - #if 1 - return r300_run_immediate_render(ctx, stage); - #else - return r300_run_vb_render(ctx, stage); - #endif - #else + + +#if 1 + +#if 1 + return r300_run_immediate_render(ctx, stage); +#else + return r300_run_vb_render(ctx, stage); +#endif +#else return GL_TRUE; - #endif +#endif #if 0 mgaContextPtr mmesa = MGA_CONTEXT(ctx); @@ -757,11 +757,11 @@ static void r300_check_render(GLcontext *ctx, struct tnl_pipeline_stage *stage) stage->active = GL_FALSE; return; } - + // I failed to figure out how dither works in hardware, // let's just ignore it for now //FALLBACK_IF(ctx->Color.DitherFlag); - + /* I'm almost certain I forgot something here */ #if 0 /* This should work now.. */ FALLBACK_IF(ctx->Color.AlphaEnabled); // GL_ALPHA_TEST @@ -781,13 +781,13 @@ static void r300_check_render(GLcontext *ctx, struct tnl_pipeline_stage *stage) FALLBACK_IF(ctx->Polygon.StippleFlag); // GL_POLYGON_STIPPLE //FALLBACK_IF(ctx->Stencil.Enabled); // GL_STENCIL_TEST FALLBACK_IF(ctx->Multisample.Enabled); // GL_MULTISAMPLE_ARB - + /* One step at a time - let one texture pass.. */ for (i = 1; i < ctx->Const.MaxTextureUnits; i++) FALLBACK_IF(ctx->Texture.Unit[i].Enabled); /* let r300_run_render do its job */ - #if 0 + #if 0 stage->active = GL_FALSE; #endif } -- 2.30.2