From 71b319a285f4fea50bb11dc477b551ff69d99c3f Mon Sep 17 00:00:00 2001 From: Jose Maria Casanova Crespo Date: Sat, 9 Jun 2018 11:46:11 +0200 Subject: [PATCH] intel/fs: Use shuffle_from_32bit_read for 64-bit FS load_input As the previous use of shuffle_32bit_load_result_to_64bit_data had a source/destination overlap for 64-bit. Now a temporary destination is used for 64-bit cases to use shuffle_from_32bit_read that doesn't handle src/dst overlaps. Reviewed-by: Jason Ekstrand --- src/intel/compiler/brw_fs_nir.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index 352d50e..e2cd63c 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -3353,6 +3353,7 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder &bld, unsigned base = nir_intrinsic_base(instr); unsigned comp = nir_intrinsic_component(instr); unsigned num_components = instr->num_components; + fs_reg orig_dest = dest; enum brw_reg_type type = dest.type; /* Special case fields in the VUE header */ @@ -3368,6 +3369,7 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder &bld, */ type = BRW_REGISTER_TYPE_F; num_components *= 2; + dest = bld.vgrf(type, num_components); } for (unsigned int i = 0; i < num_components; i++) { @@ -3376,10 +3378,8 @@ fs_visitor::nir_emit_fs_intrinsic(const fs_builder &bld, } if (nir_dest_bit_size(instr->dest) == 64) { - shuffle_32bit_load_result_to_64bit_data(bld, - dest, - retype(dest, type), - instr->num_components); + shuffle_from_32bit_read(bld, orig_dest, dest, 0, + instr->num_components); } break; } -- 2.7.4