Fix useabs logic in build_fog().

We always need to compute the absolute value of the fogcoord if we're
passing it through for per-fragment fog.
This commit is contained in:
Brian 2007-10-15 15:30:13 -06:00
parent b4deb73fab
commit b1f136dba2

View file

@ -1110,8 +1110,6 @@ static void build_fog( struct tnl_program *p )
{ {
struct ureg fog = register_output(p, VERT_RESULT_FOGC); struct ureg fog = register_output(p, VERT_RESULT_FOGC);
struct ureg input; 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) { if (p->state->fog_source_is_depth) {
input = swizzle1(get_eye_position(p), Z); input = swizzle1(get_eye_position(p), Z);
@ -1125,6 +1123,8 @@ static void build_fog( struct tnl_program *p )
STATE_FOG_PARAMS_OPTIMIZED); STATE_FOG_PARAMS_OPTIMIZED);
struct ureg tmp = get_temp(p); struct ureg tmp = get_temp(p);
GLboolean useabs = (p->state->fog_mode != FOG_EXP2);
if (useabs) { if (useabs) {
emit_op1(p, OPCODE_ABS, tmp, 0, input); 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) /* results = incoming fog coords (compute fog per-fragment later)
* *
* KW: Is it really necessary to do anything in this case? * 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); emit_op1(p, useabs ? OPCODE_ABS : OPCODE_MOV, fog, WRITEMASK_X, input);
} }
} }