summaryrefslogtreecommitdiff
path: root/src/mesa
diff options
context:
space:
mode:
authorKeith Whitwell <keith@tungstengraphics.com>2000-12-27 19:57:37 +0000
committerKeith Whitwell <keith@tungstengraphics.com>2000-12-27 19:57:37 +0000
commit719344b23ed7b1947af1db9281389f3fc74c3fc5 (patch)
treeed49176faf01d3d616466547a8b33b11d6cec4de /src/mesa
parent770169f230a197d969f64df76cfaee1f0e27874f (diff)
Fixes for compiling assembly (disable unused 'masked' versions)
Fixes for compiling without debug. Fix line clipping Fix unfilled polygon clipping (should be correct now).
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/swrast/s_context.c9
-rw-r--r--src/mesa/tnl/t_array_import.c5
-rw-r--r--src/mesa/tnl/t_vb_cliptmp.h130
-rw-r--r--src/mesa/tnl/t_vb_light.c4
-rw-r--r--src/mesa/tnl/t_vb_normals.c3
-rw-r--r--src/mesa/tnl/t_vb_render.c3
-rw-r--r--src/mesa/tnl/t_vb_rendertmp.h75
-rw-r--r--src/mesa/x86/3dnow.c10
-rw-r--r--src/mesa/x86/x86.c8
9 files changed, 144 insertions, 103 deletions
diff --git a/src/mesa/swrast/s_context.c b/src/mesa/swrast/s_context.c
index 63771d9b07..a1e30f5ccc 100644
--- a/src/mesa/swrast/s_context.c
+++ b/src/mesa/swrast/s_context.c
@@ -1,4 +1,4 @@
-/* $Id: s_context.c,v 1.8 2000/12/26 05:09:32 keithw Exp $ */
+/* $Id: s_context.c,v 1.9 2000/12/27 19:57:37 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -367,12 +367,17 @@ _swrast_Triangle( GLcontext *ctx, const SWvertex *v0,
void
_swrast_Line( GLcontext *ctx, const SWvertex *v0, const SWvertex *v1 )
{
+/* fprintf(stderr, "%s\n", __FUNCTION__); */
+/* _swrast_print_vertex( ctx, v0 ); */
+/* _swrast_print_vertex( ctx, v1 ); */
SWRAST_CONTEXT(ctx)->Line( ctx, v0, v1 );
}
void
_swrast_Point( GLcontext *ctx, const SWvertex *v0 )
{
+/* fprintf(stderr, "%s\n", __FUNCTION__); */
+/* _swrast_print_vertex( ctx, v0 ); */
SWRAST_CONTEXT(ctx)->Point( ctx, v0 );
}
@@ -474,7 +479,6 @@ void
_swrast_print_vertex( GLcontext *ctx, const SWvertex *v )
{
GLuint i;
- fprintf(stderr, "\n");
fprintf(stderr, "win %f %f %f %f\n",
v->win[0], v->win[1], v->win[2], v->win[3]);
@@ -491,4 +495,5 @@ _swrast_print_vertex( GLcontext *ctx, const SWvertex *v )
fprintf(stderr, "fog %f\n", v->fog);
fprintf(stderr, "index %d\n", v->index);
fprintf(stderr, "pointsize %f\n", v->pointSize);
+ fprintf(stderr, "\n");
}
diff --git a/src/mesa/tnl/t_array_import.c b/src/mesa/tnl/t_array_import.c
index 16a669dc28..1cfed06764 100644
--- a/src/mesa/tnl/t_array_import.c
+++ b/src/mesa/tnl/t_array_import.c
@@ -1,4 +1,4 @@
-/* $Id: t_array_import.c,v 1.1 2000/12/26 05:09:32 keithw Exp $ */
+/* $Id: t_array_import.c,v 1.2 2000/12/27 19:57:37 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -248,9 +248,10 @@ static void _tnl_upgrade_client_data( GLcontext *ctx,
{
GLuint i;
struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- struct vertex_arrays *inputs = &TNL_CONTEXT(ctx)->array_inputs;
GLboolean writeable = (flags & VEC_NOT_WRITEABLE) != 0;
GLboolean stride = (flags & VEC_BAD_STRIDE) != 0;
+ struct vertex_arrays *inputs = &TNL_CONTEXT(ctx)->array_inputs;
+ (void) inputs;
if ((required & VERT_CLIP) && VB->ClipPtr == VB->ObjPtr)
required |= VERT_OBJ;
diff --git a/src/mesa/tnl/t_vb_cliptmp.h b/src/mesa/tnl/t_vb_cliptmp.h
index 8a73e87de3..34f0a4f1e1 100644
--- a/src/mesa/tnl/t_vb_cliptmp.h
+++ b/src/mesa/tnl/t_vb_cliptmp.h
@@ -1,4 +1,4 @@
-/* $Id: t_vb_cliptmp.h,v 1.1 2000/12/26 05:09:33 keithw Exp $ */
+/* $Id: t_vb_cliptmp.h,v 1.2 2000/12/27 19:57:37 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -60,10 +60,14 @@ static GLuint TAG(userclip_line)( GLcontext *ctx,
if (flagI ^ flagJ) {
if (flagJ) {
GLfloat t = dpI / (dpI - dpJ);
+ VB->ClipMask[jj] |= CLIP_USER_BIT;
jj = interp( ctx, t, ii, jj, GL_FALSE );
+ VB->ClipMask[jj] = 0;
} else {
GLfloat t = dpJ / (dpJ - dpI);
+ VB->ClipMask[ii] |= CLIP_USER_BIT;
ii = interp( ctx, t, jj, ii, GL_FALSE );
+ VB->ClipMask[ii] = 0;
}
}
else if (flagI)
@@ -86,8 +90,15 @@ static GLuint TAG(userclip_polygon)( GLcontext *ctx,
GLfloat (*coord)[4] = VB->ClipPtr->data;
GLuint vlist2[MAX_CLIPPED_VERTICES];
GLuint *inlist = vlist, *outlist = vlist2;
+ GLubyte *clipmask = VB->ClipMask;
GLuint p;
-
+
+#define CLIP_DOTPROD(xx) d*W(xx) + c*Z(xx) + b*Y(xx) + a*X(xx)
+
+ /* Can be speeded up to if vertex_stage actually saves the
+ * UserClipMask, and if it is used in this loop (after computing a
+ * UserClipOrMask).
+ */
for (p=0;p<MAX_CLIP_PLANES;p++) {
if (ctx->Transform.ClipEnabled[p]) {
register float a = ctx->Transform._ClipUserPlane[p][0];
@@ -96,47 +107,63 @@ static GLuint TAG(userclip_polygon)( GLcontext *ctx,
register float d = ctx->Transform._ClipUserPlane[p][3];
/* initialize prev to be last in the input list */
- GLuint prevj = inlist[0];
- GLfloat dpJ = d*W(prevj) + c*Z(prevj) + b*Y(prevj) + a*X(prevj);
+ GLuint idxPrev = inlist[n-1];
+ GLfloat dpPrev = CLIP_DOTPROD(idxPrev);
GLuint outcount = 0;
- GLuint curri;
-
- inlist[n] = inlist[0];
-
- for (curri=1;curri<n+1;curri++) { GLuint currj = inlist[curri];
- GLfloat dpI = d*W(currj) + c*Z(currj) + b*Y(currj) + a*X(currj);
-
- if (!NEGATIVE(dpJ)) {
- outlist[outcount++] = prevj;
- VB->ClipMask[prevj] &= ~CLIP_USER_BIT;
+ GLuint i;
+
+ for (i = 0 ; i < n ; i++) {
+ GLuint idx = inlist[i];
+ GLfloat dp = CLIP_DOTPROD(idx);
+
+ if (!NEGATIVE(dpPrev)) {
+ outlist[outcount++] = idxPrev;
+ clipmask[idxPrev] &= ~CLIP_USER_BIT;
} else {
- VB->ClipMask[prevj] |= CLIP_USER_BIT;
+ clipmask[idxPrev] |= CLIP_USER_BIT;
}
- if (DIFFERENT_SIGNS(dpI, dpJ)) {
- if (NEGATIVE(dpI)) {
- GLfloat t = dpI/(dpI-dpJ);
- outlist[outcount++] = interp( ctx, t, currj, prevj, GL_TRUE);
+
+ if (DIFFERENT_SIGNS(dp, dpPrev)) {
+ GLuint newvert;
+ if (NEGATIVE(dp)) {
+ /* Going out of bounds. Avoid division by zero as we
+ * know dp != dpPrev from DIFFERENT_SIGNS, above.
+ */
+ GLfloat t = dp / (dp - dpPrev);
+ newvert = interp( ctx, t, idx, idxPrev, GL_TRUE );
+/* fprintf(stderr,"Goint out: in: %d/%d out: %d/%d new: %d/%d\n", */
+/* idxPrev, VB->EdgeFlagPtr->data[idxPrev], */
+/* idx, VB->EdgeFlagPtr->data[idx], */
+/* newvert, VB->EdgeFlagPtr->data[newvert]); */
} else {
- GLfloat t = dpJ/(dpJ-dpI);
- outlist[outcount++] = interp( ctx, t, prevj, currj, GL_FALSE);
- }
+ /* Coming back in.
+ */
+ GLfloat t = dpPrev / (dpPrev - dp);
+ newvert = interp( ctx, t, idxPrev, idx, GL_FALSE );
+/* fprintf(stderr,"coming in: in: %d/%d out: %d/%d new: %d/%d\n", */
+/* idx, VB->EdgeFlagPtr->data[idx], */
+/* idxPrev, VB->EdgeFlagPtr->data[idxPrev], */
+/* newvert, VB->EdgeFlagPtr->data[newvert]); */
+ }
+ clipmask[newvert] = 0;
+ outlist[outcount++] = newvert;
}
-
- prevj = currj;
- dpJ = dpI;
- }
+
+ idxPrev = idx;
+ dpPrev = dp;
+ }
if (outcount < 3)
return 0;
- else {
+
+ {
GLuint *tmp;
tmp = inlist;
inlist = outlist;
outlist = tmp;
n = outcount;
}
-
} /* if */
} /* for p */
@@ -146,6 +173,10 @@ static GLuint TAG(userclip_polygon)( GLcontext *ctx,
vlist[i] = inlist[i];
}
+/* fprintf(stderr, "%s: finally:\n", __FUNCTION__); */
+/* for (i = 0 ; i < n ; i++) */
+/* fprintf(stderr, "%d: %d\n", vlist[i], VB->EdgeFlagPtr->data[vlist[i]]); */
+
return n;
}
@@ -168,25 +199,29 @@ static void TAG(viewclip_line)( GLcontext *ctx,
/*
* We use 6 instances of this code to clip against the 6 planes.
*/
-#define GENERAL_CLIP \
- if (mask & PLANE) { \
- GLfloat dpI = CLIP_DOTPROD( ii ); \
- GLfloat dpJ = CLIP_DOTPROD( jj ); \
- \
- if (DIFFERENT_SIGNS(dpI, dpJ)) { \
- if (NEGATIVE(dpJ)) { \
- GLfloat t = dpI / (dpI - dpJ); \
- jj = interp( ctx, t, ii, jj, GL_FALSE ); \
- } else { \
- GLfloat t = dpJ / (dpJ - dpI); \
- ii = interp( ctx, t, jj, ii, GL_FALSE ); \
- } \
- } \
- else if (NEGATIVE(dpI)) \
- return; \
- }
-
+#define GENERAL_CLIP \
+ if (mask & PLANE) { \
+ GLfloat dpI = CLIP_DOTPROD( ii ); \
+ GLfloat dpJ = CLIP_DOTPROD( jj ); \
+ \
+ if (DIFFERENT_SIGNS(dpI, dpJ)) { \
+ if (NEGATIVE(dpJ)) { \
+ GLfloat t = dpI / (dpI - dpJ); \
+ VB->ClipMask[jj] |= PLANE; \
+ jj = interp( ctx, t, ii, jj, GL_FALSE ); \
+ VB->ClipMask[jj] = 0; \
+ } else { \
+ GLfloat t = dpJ / (dpJ - dpI); \
+ VB->ClipMask[ii] |= PLANE; \
+ ii = interp( ctx, t, jj, ii, GL_FALSE ); \
+ VB->ClipMask[ii] = 0; \
+ } \
+ } \
+ else if (NEGATIVE(dpI)) \
+ return; \
+ }
+#undef CLIP_DOTPROD
#define PLANE CLIP_RIGHT_BIT
#define CLIP_DOTPROD(K) (- X(K) + W(K))
@@ -271,11 +306,12 @@ static void TAG(viewclip_line)( GLcontext *ctx,
}
}
- if (ctx->Driver.BuildProjectedVertices)
+ if (ctx->Driver.BuildProjectedVertices)
ctx->Driver.BuildProjectedVertices(ctx,
VB->FirstClipped,
VB->LastClipped,
~0);
+
/* Render the new line.
*/
diff --git a/src/mesa/tnl/t_vb_light.c b/src/mesa/tnl/t_vb_light.c
index b55cda3858..043eb7302f 100644
--- a/src/mesa/tnl/t_vb_light.c
+++ b/src/mesa/tnl/t_vb_light.c
@@ -1,4 +1,4 @@
-/* $Id: t_vb_light.c,v 1.1 2000/12/26 05:09:33 keithw Exp $ */
+/* $Id: t_vb_light.c,v 1.2 2000/12/27 19:57:37 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -176,6 +176,8 @@ static GLboolean run_validate_lighting( GLcontext *ctx,
}
/* tab = _tnl_light_tab; */
}
+ else
+ tab = _tnl_light_ci_tab;
if (ctx->Light.ColorMaterialEnabled)
ind |= LIGHT_COLORMATERIAL;
diff --git a/src/mesa/tnl/t_vb_normals.c b/src/mesa/tnl/t_vb_normals.c
index 97e7b9bb35..e55520cb5c 100644
--- a/src/mesa/tnl/t_vb_normals.c
+++ b/src/mesa/tnl/t_vb_normals.c
@@ -1,4 +1,4 @@
-/* $Id: t_vb_normals.c,v 1.1 2000/12/26 05:09:33 keithw Exp $ */
+/* $Id: t_vb_normals.c,v 1.2 2000/12/27 19:57:37 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -64,6 +64,7 @@ static GLboolean run_normal_stage( GLcontext *ctx,
if (VB->NormalLengthPtr) {
GLfloat diff = VB->NormalLengthPtr[0] -
1.0/LEN_3FV(VB->NormalPtr->data[0]);
+ (void)diff;
ASSERT((diff*diff) < .01);
}
diff --git a/src/mesa/tnl/t_vb_render.c b/src/mesa/tnl/t_vb_render.c
index 5707f21c90..15afe6118d 100644
--- a/src/mesa/tnl/t_vb_render.c
+++ b/src/mesa/tnl/t_vb_render.c
@@ -1,4 +1,4 @@
-/* $Id: t_vb_render.c,v 1.1 2000/12/26 05:09:33 keithw Exp $ */
+/* $Id: t_vb_render.c,v 1.2 2000/12/27 19:57:37 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -630,6 +630,7 @@ static void check_render( GLcontext *ctx, struct gl_pipeline_stage *stage )
if (ctx->_TriangleCaps & DD_TRI_UNFILLED) {
inputs |= VERT_EDGE;
+ interp |= INTERP_EDGE;
}
if (ctx->RenderMode==GL_FEEDBACK) {
diff --git a/src/mesa/tnl/t_vb_rendertmp.h b/src/mesa/tnl/t_vb_rendertmp.h
index de8adb23ec..bd77b9668a 100644
--- a/src/mesa/tnl/t_vb_rendertmp.h
+++ b/src/mesa/tnl/t_vb_rendertmp.h
@@ -1,4 +1,4 @@
-/* $Id: t_vb_rendertmp.h,v 1.1 2000/12/26 05:09:33 keithw Exp $ */
+/* $Id: t_vb_rendertmp.h,v 1.2 2000/12/27 19:57:37 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -105,9 +105,8 @@ static void TAG(render_line_strip)( GLcontext *ctx,
RESET_OCCLUSION;
INIT(GL_LINES);
- for (j=start+1; j<count; j++ ) {
+ for (j=start+1; j<count; j++ )
RENDER_LINE( ELT(j-1), ELT(j) );
- }
if (TEST_PRIM_END(flags))
RESET_STIPPLE;
@@ -273,55 +272,51 @@ static void TAG(render_poly_pv)( GLcontext *ctx,
INIT(GL_POLYGON);
if (NEED_EDGEFLAG_SETUP) {
- if (start+3 < count) {
- GLboolean efstart = EDGEFLAG_GET( ELT(start) );
- GLboolean efcount = EDGEFLAG_GET( ELT(count-1) );
+ GLboolean efstart = EDGEFLAG_GET( ELT(start) );
+ GLboolean efcount = EDGEFLAG_GET( ELT(count-1) );
-
- /* If the primitive does not begin here, the first edge
- * is non-boundary.
- */
- if (!TEST_PRIM_BEGIN(flags))
- EDGEFLAG_SET( ELT(start), GL_FALSE );
+ /* If the primitive does not begin here, the first edge
+ * is non-boundary.
+ */
+ if (!TEST_PRIM_BEGIN(flags))
+ EDGEFLAG_SET( ELT(start), GL_FALSE );
- /* If the primitive does not end here, the final edge is
- * non-boundary.
- */
- if (!TEST_PRIM_END(flags))
- EDGEFLAG_SET( ELT(count-1), GL_FALSE );
+ /* If the primitive does not end here, the final edge is
+ * non-boundary.
+ */
+ if (!TEST_PRIM_END(flags))
+ EDGEFLAG_SET( ELT(count-1), GL_FALSE );
- /* Draw the first triangle (possibly also the last).
- */
- if (j<count) {
- GLboolean ef = EDGEFLAG_GET( ELT(j) );
- EDGEFLAG_SET( ELT(j), GL_FALSE );
- RENDER_TRI( ELT(start), ELT(j-1), ELT(j), ELT(pv), 0 );
- EDGEFLAG_SET( ELT(j), ef );
- j++;
- }
+ /* Draw the first triangles (possibly zero)
+ */
+ if (j<count-1) {
+ GLboolean ef = EDGEFLAG_GET( ELT(j) );
+ EDGEFLAG_SET( ELT(j), GL_FALSE );
+ RENDER_TRI( ELT(start), ELT(j-1), ELT(j), ELT(pv), 0 );
+ EDGEFLAG_SET( ELT(j), ef );
+ j++;
- /* For internal tris, the first and last edges are non-boundary.
+ /* Don't render the first edge again:
*/
EDGEFLAG_SET( ELT(start), GL_FALSE );
+
for (;j<count-1;j++) {
- GLboolean ef = EDGEFLAG_GET( ELT(j) );
+ GLboolean efj = EDGEFLAG_GET( ELT(j) );
EDGEFLAG_SET( ELT(j), GL_FALSE );
RENDER_TRI( ELT(start), ELT(j-1), ELT(j), ELT(pv), 0 );
- EDGEFLAG_SET( ELT(j), ef );
+ EDGEFLAG_SET( ELT(j), efj );
}
+ }
- /* Draw the last triangle
- */
- if (j < count) {
- RENDER_TRI( ELT(start), ELT(j-1), ELT(j), ELT(pv), 0 );
- j++;
- }
+ /* Draw the last or only triangle
+ */
+ if (j < count)
+ RENDER_TRI( ELT(start), ELT(j-1), ELT(j), ELT(pv), 0 );
- /* Restore the first, last edgeflags:
- */
- EDGEFLAG_SET( ELT(count-1), efcount );
- EDGEFLAG_SET( ELT(start), efstart );
- }
+ /* Restore the first and last edgeflags:
+ */
+ EDGEFLAG_SET( ELT(count-1), efcount );
+ EDGEFLAG_SET( ELT(start), efstart );
if (TEST_PRIM_END(flags)) {
RESET_STIPPLE;
diff --git a/src/mesa/x86/3dnow.c b/src/mesa/x86/3dnow.c
index 32d5324b8d..b1777ae49d 100644
--- a/src/mesa/x86/3dnow.c
+++ b/src/mesa/x86/3dnow.c
@@ -1,4 +1,4 @@
-/* $Id: 3dnow.c,v 1.12 2000/11/22 08:55:53 joukj Exp $ */
+/* $Id: 3dnow.c,v 1.13 2000/12/27 19:57:37 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -159,10 +159,10 @@ void gl_init_3dnow_transform_asm( void )
ASSIGN_XFORM_GROUP( 3dnow, 0, 3, raw );
ASSIGN_XFORM_GROUP( 3dnow, 0, 4, raw );
- ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 1, masked );
- ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 2, masked );
- ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 3, masked );
- ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 4, masked );
+/* ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 1, masked ); */
+/* ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 2, masked ); */
+/* ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 3, masked ); */
+/* ASSIGN_XFORM_GROUP( 3dnow, CULL_MASK_ACTIVE, 4, masked ); */
ASSIGN_NORM_GROUP( 3dnow, 0, raw );
/* ASSIGN_NORM_GROUP( 3dnow, CULL_MASK_ACTIVE, masked ); */
diff --git a/src/mesa/x86/x86.c b/src/mesa/x86/x86.c
index 3f9d10201b..fd8a224822 100644
--- a/src/mesa/x86/x86.c
+++ b/src/mesa/x86/x86.c
@@ -1,4 +1,4 @@
-/* $Id: x86.c,v 1.13 2000/11/22 08:55:53 joukj Exp $ */
+/* $Id: x86.c,v 1.14 2000/12/27 19:57:37 keithw Exp $ */
/*
* Mesa 3-D graphics library
@@ -115,9 +115,9 @@ void gl_init_x86_transform_asm( void )
ASSIGN_XFORM_GROUP( x86, 0, 3, raw );
ASSIGN_XFORM_GROUP( x86, 0, 4, raw );
- ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 2, masked );
- ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 3, masked );
- ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 4, masked );
+/* ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 2, masked ); */
+/* ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 3, masked ); */
+/* ASSIGN_XFORM_GROUP( x86, CULL_MASK_ACTIVE, 4, masked ); */
/* XXX this function has been found to cause FP overflow exceptions */
gl_clip_tab[4] = gl_x86_cliptest_points4;