summaryrefslogtreecommitdiffstats
path: root/src/mesa/tnl_dd
diff options
context:
space:
mode:
authorFelix Kuehling <[email protected]>2005-01-23 01:42:01 +0000
committerFelix Kuehling <[email protected]>2005-01-23 01:42:01 +0000
commit3b50f004333a922a259a4f733395c27002965ded (patch)
tree2ad70683c6932caca4218fb48f095147a52f1052 /src/mesa/tnl_dd
parent36a35c5614336bffdac4827c1e04bcaa8ab2fa27 (diff)
My last attempt to fix polygon offsets with the reversed viewport depth
range used by the savage driver by negating ctx->MRD broke polygon offsets with software fallbacks. This one adds a REVERSE_DEPTH parameter to t_dd_tritmp.h (defaults to 0) that allows reversing polygon offsets for hardware rendering but not for software fallbacks. For software fallbacks depth values are reversed after polygon offsets have been applied by the depth span functions.
Diffstat (limited to 'src/mesa/tnl_dd')
-rw-r--r--src/mesa/tnl_dd/t_dd_tritmp.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/mesa/tnl_dd/t_dd_tritmp.h b/src/mesa/tnl_dd/t_dd_tritmp.h
index 5b17a6f6f00..bc1617eae33 100644
--- a/src/mesa/tnl_dd/t_dd_tritmp.h
+++ b/src/mesa/tnl_dd/t_dd_tritmp.h
@@ -49,7 +49,8 @@
* VERT_X(v): Alias for vertex x value.
* VERT_Y(v): Alias for vertex y value.
* VERT_Z(v): Alias for vertex z value.
- * DEPTH_SCALE: Scale for offset.
+ * DEPTH_SCALE: Scale for constant offset.
+ * REVERSE_DEPTH: Viewport depth range reversed.
*
* VERTEX: Hardware vertex type.
* GET_VERTEX(n): Retreive vertex with index n.
@@ -108,6 +109,10 @@
#define VERT_Z_ADD(v,val) VERT_Z(v) += val
#endif
+#ifndef REVERSE_DEPTH
+#define REVERSE_DEPTH 0
+#endif
+
/* disable twostencil for un-aware drivers */
#ifndef HAVE_STENCIL_TWOSIDE
#define HAVE_STENCIL_TWOSIDE 0
@@ -269,7 +274,7 @@ static void TAG(triangle)( GLcontext *ctx, GLuint e0, GLuint e1, GLuint e2 )
if ( bc < 0.0f ) bc = -bc;
offset += MAX2( ac, bc ) * ctx->Polygon.OffsetFactor;
}
- offset *= ctx->MRD;
+ offset *= REVERSE_DEPTH ? -ctx->MRD : ctx->MRD;
}
}
@@ -545,7 +550,7 @@ static void TAG(quad)( GLcontext *ctx,
if ( bc < 0.0f ) bc = -bc;
offset += MAX2( ac, bc ) * ctx->Polygon.OffsetFactor;
}
- offset *= ctx->MRD;
+ offset *= REVERSE_DEPTH ? -ctx->MRD : ctx->MRD;
}
}