i965/vec4/gen6: fix exec_size for instructions with destination width of 4
authorSamuel Iglesias Gonsalvez <siglesias@igalia.com>
Fri, 4 Dec 2015 09:23:15 +0000 (10:23 +0100)
committerSamuel Iglesias Gonsálvez <siglesias@igalia.com>
Thu, 17 Mar 2016 07:23:25 +0000 (08:23 +0100)
Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/mesa/drivers/dri/i965/brw_vec4_generator.cpp

index 871b49a..7063426 100644 (file)
@@ -1434,6 +1434,7 @@ generate_code(struct brw_codegen *p,
       assert(inst->mlen <= BRW_MAX_MSG_LENGTH);
 
       unsigned pre_emit_nr_insn = p->nr_insn;
+      bool fix_exec_size = false;
 
       if (dst.width == BRW_WIDTH_4) {
          /* This happens in attribute fixups for "dual instanced" geometry
@@ -1458,6 +1459,8 @@ generate_code(struct brw_codegen *p,
             if (src[i].file == BRW_GENERAL_REGISTER_FILE)
                src[i] = stride(src[i], 4, 4, 1);
          }
+         brw_set_default_exec_size(p, BRW_EXECUTE_4);
+         fix_exec_size = true;
       }
 
       switch (inst->opcode) {
@@ -1946,6 +1949,9 @@ generate_code(struct brw_codegen *p,
          unreachable("Unsupported opcode");
       }
 
+      if (fix_exec_size)
+         brw_set_default_exec_size(p, BRW_EXECUTE_8);
+
       if (inst->opcode == VEC4_OPCODE_PACK_BYTES) {
          /* Handled dependency hints in the generator. */