summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/main/macros.h173
-rw-r--r--src/mesa/tnl/t_context.h5
-rw-r--r--src/mesa/tnl/t_vtx_api.c17
3 files changed, 103 insertions, 92 deletions
diff --git a/src/mesa/main/macros.h b/src/mesa/main/macros.h
index 4370a580751..67e4de9239a 100644
--- a/src/mesa/main/macros.h
+++ b/src/mesa/main/macros.h
@@ -5,9 +5,9 @@
/*
* Mesa 3-D graphics library
- * Version: 4.0.3
+ * Version: 6.0
*
- * Copyright (C) 1999-2002 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -159,8 +159,8 @@ do { \
/** Copy a 4-element unsigned byte vector */
#if defined(__i386__)
-#define COPY_4UBV(DST, SRC) \
-do { \
+#define COPY_4UBV(DST, SRC) \
+do { \
*((GLuint*)(DST)) = *((GLuint*)(SRC)); \
} while (0)
#else
@@ -185,27 +185,27 @@ do { \
/** Copy \p SZ elements into a 4-element vector */
-#define COPY_SZ_4V(DST, SZ, SRC) \
-do { \
- switch (SZ) { \
- case 4: (DST)[3] = (SRC)[3]; \
- case 3: (DST)[2] = (SRC)[2]; \
- case 2: (DST)[1] = (SRC)[1]; \
- case 1: (DST)[0] = (SRC)[0]; \
- } \
+#define COPY_SZ_4V(DST, SZ, SRC) \
+do { \
+ switch (SZ) { \
+ case 4: (DST)[3] = (SRC)[3]; \
+ case 3: (DST)[2] = (SRC)[2]; \
+ case 2: (DST)[1] = (SRC)[1]; \
+ case 1: (DST)[0] = (SRC)[0]; \
+ } \
} while(0)
/** Copy \p SZ elements into a homegeneous (4-element) vector, giving
* default values to the remaining */
-#define COPY_CLEAN_4V(DST, SZ, SRC) \
-do { \
- ASSIGN_4V( DST, 0, 0, 0, 1 ); \
- COPY_SZ_4V( DST, SZ, SRC ); \
+#define COPY_CLEAN_4V(DST, SZ, SRC) \
+do { \
+ ASSIGN_4V( DST, 0, 0, 0, 1 ); \
+ COPY_SZ_4V( DST, SZ, SRC ); \
} while (0)
/** Subtraction */
-#define SUB_4V( DST, SRCA, SRCB ) \
-do { \
+#define SUB_4V( DST, SRCA, SRCB ) \
+do { \
(DST)[0] = (SRCA)[0] - (SRCB)[0]; \
(DST)[1] = (SRCA)[1] - (SRCB)[1]; \
(DST)[2] = (SRCA)[2] - (SRCB)[2]; \
@@ -213,8 +213,8 @@ do { \
} while (0)
/** Addition */
-#define ADD_4V( DST, SRCA, SRCB ) \
-do { \
+#define ADD_4V( DST, SRCA, SRCB ) \
+do { \
(DST)[0] = (SRCA)[0] + (SRCB)[0]; \
(DST)[1] = (SRCA)[1] + (SRCB)[1]; \
(DST)[2] = (SRCA)[2] + (SRCB)[2]; \
@@ -222,8 +222,8 @@ do { \
} while (0)
/** Element-wise multiplication */
-#define SCALE_4V( DST, SRCA, SRCB ) \
-do { \
+#define SCALE_4V( DST, SRCA, SRCB ) \
+do { \
(DST)[0] = (SRCA)[0] * (SRCB)[0]; \
(DST)[1] = (SRCA)[1] * (SRCB)[1]; \
(DST)[2] = (SRCA)[2] * (SRCB)[2]; \
@@ -232,7 +232,7 @@ do { \
/** In-place addition */
#define ACC_4V( DST, SRC ) \
-do { \
+do { \
(DST)[0] += (SRC)[0]; \
(DST)[1] += (SRC)[1]; \
(DST)[2] += (SRC)[2]; \
@@ -241,7 +241,7 @@ do { \
/** Element-wise multiplication and addition */
#define ACC_SCALE_4V( DST, SRCA, SRCB ) \
-do { \
+do { \
(DST)[0] += (SRCA)[0] * (SRCB)[0]; \
(DST)[1] += (SRCA)[1] * (SRCB)[1]; \
(DST)[2] += (SRCA)[2] * (SRCB)[2]; \
@@ -250,16 +250,16 @@ do { \
/** In-place scalar multiplication and addition */
#define ACC_SCALE_SCALAR_4V( DST, S, SRCB ) \
-do { \
- (DST)[0] += S * (SRCB)[0]; \
- (DST)[1] += S * (SRCB)[1]; \
- (DST)[2] += S * (SRCB)[2]; \
- (DST)[3] += S * (SRCB)[3]; \
+do { \
+ (DST)[0] += S * (SRCB)[0]; \
+ (DST)[1] += S * (SRCB)[1]; \
+ (DST)[2] += S * (SRCB)[2]; \
+ (DST)[3] += S * (SRCB)[3]; \
} while (0)
/** Scalar multiplication */
-#define SCALE_SCALAR_4V( DST, S, SRCB ) \
-do { \
+#define SCALE_SCALAR_4V( DST, S, SRCB ) \
+do { \
(DST)[0] = S * (SRCB)[0]; \
(DST)[1] = S * (SRCB)[1]; \
(DST)[2] = S * (SRCB)[2]; \
@@ -267,21 +267,21 @@ do { \
} while (0)
/** In-place scalar multiplication */
-#define SELF_SCALE_SCALAR_4V( DST, S ) \
-do { \
- (DST)[0] *= S; \
- (DST)[1] *= S; \
- (DST)[2] *= S; \
- (DST)[3] *= S; \
+#define SELF_SCALE_SCALAR_4V( DST, S ) \
+do { \
+ (DST)[0] *= S; \
+ (DST)[1] *= S; \
+ (DST)[2] *= S; \
+ (DST)[3] *= S; \
} while (0)
/** Assignment */
-#define ASSIGN_4V( V, V0, V1, V2, V3 ) \
-do { \
- V[0] = V0; \
- V[1] = V1; \
- V[2] = V2; \
- V[3] = V3; \
+#define ASSIGN_4V( V, V0, V1, V2, V3 ) \
+do { \
+ V[0] = V0; \
+ V[1] = V1; \
+ V[2] = V2; \
+ V[3] = V3; \
} while(0)
/*@}*/
@@ -295,62 +295,63 @@ do { \
#define ZERO_3V( DST ) (DST)[0] = (DST)[1] = (DST)[2] = 0
/** Test for equality */
-#define TEST_EQ_3V(a,b) ((a)[0] == (b)[0] && \
- (a)[1] == (b)[1] && \
- (a)[2] == (b)[2])
+#define TEST_EQ_3V(a,b) \
+ ((a)[0] == (b)[0] && \
+ (a)[1] == (b)[1] && \
+ (a)[2] == (b)[2])
/** Copy a 3-element vector */
#define COPY_3V( DST, SRC ) \
-do { \
+do { \
(DST)[0] = (SRC)[0]; \
(DST)[1] = (SRC)[1]; \
(DST)[2] = (SRC)[2]; \
} while (0)
/** Copy a 3-element vector with cast */
-#define COPY_3V_CAST( DST, SRC, CAST ) \
-do { \
+#define COPY_3V_CAST( DST, SRC, CAST ) \
+do { \
(DST)[0] = (CAST)(SRC)[0]; \
(DST)[1] = (CAST)(SRC)[1]; \
(DST)[2] = (CAST)(SRC)[2]; \
} while (0)
/** Copy a 3-element float vector */
-#define COPY_3FV( DST, SRC ) \
-do { \
- const GLfloat *_tmp = (SRC); \
+#define COPY_3FV( DST, SRC ) \
+do { \
+ const GLfloat *_tmp = (SRC); \
(DST)[0] = _tmp[0]; \
(DST)[1] = _tmp[1]; \
(DST)[2] = _tmp[2]; \
} while (0)
/** Subtraction */
-#define SUB_3V( DST, SRCA, SRCB ) \
-do { \
- (DST)[0] = (SRCA)[0] - (SRCB)[0]; \
- (DST)[1] = (SRCA)[1] - (SRCB)[1]; \
- (DST)[2] = (SRCA)[2] - (SRCB)[2]; \
+#define SUB_3V( DST, SRCA, SRCB ) \
+do { \
+ (DST)[0] = (SRCA)[0] - (SRCB)[0]; \
+ (DST)[1] = (SRCA)[1] - (SRCB)[1]; \
+ (DST)[2] = (SRCA)[2] - (SRCB)[2]; \
} while (0)
/** Addition */
#define ADD_3V( DST, SRCA, SRCB ) \
-do { \
- (DST)[0] = (SRCA)[0] + (SRCB)[0]; \
- (DST)[1] = (SRCA)[1] + (SRCB)[1]; \
- (DST)[2] = (SRCA)[2] + (SRCB)[2]; \
+do { \
+ (DST)[0] = (SRCA)[0] + (SRCB)[0]; \
+ (DST)[1] = (SRCA)[1] + (SRCB)[1]; \
+ (DST)[2] = (SRCA)[2] + (SRCB)[2]; \
} while (0)
/** In-place scalar multiplication */
#define SCALE_3V( DST, SRCA, SRCB ) \
-do { \
- (DST)[0] = (SRCA)[0] * (SRCB)[0]; \
- (DST)[1] = (SRCA)[1] * (SRCB)[1]; \
- (DST)[2] = (SRCA)[2] * (SRCB)[2]; \
+do { \
+ (DST)[0] = (SRCA)[0] * (SRCB)[0]; \
+ (DST)[1] = (SRCA)[1] * (SRCB)[1]; \
+ (DST)[2] = (SRCA)[2] * (SRCB)[2]; \
} while (0)
/** In-place element-wise multiplication */
-#define SELF_SCALE_3V( DST, SRC ) \
-do { \
+#define SELF_SCALE_3V( DST, SRC ) \
+do { \
(DST)[0] *= (SRC)[0]; \
(DST)[1] *= (SRC)[1]; \
(DST)[2] *= (SRC)[2]; \
@@ -358,7 +359,7 @@ do { \
/** In-place addition */
#define ACC_3V( DST, SRC ) \
-do { \
+do { \
(DST)[0] += (SRC)[0]; \
(DST)[1] += (SRC)[1]; \
(DST)[2] += (SRC)[2]; \
@@ -366,15 +367,15 @@ do { \
/** Element-wise multiplication and addition */
#define ACC_SCALE_3V( DST, SRCA, SRCB ) \
-do { \
+do { \
(DST)[0] += (SRCA)[0] * (SRCB)[0]; \
(DST)[1] += (SRCA)[1] * (SRCB)[1]; \
(DST)[2] += (SRCA)[2] * (SRCB)[2]; \
} while (0)
/** Scalar multiplication */
-#define SCALE_SCALAR_3V( DST, S, SRCB ) \
-do { \
+#define SCALE_SCALAR_3V( DST, S, SRCB ) \
+do { \
(DST)[0] = S * (SRCB)[0]; \
(DST)[1] = S * (SRCB)[1]; \
(DST)[2] = S * (SRCB)[2]; \
@@ -382,23 +383,23 @@ do { \
/** In-place scalar multiplication and addition */
#define ACC_SCALE_SCALAR_3V( DST, S, SRCB ) \
-do { \
- (DST)[0] += S * (SRCB)[0]; \
- (DST)[1] += S * (SRCB)[1]; \
- (DST)[2] += S * (SRCB)[2]; \
+do { \
+ (DST)[0] += S * (SRCB)[0]; \
+ (DST)[1] += S * (SRCB)[1]; \
+ (DST)[2] += S * (SRCB)[2]; \
} while (0)
/** In-place scalar multiplication */
-#define SELF_SCALE_SCALAR_3V( DST, S ) \
-do { \
- (DST)[0] *= S; \
- (DST)[1] *= S; \
- (DST)[2] *= S; \
+#define SELF_SCALE_SCALAR_3V( DST, S ) \
+do { \
+ (DST)[0] *= S; \
+ (DST)[1] *= S; \
+ (DST)[2] *= S; \
} while (0)
/** In-place scalar addition */
-#define ACC_SCALAR_3V( DST, S ) \
-do { \
+#define ACC_SCALAR_3V( DST, S ) \
+do { \
(DST)[0] += S; \
(DST)[1] += S; \
(DST)[2] += S; \
@@ -406,10 +407,10 @@ do { \
/** Assignment */
#define ASSIGN_3V( V, V0, V1, V2 ) \
-do { \
- V[0] = V0; \
- V[1] = V1; \
- V[2] = V2; \
+do { \
+ V[0] = V0; \
+ V[1] = V1; \
+ V[2] = V2; \
} while(0)
/*@}*/
diff --git a/src/mesa/tnl/t_context.h b/src/mesa/tnl/t_context.h
index 33c4e06985d..1d148be214d 100644
--- a/src/mesa/tnl/t_context.h
+++ b/src/mesa/tnl/t_context.h
@@ -83,6 +83,11 @@
#define MAX_PIPELINE_STAGES 30
+/*
+ * Note: The first attributes match the VERT_ATTRIB_* definitions
+ * in mtypes.h. However, the tnl module has additional attributes
+ * for materials, color indexes, edge flags, etc.
+ */
enum {
_TNL_ATTRIB_POS = 0,
_TNL_ATTRIB_WEIGHT = 1,
diff --git a/src/mesa/tnl/t_vtx_api.c b/src/mesa/tnl/t_vtx_api.c
index 482a316453c..36ba7b6dff6 100644
--- a/src/mesa/tnl/t_vtx_api.c
+++ b/src/mesa/tnl/t_vtx_api.c
@@ -107,13 +107,20 @@ static void _tnl_wrap_filled_vertex( GLcontext *ctx )
tnl->vtx.copied.nr = 0;
}
+
+/*
+ * Copy the active vertex's values to the ctx->Current fields.
+ */
static void _tnl_copy_to_current( GLcontext *ctx )
{
TNLcontext *tnl = TNL_CONTEXT(ctx);
GLuint i;
- for (i = _TNL_ATTRIB_POS+1 ; i <= _TNL_ATTRIB_INDEX ; i++)
+ for (i = _TNL_ATTRIB_POS+1 ; i <= _TNL_ATTRIB_INDEX ; i++)
if (tnl->vtx.attrsz[i]) {
+ /* Note: the tnl->vtx.current[i] pointers points to
+ * the ctx->Current fields. The first 16 or so, anyway.
+ */
ASSIGN_4V( tnl->vtx.current[i], 0, 0, 0, 1 );
COPY_SZ_4V(tnl->vtx.current[i],
tnl->vtx.attrsz[i],
@@ -166,9 +173,6 @@ static void _tnl_copy_from_current( GLcontext *ctx )
}
-
-
-
/* Flush existing data, set new attrib size, replay copied vertices.
*/
static void _tnl_wrap_upgrade_vertex( GLcontext *ctx,
@@ -1120,14 +1124,17 @@ void _tnl_FlushVertices( GLcontext *ctx, GLuint flags )
ctx->Driver.NeedFlush = 0;
}
+
static void _tnl_current_init( GLcontext *ctx )
{
TNLcontext *tnl = TNL_CONTEXT(ctx);
GLint i;
+ /* setup the pointers for the typical 16 vertex attributes */
for (i = 0; i < VERT_ATTRIB_MAX; i++)
tnl->vtx.current[i] = ctx->Current.Attrib[i];
+ /* setup pointers for the 12 material attributes */
for (i = 0; i < MAT_ATTRIB_MAX; i++)
tnl->vtx.current[_TNL_ATTRIB_MAT_FRONT_AMBIENT + i] =
ctx->Light.Material.Attrib[i];
@@ -1136,8 +1143,6 @@ static void _tnl_current_init( GLcontext *ctx )
}
-
-
void _tnl_vtx_init( GLcontext *ctx )
{
TNLcontext *tnl = TNL_CONTEXT(ctx);