summaryrefslogtreecommitdiffstats
path: root/src/mesa/tnl
diff options
context:
space:
mode:
authorKeith Whitwell <[email protected]>2001-05-03 16:49:27 +0000
committerKeith Whitwell <[email protected]>2001-05-03 16:49:27 +0000
commit652a14a2153baf011a9347c6a8820e15ebf9aa2d (patch)
treece3a82fb53dd3c0fba9391d627cbe727f49ef00e /src/mesa/tnl
parenta03463303dce5526f9439f704b28625329bde554 (diff)
fix for moebius infinite loop
Diffstat (limited to 'src/mesa/tnl')
-rw-r--r--src/mesa/tnl/t_imm_dlist.c10
-rw-r--r--src/mesa/tnl/t_imm_exec.c67
-rw-r--r--src/mesa/tnl/t_imm_exec.h15
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 );