glsl: Rewrite and fix min/max to saturate optimization.
authorMatt Turner <mattst88@gmail.com>
Tue, 24 Feb 2015 18:41:52 +0000 (10:41 -0800)
committerMatt Turner <mattst88@gmail.com>
Wed, 25 Feb 2015 16:44:49 +0000 (08:44 -0800)
commitcb25087c7bd5f1ad2515647278b32d3f07803f77
treee8433da923d052a2ac92cfb62082f20229166c93
parent864340219ba5aa90a19eb1336459d78a9b02cd16
glsl: Rewrite and fix min/max to saturate optimization.

There were some bugs, and the code was really difficult to follow. We
would optimize

   min(max(x, b), 1.0) into max(sat(x), b)

but not pay attention to the order of min/max and also do

   max(min(x, b), 1.0) into max(sat(x), b)

Corrects four shaders from Champions of Regnum that do

   min(max(x, 1), 10)

and corrects rendering of Mass Effect under VMware Workstation.

Cc: "10.4 10.5" <mesa-stable@lists.freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=89180
Reviewed-by: Abdiel Janulgue <abdiel.janulgue@linux.intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/glsl/opt_algebraic.cpp