diff options
author | Keith Whitwell <[email protected]> | 2001-05-03 16:49:27 +0000 |
---|---|---|
committer | Keith Whitwell <[email protected]> | 2001-05-03 16:49:27 +0000 |
commit | 652a14a2153baf011a9347c6a8820e15ebf9aa2d (patch) | |
tree | ce3a82fb53dd3c0fba9391d627cbe727f49ef00e /src/mesa/tnl | |
parent | a03463303dce5526f9439f704b28625329bde554 (diff) |
fix for moebius infinite loop
Diffstat (limited to 'src/mesa/tnl')
-rw-r--r-- | src/mesa/tnl/t_imm_dlist.c | 10 | ||||
-rw-r--r-- | src/mesa/tnl/t_imm_exec.c | 67 | ||||
-rw-r--r-- | src/mesa/tnl/t_imm_exec.h | 15 |
3 files changed, 59 insertions, 33 deletions
diff --git a/src/mesa/tnl/t_imm_dlist.c b/src/mesa/tnl/t_imm_dlist.c index 9af32dad0f6..598b9d09061 100644 --- a/src/mesa/tnl/t_imm_dlist.c +++ b/src/mesa/tnl/t_imm_dlist.c @@ -1,4 +1,4 @@ -/* $Id: t_imm_dlist.c,v 1.15 2001/04/30 21:08:52 keithw Exp $ */ +/* $Id: t_imm_dlist.c,v 1.16 2001/05/03 16:49:27 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -145,12 +145,12 @@ _tnl_compile_cassette( GLcontext *ctx, struct immediate *IM ) im->ref_count--; /* remove CURRENT_IM reference */ ASSERT(im->ref_count > 0); /* it is compiled into a display list */ SET_IMMEDIATE( ctx, new_im ); - _tnl_reset_input( ctx, IMM_MAX_COPIED_VERTS, - new_beginstate, node->SavedBeginState ); + _tnl_reset_compile_input( ctx, IMM_MAX_COPIED_VERTS, + new_beginstate, node->SavedBeginState ); } else { /* Still some room in the current immediate. */ - _tnl_reset_input( ctx, im->Count+1+IMM_MAX_COPIED_VERTS, + _tnl_reset_compile_input( ctx, im->Count+1+IMM_MAX_COPIED_VERTS, new_beginstate, node->SavedBeginState); } } @@ -299,7 +299,7 @@ _tnl_EndList( GLcontext *ctx ) SET_IMMEDIATE( ctx, IM ); IM->ref_count++; - _tnl_reset_input( ctx, IMM_MAX_COPIED_VERTS, 0, 0 ); + _tnl_reset_exec_input( ctx, IMM_MAX_COPIED_VERTS, 0, 0 ); } diff --git a/src/mesa/tnl/t_imm_exec.c b/src/mesa/tnl/t_imm_exec.c index c61e533d88a..25de9a2af3c 100644 --- a/src/mesa/tnl/t_imm_exec.c +++ b/src/mesa/tnl/t_imm_exec.c @@ -1,4 +1,4 @@ -/* $Id: t_imm_exec.c,v 1.20 2001/05/01 13:15:28 keithw Exp $ */ +/* $Id: t_imm_exec.c,v 1.21 2001/05/03 16:49:27 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -57,12 +57,11 @@ -void _tnl_reset_input( GLcontext *ctx, - GLuint start, - GLuint beginstate, - GLuint savedbeginstate ) +static void reset_input( GLcontext *ctx, + GLuint start, + GLuint beginstate, + GLuint savedbeginstate ) { - TNLcontext *tnl = TNL_CONTEXT(ctx); struct immediate *IM = TNL_CURRENT_IM(ctx); /* Clear the dirty part of the flag array. @@ -70,23 +69,12 @@ void _tnl_reset_input( GLcontext *ctx, if (start < IM->Count+2) MEMSET(IM->Flag + start, 0, sizeof(GLuint) * (IM->Count+2-start)); - IM->Start = IM->Count = start; - IM->CopyStart = IM->Start - tnl->ExecCopyCount; - IM->Primitive[IM->CopyStart] = ctx->Driver.CurrentExecPrimitive; - if (tnl->ExecParity) - IM->Primitive[IM->CopyStart] |= PRIM_PARITY; - - if (ctx->Driver.CurrentExecPrimitive == GL_POLYGON+1) { - ASSERT(tnl->ExecCopyTexSize == 0); - ASSERT(tnl->ExecCopyCount == 0); - ASSERT(IM->CopyStart == IM->Start); - } - - IM->LastPrimitive = IM->CopyStart; + IM->Start = start; + IM->Count = start; + IM->LastMaterial = start; IM->BeginState = beginstate; IM->SavedBeginState = savedbeginstate; IM->TexSize = 0; - IM->LastMaterial = IM->Start; IM->MaterialOrMask = 0; if (IM->MaterialMask) @@ -96,6 +84,39 @@ void _tnl_reset_input( GLcontext *ctx, IM->ArrayEltIncr = ctx->Array.Vertex.Enabled ? 1 : 0; IM->ArrayEltFlush = !ctx->Array.LockCount; } + +void _tnl_reset_exec_input( GLcontext *ctx, + GLuint start, + GLuint beginstate, + GLuint savedbeginstate ) +{ + TNLcontext *tnl = TNL_CONTEXT(ctx); + struct immediate *IM = TNL_CURRENT_IM(ctx); + + reset_input( ctx, start, beginstate, savedbeginstate ); + + IM->CopyStart = start - tnl->ExecCopyCount; + IM->Primitive[IM->CopyStart] = ctx->Driver.CurrentExecPrimitive; + if (tnl->ExecParity) + IM->Primitive[IM->CopyStart] |= PRIM_PARITY; + + IM->LastPrimitive = IM->CopyStart; +} + + +void _tnl_reset_compile_input( GLcontext *ctx, + GLuint start, + GLuint beginstate, + GLuint savedbeginstate ) +{ + struct immediate *IM = TNL_CURRENT_IM(ctx); + + reset_input( ctx, start, beginstate, savedbeginstate ); + IM->CopyStart = start; + IM->LastPrimitive = IM->Start; +} + + @@ -462,8 +483,8 @@ void _tnl_execute_cassette( GLcontext *ctx, struct immediate *IM ) IM->ref_count++; - _tnl_reset_input( ctx, IMM_MAX_COPIED_VERTS, - begin_state, saved_begin_state ); + _tnl_reset_exec_input( ctx, IMM_MAX_COPIED_VERTS, + begin_state, saved_begin_state ); } if (ctx->Driver.CurrentExecPrimitive == GL_POLYGON+1) @@ -522,7 +543,7 @@ void _tnl_imm_init( GLcontext *ctx ) /* Install the first immediate. Intially outside begin/end. */ - _tnl_reset_input( ctx, IMM_MAX_COPIED_VERTS, 0, 0 ); + _tnl_reset_exec_input( ctx, IMM_MAX_COPIED_VERTS, 0, 0 ); tnl->ReplayHardBeginEnd = 0; _tnl_imm_vtxfmt_init( ctx ); diff --git a/src/mesa/tnl/t_imm_exec.h b/src/mesa/tnl/t_imm_exec.h index 8cdede46f01..cac53844e85 100644 --- a/src/mesa/tnl/t_imm_exec.h +++ b/src/mesa/tnl/t_imm_exec.h @@ -1,4 +1,4 @@ -/* $Id: t_imm_exec.h,v 1.4 2001/03/12 00:48:43 gareth Exp $ */ +/* $Id: t_imm_exec.h,v 1.5 2001/05/03 16:49:27 keithw Exp $ */ /* * Mesa 3-D graphics library @@ -52,10 +52,15 @@ extern void _tnl_imm_init( GLcontext *ctx ); extern void _tnl_imm_destroy( GLcontext *ctx ); -extern void _tnl_reset_input( GLcontext *ctx, - GLuint start, - GLuint beginstate, - GLuint savedbeginstate ); +extern void _tnl_reset_exec_input( GLcontext *ctx, + GLuint start, + GLuint beginstate, + GLuint savedbeginstate ); + +extern void _tnl_reset_compile_input( GLcontext *ctx, + GLuint start, + GLuint beginstate, + GLuint savedbeginstate ); extern void _tnl_compute_orflag( struct immediate *IM ); extern void _tnl_execute_cassette( GLcontext *ctx, struct immediate *IM ); |