Don't update span->array->z[] values from SLANG_FRAGMENT_FIXED_FRAGDEPTH.
authorBrian <brian@yutani.localnet.net>
Sat, 16 Dec 2006 18:17:41 +0000 (11:17 -0700)
committerBrian <brian@yutani.localnet.net>
Sat, 16 Dec 2006 18:17:41 +0000 (11:17 -0700)
This restores the behaviour of Mesa 6.5.1, fixing a regression in 6.5.2.
See bug 9345.  Revisit someday...

src/mesa/swrast/s_arbshader.c

index ee971a36eccebf61482b4a9eeb7802413a83ce10..356e43c81984425b9aac976035e53510980f33ca 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.6
+ * Version:  6.5.3
  *
  * Copyright (C) 2006  Brian Paul   All Rights Reserved.
  *
@@ -103,18 +103,20 @@ _swrast_exec_arbshader(GLcontext *ctx, SWspan *span)
             span->writeAll = GL_FALSE;
          }
          else {
+            GLboolean zWritten = GL_FALSE; /* temp hack (bug 9345) */
             (**pro).UpdateFixedVarying(pro, SLANG_FRAGMENT_FIXED_FRAGCOLOR,
                                        vec, 0, 4 * sizeof(GLfloat), GL_FALSE);
             COPY_4V(span->array->color.sz4.rgba[i], vec);
-            
-            (**pro).UpdateFixedVarying(pro, SLANG_FRAGMENT_FIXED_FRAGDEPTH, vec, 0,
-                                       sizeof (GLfloat), GL_FALSE);
-            if (vec[0] <= 0.0f)
-               span->array->z[i] = 0;
-            else if (vec[0] >= 1.0f)
-               span->array->z[i] = ctx->DrawBuffer->_DepthMax;
-            else
-               span->array->z[i] = IROUND(vec[0] * ctx->DrawBuffer->_DepthMaxF);
+            if (zWritten) {
+               (**pro).UpdateFixedVarying(pro, SLANG_FRAGMENT_FIXED_FRAGDEPTH,
+                                          vec, 0, sizeof (GLfloat), GL_FALSE);
+               if (vec[0] <= 0.0f)
+                  span->array->z[i] = 0;
+               else if (vec[0] >= 1.0f)
+                  span->array->z[i] = ctx->DrawBuffer->_DepthMax;
+               else
+                  span->array->z[i] = IROUND(vec[0] * ctx->DrawBuffer->_DepthMaxF);
+            }
          }
       }
    }