tgsi/scan: don't treat RESQ etc. as memory instructions
authorMarek Olšák <marek.olsak@amd.com>
Sun, 9 Oct 2016 17:18:51 +0000 (19:18 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 24 Oct 2016 19:41:30 +0000 (21:41 +0200)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/auxiliary/tgsi/tgsi_scan.c

index e5edea8657b55c1e4417a0be34c2d1196427e5b6..66f1fdf2138e242164cb7198f35f3b888b1eb8b1 100644 (file)
@@ -54,6 +54,16 @@ is_memory_file(unsigned file)
 }
 
 
+static bool
+is_mem_query_inst(unsigned opcode)
+{
+   return opcode == TGSI_OPCODE_RESQ ||
+          opcode == TGSI_OPCODE_TXQ ||
+          opcode == TGSI_OPCODE_TXQS ||
+          opcode == TGSI_OPCODE_TXQ_LZ ||
+          opcode == TGSI_OPCODE_LODQ;
+}
+
 /**
  * Is the opcode a "true" texture instruction which samples from a
  * texture map?
@@ -61,10 +71,7 @@ is_memory_file(unsigned file)
 static bool
 is_texture_inst(unsigned opcode)
 {
-   return (opcode != TGSI_OPCODE_TXQ &&
-           opcode != TGSI_OPCODE_TXQS &&
-           opcode != TGSI_OPCODE_TXQ_LZ &&
-           opcode != TGSI_OPCODE_LODQ &&
+   return (!is_mem_query_inst(opcode) &&
            tgsi_get_opcode_info(opcode)->is_tex);
 }
 
@@ -320,7 +327,8 @@ scan_instruction(struct tgsi_shader_info *info,
          }
       }
 
-      if (is_memory_file(src->Register.File)) {
+      if (is_memory_file(src->Register.File) &&
+          !is_mem_query_inst(fullinst->Instruction.Opcode)) {
          is_mem_inst = true;
 
          if (tgsi_get_opcode_info(fullinst->Instruction.Opcode)->is_store) {