summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolai Hähnle <nicolai.haehnle@amd.com>2016-03-13 15:00:40 -0500
committerNicolai Hähnle <nicolai.haehnle@amd.com>2016-03-21 11:31:21 -0500
commitacf8a921e200cab9ccde96f498c32d3929aad118 (patch)
treebbd4ff2b423bd320085ca952738eda4adc53f54e
parent61b90e2022e0dc56f1cdd35af64bd924b2ce7f8e (diff)
tgsi/scan: add images_writemask
Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.c18
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.h5
2 files changed, 21 insertions, 2 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
index 8e24cc626b..dee6884d14 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
@@ -38,6 +38,7 @@
#include "util/u_math.h"
#include "util/u_memory.h"
#include "util/u_prim.h"
+#include "tgsi/tgsi_info.h"
#include "tgsi/tgsi_parse.h"
#include "tgsi/tgsi_util.h"
#include "tgsi/tgsi_scan.h"
@@ -192,8 +193,14 @@ scan_instruction(struct tgsi_shader_info *info,
}
}
- if (is_memory_file(src->Register.File))
+ if (is_memory_file(src->Register.File)) {
is_mem_inst = true;
+
+ if (src->Register.File == TGSI_FILE_IMAGE &&
+ !src->Register.Indirect &&
+ tgsi_get_opcode_info(fullinst->Instruction.Opcode)->is_store)
+ info->images_writemask |= 1 << src->Register.Index;
+ }
}
/* check for indirect register writes */
@@ -204,8 +211,15 @@ scan_instruction(struct tgsi_shader_info *info,
info->indirect_files_written |= (1 << dst->Register.File);
}
- if (is_memory_file(dst->Register.File))
+ if (is_memory_file(dst->Register.File)) {
+ assert(fullinst->Instruction.Opcode == TGSI_OPCODE_STORE);
+
is_mem_inst = true;
+
+ if (dst->Register.File == TGSI_FILE_IMAGE &&
+ !dst->Register.Indirect)
+ info->images_writemask |= 1 << dst->Register.Index;
+ }
}
if (is_mem_inst)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h
index d65dec7188..f52729ae2d 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h
@@ -118,6 +118,11 @@ struct tgsi_shader_info
unsigned num_written_culldistance;
unsigned num_written_clipdistance;
/**
+ * Bitmask indicating which images are written to (STORE / ATOM*).
+ * Indirect image accesses are not reflected in this mask.
+ */
+ unsigned images_writemask;
+ /**
* Bitmask indicating which register files are accessed with
* indirect addressing. The bits are (1 << TGSI_FILE_x), etc.
*/