diff options
author | Matt Turner <[email protected]> | 2013-11-16 13:16:50 -0800 |
---|---|---|
committer | Matt Turner <[email protected]> | 2013-11-20 15:04:52 -0800 |
commit | c4464c9eea65a287aa74f6bb59cd00b1ef665a36 (patch) | |
tree | 3ec7c7493fd49b6d7792b1398ccfad75a4f3686a | |
parent | 9bbedf6146be6ecad2863fd924c434a2a530c361 (diff) |
i965/fs: Don't emit SIMD16 BFI instructions.
Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp index a97a016b8b3..6626a8cdf16 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp @@ -1530,11 +1530,32 @@ fs_generator::generate_code(exec_list *instructions) case BRW_OPCODE_BFI1: assert(brw->gen >= 7); - brw_BFI1(p, dst, src[0], src[1]); + /* The Haswell WaForceSIMD8ForBFIInstruction workaround says that we + * should + * + * "Force BFI instructions to be executed always in SIMD8." + */ + if (dispatch_width == 16 && brw->is_haswell) { + brw_set_compression_control(p, BRW_COMPRESSION_NONE); + brw_BFI1(p, dst, src[0], src[1]); + brw_set_compression_control(p, BRW_COMPRESSION_2NDHALF); + brw_BFI1(p, sechalf(dst), sechalf(src[0]), sechalf(src[1])); + brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED); + } else { + brw_BFI1(p, dst, src[0], src[1]); + } break; case BRW_OPCODE_BFI2: assert(brw->gen >= 7); brw_set_access_mode(p, BRW_ALIGN_16); + /* The Haswell WaForceSIMD8ForBFIInstruction workaround says that we + * should + * + * "Force BFI instructions to be executed always in SIMD8." + * + * Otherwise we would be able to emit compressed instructions like we + * do for the other three-source instructions. + */ if (dispatch_width == 16) { brw_set_compression_control(p, BRW_COMPRESSION_NONE); brw_BFI2(p, dst, src[0], src[1], src[2]); |