aboutsummaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/tgsi/tgsi_scan.c
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2016-10-20 00:56:08 +0200
committerMarek Olšák <[email protected]>2016-10-24 21:41:26 +0200
commit965a5f181047846b081bf1d510ddc4e5424f6b32 (patch)
tree22a00312baa1a211c16ee7112c1a8c67ef389375 /src/gallium/auxiliary/tgsi/tgsi_scan.c
parent35010718bc64c169b19268ec988b3e358272c302 (diff)
tgsi/scan: get information about indirect CONST access
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/tgsi/tgsi_scan.c')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
index b86207883e1..0c810053fe5 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
@@ -271,6 +271,18 @@ scan_instruction(struct tgsi_shader_info *info,
if (src->Register.Indirect) {
info->indirect_files |= (1 << src->Register.File);
info->indirect_files_read |= (1 << src->Register.File);
+
+ /* record indirect constant buffer indexing */
+ if (src->Register.File == TGSI_FILE_CONSTANT) {
+ if (src->Register.Dimension) {
+ if (src->Dimension.Indirect)
+ info->const_buffers_indirect = info->const_buffers_declared;
+ else
+ info->const_buffers_indirect |= 1u << src->Dimension.Index;
+ } else {
+ info->const_buffers_indirect |= 1;
+ }
+ }
}
/* Texture samplers */
@@ -392,6 +404,7 @@ scan_declaration(struct tgsi_shader_info *info,
info->const_file_max[buffer] =
MAX2(info->const_file_max[buffer], (int)reg);
+ info->const_buffers_declared |= 1u << buffer;
}
else if (file == TGSI_FILE_INPUT) {
info->input_semantic_name[reg] = (ubyte) semName;