Fix useabs logic in build_fog().
authorBrian <brian.paul@tungstengraphics.com>
Mon, 15 Oct 2007 21:30:13 +0000 (15:30 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Mon, 15 Oct 2007 21:30:13 +0000 (15:30 -0600)
We always need to compute the absolute value of the fogcoord if we're
passing it through for per-fragment fog.

src/mesa/tnl/t_vp_build.c

index b28102b1b91ecd07b5cf41cc11904564c26b1c32..e7caa2fc1db2dfbe606c101b7581985a07aef634 100644 (file)
@@ -1110,8 +1110,6 @@ static void build_fog( struct tnl_program *p )
 {
    struct ureg fog = register_output(p, VERT_RESULT_FOGC);
    struct ureg input;
-   GLuint useabs = p->state->fog_source_is_depth && p->state->fog_mode &&
-                  (p->state->fog_mode != FOG_EXP2);
 
    if (p->state->fog_source_is_depth) {
       input = swizzle1(get_eye_position(p), Z);
@@ -1125,6 +1123,8 @@ static void build_fog( struct tnl_program *p )
                                           STATE_FOG_PARAMS_OPTIMIZED);
       struct ureg tmp = get_temp(p);
 
+      GLboolean useabs = (p->state->fog_mode != FOG_EXP2);
+
       if (useabs) {
         emit_op1(p, OPCODE_ABS, tmp, 0, input);
       }
@@ -1156,7 +1156,10 @@ static void build_fog( struct tnl_program *p )
       /* results = incoming fog coords (compute fog per-fragment later) 
        *
        * KW:  Is it really necessary to do anything in this case?
+       * BP: Yes, we always need to compute the absolute value, unless
+       * we want to push that down into the fragment program...
        */
+      GLboolean useabs = GL_TRUE;
       emit_op1(p, useabs ? OPCODE_ABS : OPCODE_MOV, fog, WRITEMASK_X, input);
    }
 }