Signed-off-by: Sagar Ghuge <sagar.gh...@intel.com> --- src/intel/compiler/brw_eu_emit.c | 36 ++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 9 deletions(-)
diff --git a/src/intel/compiler/brw_eu_emit.c b/src/intel/compiler/brw_eu_emit.c index 0cbc682ebc..a6b45fcb1a 100644 --- a/src/intel/compiler/brw_eu_emit.c +++ b/src/intel/compiler/brw_eu_emit.c @@ -765,31 +765,49 @@ brw_alu3(struct brw_codegen *p, unsigned opcode, struct brw_reg dest, brw_inst_set_3src_a16_dst_writemask(devinfo, inst, dest.writemask); assert(src0.file == BRW_GENERAL_REGISTER_FILE); - brw_inst_set_3src_a16_src0_swizzle(devinfo, inst, src0.swizzle); brw_inst_set_3src_a16_src0_subreg_nr(devinfo, inst, get_3src_subreg_nr(src0)); brw_inst_set_3src_src0_reg_nr(devinfo, inst, src0.nr); brw_inst_set_3src_src0_abs(devinfo, inst, src0.abs); brw_inst_set_3src_src0_negate(devinfo, inst, src0.negate); - brw_inst_set_3src_a16_src0_rep_ctrl(devinfo, inst, - src0.vstride == BRW_VERTICAL_STRIDE_0); + + /* RepCtrl field in Source or Destination Operand table in BDW Bspec + * says: + * "ChanSel does not apply when Replicate Control is set." + */ + if (src0.vstride == BRW_VERTICAL_STRIDE_0) + brw_inst_set_3src_a16_src0_rep_ctrl(devinfo, inst, true); + else + brw_inst_set_3src_a16_src0_swizzle(devinfo, inst, src0.swizzle); assert(src1.file == BRW_GENERAL_REGISTER_FILE); - brw_inst_set_3src_a16_src1_swizzle(devinfo, inst, src1.swizzle); brw_inst_set_3src_a16_src1_subreg_nr(devinfo, inst, get_3src_subreg_nr(src1)); brw_inst_set_3src_src1_reg_nr(devinfo, inst, src1.nr); brw_inst_set_3src_src1_abs(devinfo, inst, src1.abs); brw_inst_set_3src_src1_negate(devinfo, inst, src1.negate); - brw_inst_set_3src_a16_src1_rep_ctrl(devinfo, inst, - src1.vstride == BRW_VERTICAL_STRIDE_0); + + /* RepCtrl field in Source or Destination Operand table in BDW Bspec + * says: + * "ChanSel does not apply when Replicate Control is set." + */ + if (src1.vstride == BRW_VERTICAL_STRIDE_0) + brw_inst_set_3src_a16_src1_rep_ctrl(devinfo, inst, true); + else + brw_inst_set_3src_a16_src1_swizzle(devinfo, inst, src1.swizzle); assert(src2.file == BRW_GENERAL_REGISTER_FILE); - brw_inst_set_3src_a16_src2_swizzle(devinfo, inst, src2.swizzle); brw_inst_set_3src_a16_src2_subreg_nr(devinfo, inst, get_3src_subreg_nr(src2)); brw_inst_set_3src_src2_reg_nr(devinfo, inst, src2.nr); brw_inst_set_3src_src2_abs(devinfo, inst, src2.abs); brw_inst_set_3src_src2_negate(devinfo, inst, src2.negate); - brw_inst_set_3src_a16_src2_rep_ctrl(devinfo, inst, - src2.vstride == BRW_VERTICAL_STRIDE_0); + + /* RepCtrl field in Source or Destination Operand table in BDW Bspec + * says: + * "ChanSel does not apply when Replicate Control is set." + */ + if (src2.vstride == BRW_VERTICAL_STRIDE_0) + brw_inst_set_3src_a16_src2_rep_ctrl(devinfo, inst, true); + else + brw_inst_set_3src_a16_src2_swizzle(devinfo, inst, src2.swizzle); if (devinfo->gen >= 7) { /* Set both the source and destination types based on dest.type, -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev