summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/r300/r300_render.c
diff options
context:
space:
mode:
authorVladimir Dergachev <volodya@freedesktop.org>2005-02-03 15:44:06 +0000
committerVladimir Dergachev <volodya@freedesktop.org>2005-02-03 15:44:06 +0000
commit4c56261075500d7434e24fb47bf5b1a0196b2b11 (patch)
treedf0b32fbdb178dd9a62cfd27bed2171e5d56c3c5 /src/mesa/drivers/dri/r300/r300_render.c
parent19b260119a8ef78bbe1815d8011ff64a22208b3d (diff)
Get vertex programs supplied by the user work properly with immediate mode - vertex buffer mode worked by accident.
Fix alu_offset in SINGLE_TEXTURE_PIPELINE.
Diffstat (limited to 'src/mesa/drivers/dri/r300/r300_render.c')
-rw-r--r--src/mesa/drivers/dri/r300/r300_render.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_render.c b/src/mesa/drivers/dri/r300/r300_render.c
index 16b7258481..7092842e9d 100644
--- a/src/mesa/drivers/dri/r300/r300_render.c
+++ b/src/mesa/drivers/dri/r300/r300_render.c
@@ -190,7 +190,7 @@ static void r300_render_immediate_primitive(r300ContextPtr rmesa,
{
TNLcontext *tnl = TNL_CONTEXT(ctx);
struct vertex_buffer *VB = &tnl->vb;
- GLuint i;
+ GLuint i, render_inputs;
int k, type;
LOCAL_VARS
@@ -224,6 +224,13 @@ static void r300_render_immediate_primitive(r300ContextPtr rmesa,
return;
}
+ render_inputs = rmesa->state.render_inputs;
+
+ if(!render_inputs){
+ WARN_ONCE("Aeiee ! render_inputs==0. Skipping rendering.\n");
+ return;
+ }
+
start_immediate_packet(end-start, type, 4*rmesa->state.aos_count);
for(i=start;i<end;i++){
@@ -243,28 +250,28 @@ static void r300_render_immediate_primitive(r300ContextPtr rmesa,
/* coordinates */
- if(tnl->render_inputs & _TNL_BIT_POS)
+ if(render_inputs & _TNL_BIT_POS)
output_vector(VB->ObjPtr, i);
- if(tnl->render_inputs & _TNL_BIT_NORMAL)
+ if(render_inputs & _TNL_BIT_NORMAL)
output_vector(VB->NormalPtr, i);
/* color components */
- if(tnl->render_inputs & _TNL_BIT_COLOR0)
+ if(render_inputs & _TNL_BIT_COLOR0)
output_vector(VB->ColorPtr[0], i);
- if(tnl->render_inputs & _TNL_BIT_COLOR1)
+ if(render_inputs & _TNL_BIT_COLOR1)
output_vector(VB->SecondaryColorPtr[0], i);
- if(tnl->render_inputs & _TNL_BIT_FOG)
+ if(render_inputs & _TNL_BIT_FOG)
output_vector(VB->FogCoordPtr, i);
/* texture coordinates */
for(k=0;k < ctx->Const.MaxTextureUnits;k++)
- if(tnl->render_inputs & (_TNL_BIT_TEX0<<k))
+ if(render_inputs & (_TNL_BIT_TEX0<<k))
output_vector(VB->TexCoordPtr[k], i);
- if(tnl->render_inputs & _TNL_BIT_INDEX)
+ if(render_inputs & _TNL_BIT_INDEX)
output_vector(VB->IndexPtr[0], i);
- if(tnl->render_inputs & _TNL_BIT_POINTSIZE)
+ if(render_inputs & _TNL_BIT_POINTSIZE)
output_vector(VB->PointSizePtr, i);
}
@@ -290,12 +297,12 @@ static GLboolean r300_run_immediate_render(GLcontext *ctx,
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);
/* Make sure we have enough space */
- #else 0
+ #else
/* Count is very imprecize, but should be good upper bound */
r300EnsureCmdBufSpace(rmesa, rmesa->hw.max_state_size + 4+2+30
+VB->PrimitiveCount*(1+8)+VB->Count*4*rmesa->state.texture.tc_count+4, __FUNCTION__);