intel/fs: Fix opt_peephole_csel to not throw away saturates.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 12 Mar 2019 02:00:21 +0000 (19:00 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 13 Mar 2019 03:11:55 +0000 (20:11 -0700)
We were not copying the saturate bit from the original instruction
to the new replacement instruction.  This caused major misrendering
in DiRT Rally on iris, where comparisons leading to discards failed
due to the missing saturate, causing lots of extra garbage pixels to
be drawn in text rendering, trees, and so on.

This did not show up on i965 because st/nir performs a more aggressive
version of nir_opt_peephole_select, yielding more b32csel operations.

Fixes: 52c7df1643e i965/fs: Merge CMP and SEL into CSEL on Gen8+
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/intel/compiler/brw_fs.cpp

index bbab80d601867c7ac41171e45fcec6d01f47f0d9..fb6c23e5f9c1edeadbff1b7e05b3a3ac1c2d11e3 100644 (file)
@@ -3133,6 +3133,7 @@ fs_visitor::opt_peephole_csel()
 
             if (csel_inst != NULL) {
                progress = true;
+               csel_inst->saturate = inst->saturate;
                inst->remove(block);
             }