i965: vs optimization fix: Check val.{negate,abs} in accumulator_contains()
authorPaul Berry <stereotype441@gmail.com>
Fri, 22 Jul 2011 21:05:52 +0000 (14:05 -0700)
committerPaul Berry <stereotype441@gmail.com>
Mon, 25 Jul 2011 18:40:53 +0000 (11:40 -0700)
commitd92463d5dc42aca09a54588c322fc60582cf9131
tree6954fc73155cd57bd47aa9872987461f219e7807
parent572f6318954f31fcf3d396ac5df8e9eff3f37c74
i965: vs optimization fix: Check val.{negate,abs} in accumulator_contains()

When emitting a MAC instruction in a vertex shader, brw_vs_emit()
calls accumulator_contains() to determine whether the accumulator
already contains the appropriate addend; if it does, then we can avoid
emitting an unnecessary MOV instruction.

However, accumulator_contains() wasn't checking the val.negate or
val.abs flags.  As a result, if the desired value was the negation, or
the absolute value, of what was already in the accumulator, we would
generate an incorrect shader.

Fixes piglit test vs-refract-vec4-vec4-float.

Tested on Gen5 and Gen6.

Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_vs_emit.c