i965: Fix brw_swap_cmod() for LE/GE comparisons.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 16 Jun 2012 09:08:13 +0000 (02:08 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 18 Jun 2012 22:25:31 +0000 (15:25 -0700)
commit5b83bdc154ec8d607a4c4d96171d0128e51abaec
treeaafad8aee6899d5e8d6c5ef8cc0207668b68563d
parent6f7834ad366ef0d2a61fffbc969b8b6e2e750420
i965: Fix brw_swap_cmod() for LE/GE comparisons.

The idea here is to rewrite comparisons like 2 >= x with x <= 2; we want
to simply exchange arguments, not negate the condition.  If equality was
part of the original comparison, it should remain part of the swapped
version.

This is the true cause of bug #50298.  It didn't manifest itself on
Sandybridge because we embed the conditional modifier in the IF
instruction rather than emitting a CMP.  All other platforms use CMP.

It also didn't manifest itself on the master branch because commit
be5f27a84d ("glsl: Refine the loop instruction counting.") papered over
the problem.

NOTE: This is a candidate for stable release branches.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50298
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/brw_eu.c