i965: Allow brw_eu_validate to handle compact instructions
authorMatt Turner <mattst88@gmail.com>
Sat, 29 Apr 2017 00:06:56 +0000 (17:06 -0700)
committerMatt Turner <mattst88@gmail.com>
Mon, 15 May 2017 18:42:56 +0000 (11:42 -0700)
This will allow the validator to run on shader programs we find in the
GPU hang error state.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/intel/compiler/brw_eu_validate.c

index ba3fe0d85dffb573d18c8d33b4bb947ce971f514..e089c1f90f857e7e0abe069478c85c64a0034277 100644 (file)
@@ -1036,10 +1036,17 @@ brw_validate_instructions(const struct gen_device_info *devinfo,
 {
    bool valid = true;
 
-   for (int src_offset = start_offset; src_offset < end_offset;
-        src_offset += sizeof(brw_inst)) {
+   for (int src_offset = start_offset; src_offset < end_offset;) {
       struct string error_msg = { .str = NULL, .len = 0 };
       const brw_inst *inst = assembly + src_offset;
+      bool is_compact = brw_inst_cmpt_control(devinfo, inst);
+      brw_inst uncompacted;
+
+      if (is_compact) {
+         brw_compact_inst *compacted = (void *)inst;
+         brw_uncompact_instruction(devinfo, &uncompacted, compacted);
+         inst = &uncompacted;
+      }
 
       if (is_unsupported_inst(devinfo, inst)) {
          ERROR("Instruction not supported on this Gen");
@@ -1056,6 +1063,12 @@ brw_validate_instructions(const struct gen_device_info *devinfo,
       }
       valid = valid && error_msg.len == 0;
       free(error_msg.str);
+
+      if (is_compact) {
+         src_offset += sizeof(brw_compact_inst);
+      } else {
+         src_offset += sizeof(brw_inst);
+      }
    }
 
    return valid;