diff options
| -rw-r--r-- | src/mesa/drivers/dri/r300/r300_render.c | 140 | 
1 files changed, 78 insertions, 62 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_render.c b/src/mesa/drivers/dri/r300/r300_render.c index bafaf272d8..3007d282e4 100644 --- a/src/mesa/drivers/dri/r300/r300_render.c +++ b/src/mesa/drivers/dri/r300/r300_render.c @@ -73,62 +73,16 @@ static void r300_render_flat_primitive(r300ContextPtr rmesa,     struct vertex_buffer *VB = &tnl->vb;     GLuint i;     int k; -   ADAPTOR adaptor; -   AOS_DATA vb_arrays[2];     LOCAL_VARS     if(end<=start)return; /* do we need to watch for this ? */ -   /* setup array of structures data */ - -   /* Note: immediate vertex data includes all coordinates. -     To save bandwidth use either VBUF or state-based vertex generation */ -    /* xyz */ -   vb_arrays[0].element_size=4; -   vb_arrays[0].stride=4; -   vb_arrays[0].offset=0; /* Not used */ -   vb_arrays[0].format=AOS_FORMAT_FLOAT; -   vb_arrays[0].ncomponents=4; - -    /* color */ -   vb_arrays[1].element_size=4; -   vb_arrays[1].stride=4; -   vb_arrays[1].offset=0; /* Not used */ -   vb_arrays[1].format=AOS_FORMAT_FLOAT_COLOR; -   vb_arrays[1].ncomponents=4; - -   adaptor=TWO_PIPE_ADAPTOR; -    -   adaptor.color_offset[0]=rmesa->radeon.radeonScreen->backOffset+rmesa->radeon.radeonScreen->fbLocation; -   adaptor.color_pitch[0]=(rmesa->radeon.radeonScreen->backPitch) | (0xc0<<16); - -   adaptor.depth_offset=rmesa->radeon.radeonScreen->depthOffset; -   adaptor.depth_pitch=rmesa->radeon.radeonScreen->depthPitch | (0x2 << 16); -    -   init_3d(PASS_PREFIX &adaptor); -   init_flat_primitive(PASS_PREFIX &adaptor); -    -   set_scissors(PASS_PREFIX 0, 0, 2647, 1941); - -   set_cliprect(PASS_PREFIX 0, 0, 0, 2647,1941); -   set_cliprect(PASS_PREFIX 1, 0, 0, 2647,1941); -   set_cliprect(PASS_PREFIX 2, 0, 0, 2647,1941); -   set_cliprect(PASS_PREFIX 3, 0, 0, 2647,1941); -    -   reg_start(R300_RE_OCCLUSION_CNTL, 0); -	     e32(R300_OCCLUSION_ON); - -   set_quad0(PASS_PREFIX 1.0,1.0,1.0,1.0); -   set_init21(PASS_PREFIX 0.0,1.0); - -   /* We need LOAD_VBPNTR to setup AOS_ATTR fields.. the offsets are irrelevant */ -   setup_AOS(PASS_PREFIX vb_arrays, 2);     start_immediate_packet(end-start, type, 8);  	for(i=start;i<end;i++){ -		#if 1 +		#if 0  		fprintf(stderr, "* (%f %f %f %f) (%f %f %f %f)\n",   			VEC_ELT(VB->ObjPtr, GLfloat, i)[0],  			VEC_ELT(VB->ObjPtr, GLfloat, i)[1], @@ -149,7 +103,7 @@ static void r300_render_flat_primitive(r300ContextPtr rmesa,  		#if 0  		efloat(VEC_ELT(VB->ObjPtr, GLfloat, i)[3]);  		#else -		efloat(1.0); +		efloat(2.0);  		#endif  		/* color components */ @@ -163,13 +117,9 @@ static void r300_render_flat_primitive(r300ContextPtr rmesa,  		#endif  		} -   end_3d(PASS_PREFIX_VOID); -    -   start_packet3(RADEON_CP_PACKET3_NOP, 0); -   e32(0x0);  } -static void r300_render_primitive(r300ContextPtr rmesa,  +static void r300_dispatch_flat_primitive(r300ContextPtr rmesa,   	GLcontext *ctx,  	int start,  	int end, @@ -257,33 +207,99 @@ static void r300_render_primitive(r300ContextPtr rmesa,  } - -/** - * Called by the pipeline manager to render a batch of primitives. - * We can return true to pass on to the next stage (i.e. software - * rasterization) or false to indicate that the pipeline has finished - * after we render something. - */ -static GLboolean r300_run_render(GLcontext *ctx, +static GLboolean r300_run_flat_render(GLcontext *ctx,  				 struct tnl_pipeline_stage *stage)  {     r300ContextPtr rmesa = R300_CONTEXT(ctx);     TNLcontext *tnl = TNL_CONTEXT(ctx);     struct vertex_buffer *VB = &tnl->vb;     GLuint i; +   ADAPTOR adaptor; +   AOS_DATA vb_arrays[2]; +   LOCAL_VARS  	if (RADEON_DEBUG == DEBUG_PRIMS)  		fprintf(stderr, "%s\n", __FUNCTION__); +   /* setup array of structures data */ + +   /* Note: immediate vertex data includes all coordinates. +     To save bandwidth use either VBUF or state-based vertex generation */ +    /* xyz */ +   vb_arrays[0].element_size=4; +   vb_arrays[0].stride=4; +   vb_arrays[0].offset=0; /* Not used */ +   vb_arrays[0].format=AOS_FORMAT_FLOAT; +   vb_arrays[0].ncomponents=4; + +    /* color */ +   vb_arrays[1].element_size=4; +   vb_arrays[1].stride=4; +   vb_arrays[1].offset=0; /* Not used */ +   vb_arrays[1].format=AOS_FORMAT_FLOAT_COLOR; +   vb_arrays[1].ncomponents=4; + +   adaptor=TWO_PIPE_ADAPTOR; +    +   adaptor.color_offset[0]=rmesa->radeon.radeonScreen->backOffset+rmesa->radeon.radeonScreen->fbLocation; +   adaptor.color_pitch[0]=(rmesa->radeon.radeonScreen->backPitch) | (0xc0<<16); + +   adaptor.depth_offset=rmesa->radeon.radeonScreen->depthOffset; +   adaptor.depth_pitch=rmesa->radeon.radeonScreen->depthPitch | (0x2 << 16); +    +   init_3d(PASS_PREFIX &adaptor); +   init_flat_primitive(PASS_PREFIX &adaptor); +    +   set_scissors(PASS_PREFIX 0, 0, 2647, 1941); + +   set_cliprect(PASS_PREFIX 0, 0, 0, 2647,1941); +   set_cliprect(PASS_PREFIX 1, 0, 0, 2647,1941); +   set_cliprect(PASS_PREFIX 2, 0, 0, 2647,1941); +   set_cliprect(PASS_PREFIX 3, 0, 0, 2647,1941); +    +   reg_start(R300_RE_OCCLUSION_CNTL, 0); +	     e32(R300_OCCLUSION_ON); + +   set_quad0(PASS_PREFIX 1.0,1.0,1.0,1.0); +   set_init21(PASS_PREFIX 0.0,1.0); + +   /* We need LOAD_VBPNTR to setup AOS_ATTR fields.. the offsets are irrelevant */ +   setup_AOS(PASS_PREFIX vb_arrays, 2); +        for(i=0; i < VB->PrimitiveCount; i++){         GLuint prim = VB->Primitive[i].mode;         GLuint start = VB->Primitive[i].start;         GLuint length = VB->Primitive[i].count; -	r300_render_primitive(rmesa, ctx, start, start + length, prim); +	r300_dispatch_flat_primitive(rmesa, ctx, start, start + length, prim);     	} +   end_3d(PASS_PREFIX_VOID); +    +   start_packet3(RADEON_CP_PACKET3_NOP, 0); +   e32(0x0);     fprintf(stderr, "\n"); +   return GL_FALSE; +} + +/** + * Called by the pipeline manager to render a batch of primitives. + * We can return true to pass on to the next stage (i.e. software + * rasterization) or false to indicate that the pipeline has finished + * after we render something. + */ +static GLboolean r300_run_render(GLcontext *ctx, +				 struct tnl_pipeline_stage *stage) +{ +   r300ContextPtr rmesa = R300_CONTEXT(ctx); +   TNLcontext *tnl = TNL_CONTEXT(ctx); +   struct vertex_buffer *VB = &tnl->vb; +   GLuint i; +	 +	if (RADEON_DEBUG == DEBUG_PRIMS) +		fprintf(stderr, "%s\n", __FUNCTION__); + +   return r300_run_flat_render(ctx, stage);     #if 0  	return GL_TRUE;     #else  | 
