summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/drivers/common/t_dd_vb.c16
-rw-r--r--src/mesa/tnl/t_eval_api.c10
-rw-r--r--src/mesa/tnl/t_imm_dlist.c6
-rw-r--r--src/mesa/tnl/t_imm_eval.c6
-rw-r--r--src/mesa/tnl/t_imm_exec.c8
-rw-r--r--src/mesa/tnl/t_imm_fixup.c38
6 files changed, 60 insertions, 24 deletions
diff --git a/src/mesa/drivers/common/t_dd_vb.c b/src/mesa/drivers/common/t_dd_vb.c
index 95cc0a27b14..b6285cd258a 100644
--- a/src/mesa/drivers/common/t_dd_vb.c
+++ b/src/mesa/drivers/common/t_dd_vb.c
@@ -1,4 +1,4 @@
-/* $Id: t_dd_vb.c,v 1.14 2001/05/09 15:34:08 keithw Exp $ */
+/* $Id: t_dd_vb.c,v 1.15 2001/05/14 09:00:52 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -313,16 +313,16 @@ INTERP_QUALIFIER void TAG(copy_pv_extras)( GLcontext *ctx,
GLuint dst, GLuint src )
{
LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
+ struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
if (VB->ColorPtr[1]) {
- COPY_4FV( GET_COLOR(VB->ColorPtr[1], dst),
- GET_COLOR(VB->ColorPtr[1], src) );
+ COPY_4FV( GET_COLOR(VB->ColorPtr[1], dst),
+ GET_COLOR(VB->ColorPtr[1], src) );
- if (VB->SecondaryColorPtr[1]) {
- COPY_4FV( GET_COLOR(VB->SecondaryColorPtr[1], dst),
- GET_COLOR(VB->SecondaryColorPtr[1], src) );
- }
+ if (VB->SecondaryColorPtr[1]) {
+ COPY_4FV( GET_COLOR(VB->SecondaryColorPtr[1], dst),
+ GET_COLOR(VB->SecondaryColorPtr[1], src) );
+ }
}
COPY_PV_VERTEX(ctx, dst, src);
diff --git a/src/mesa/tnl/t_eval_api.c b/src/mesa/tnl/t_eval_api.c
index 837fb9e09cb..75e73fb9cb7 100644
--- a/src/mesa/tnl/t_eval_api.c
+++ b/src/mesa/tnl/t_eval_api.c
@@ -1,4 +1,4 @@
-/* $Id: t_eval_api.c,v 1.6 2001/05/01 13:18:03 keithw Exp $ */
+/* $Id: t_eval_api.c,v 1.7 2001/05/14 09:00:51 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -89,6 +89,14 @@ _tnl_exec_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
*
* TODO: Anaylse display lists to determine if this state is
* constant.
+ *
+ * State to watch:
+ * - enabled maps
+ * - map state for each enabled map, including control points
+ * - grid state
+ *
+ * Could alternatively cache individual maps in arrays, rather than
+ * building immediates.
*/
{
GLboolean compiling = ctx->CompileFlag;
diff --git a/src/mesa/tnl/t_imm_dlist.c b/src/mesa/tnl/t_imm_dlist.c
index 7cb947a72c5..c9d375831e4 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.18 2001/05/11 15:53:06 keithw Exp $ */
+/* $Id: t_imm_dlist.c,v 1.19 2001/05/14 09:00:51 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -150,6 +150,8 @@ execute_compiled_cassette( GLcontext *ctx, void *data )
TNLvertexcassette *node = (TNLvertexcassette *)data;
struct immediate *IM = node->IM;
+/* fprintf(stderr, "%s\n", __FUNCTION__); */
+
if (ctx->NewState)
_mesa_update_state(ctx);
@@ -265,8 +267,6 @@ _tnl_EndList( GLcontext *ctx )
{
struct immediate *IM = TNL_CURRENT_IM(ctx);
-/* fprintf(stderr, "%s\n", __FUNCTION__); */
-
ctx->swtnl_im = 0;
IM->ref_count--;
diff --git a/src/mesa/tnl/t_imm_eval.c b/src/mesa/tnl/t_imm_eval.c
index 324c04b25f5..f6d33dfa1a4 100644
--- a/src/mesa/tnl/t_imm_eval.c
+++ b/src/mesa/tnl/t_imm_eval.c
@@ -1,4 +1,4 @@
-/* $Id: t_imm_eval.c,v 1.12 2001/05/09 11:06:30 keithw Exp $ */
+/* $Id: t_imm_eval.c,v 1.13 2001/05/14 09:00:51 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -22,6 +22,10 @@
* BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ * Keith Whitwell <[email protected]>
+ *
*/
diff --git a/src/mesa/tnl/t_imm_exec.c b/src/mesa/tnl/t_imm_exec.c
index d011bff5133..7ed76b02e53 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.24 2001/05/11 08:11:31 keithw Exp $ */
+/* $Id: t_imm_exec.c,v 1.25 2001/05/14 09:00:51 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -82,7 +82,7 @@ static void reset_input( GLcontext *ctx,
IM->ArrayEltFlags = ~ctx->Array._Enabled;
IM->ArrayEltIncr = ctx->Array.Vertex.Enabled ? 1 : 0;
- IM->ArrayEltFlush = !ctx->Array.LockCount;
+ IM->ArrayEltFlush = ctx->Array.LockCount ? FLUSH_ELT_LAZY : FLUSH_ELT_EAGER;
}
void _tnl_reset_exec_input( GLcontext *ctx,
@@ -377,7 +377,7 @@ static void exec_vert_cassette( GLcontext *ctx, struct immediate *IM )
if (IM->FlushElt) {
/* Orflag is computed twice, but only reach this code if app is
* using a mixture of glArrayElement() and glVertex() while
- * arrays are locked.
+ * arrays are locked (else would be in exec_elt_cassette now).
*/
ASSERT(ctx->Array.LockCount);
ASSERT(IM->FlushElt == FLUSH_ELT_LAZY);
@@ -440,7 +440,7 @@ void _tnl_execute_cassette( GLcontext *ctx, struct immediate *IM )
TNLcontext *tnl = TNL_CONTEXT(ctx);
_tnl_compute_orflag( IM, IM->Start );
- _tnl_copy_immediate_vertices( ctx, IM ); /* ?? flags, orflag above */
+ _tnl_copy_immediate_vertices( ctx, IM );
_tnl_get_exec_copy_verts( ctx, IM );
if (tnl->pipeline.build_state_changes)
diff --git a/src/mesa/tnl/t_imm_fixup.c b/src/mesa/tnl/t_imm_fixup.c
index 53005852811..ea51850e21c 100644
--- a/src/mesa/tnl/t_imm_fixup.c
+++ b/src/mesa/tnl/t_imm_fixup.c
@@ -1,4 +1,4 @@
-/* $Id: t_imm_fixup.c,v 1.16 2001/05/11 15:53:06 keithw Exp $ */
+/* $Id: t_imm_fixup.c,v 1.17 2001/05/14 09:00:51 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -364,6 +364,18 @@ static void copy_material( struct immediate *next,
MEMCPY(next->Material[dst], prev->Material[src], 2*sizeof(GLmaterial));
}
+static GLboolean is_fan_like[GL_POLYGON+1] = {
+ GL_FALSE,
+ GL_FALSE,
+ GL_FALSE,
+ GL_TRUE, /* line loop */
+ GL_FALSE,
+ GL_FALSE,
+ GL_TRUE, /* tri fan */
+ GL_FALSE,
+ GL_FALSE,
+ GL_TRUE /* polygon */
+};
/* Copy the untransformed data from the shared vertices of a primitive
@@ -412,8 +424,21 @@ void _tnl_copy_immediate_vertices( GLcontext *ctx, struct immediate *next )
/* prev->CopyOrFlag is hacked to include values generated by eval:
*/
GLuint copy = tnl->pipeline.inputs & prev->CopyOrFlag;
-
- next->TexSize |= tnl->ExecCopyTexSize;
+ GLuint flag;
+
+ if (is_fan_like[ctx->Driver.CurrentExecPrimitive]) {
+ next->TexSize |= tnl->ExecCopyTexSize;
+ next->CopyOrFlag |= (prev->CopyOrFlag & VERT_FIXUP);
+ next->CopyAndFlag &= (prev->CopyOrFlag & VERT_FIXUP);
+ flag = (prev->CopyOrFlag & VERT_FIXUP);
+ }
+ else {
+ /* Don't let an early 'glColor', etc. poison the elt path.
+ */
+ next->CopyAndFlag &= (prev->OrFlag & VERT_FIXUP);
+ flag = (prev->OrFlag & VERT_FIXUP);
+ }
+
/* Copy whole vertices
*/
@@ -464,11 +489,10 @@ void _tnl_copy_immediate_vertices( GLcontext *ctx, struct immediate *next )
next->FogCoord[dst] = prev->FogCoord[src];
}
- next->Flag[dst] = (prev->CopyOrFlag & VERT_FIXUP);
+ next->Flag[dst] = flag;
+ next->OrFlag |= prev->Flag[src]; /* for non-fanlike prims,
+ otherwise redundant */
}
-
- next->CopyOrFlag |= (prev->CopyOrFlag & VERT_FIXUP);
- next->CopyAndFlag &= (prev->CopyOrFlag & VERT_FIXUP);
}
if (--tnl->ExecCopySource->ref_count == 0)