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

Reply via email to