summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2015-01-04 16:33:37 -0500
committerRob Clark <[email protected]>2015-01-07 19:37:28 -0500
commit18899d1b8078d2c16b7b3f105e0b39d3ea70a4cc (patch)
tree89bd3f54c36cfacf1af0d9581ff8ded56275ee9a /src
parent49b4a6331f846cd86e6ca792959a9506bddeb658 (diff)
tgsi: track max array per file
NOTE IN[] and OUT[] don't need (have?) ArrayID's.. and TEMP[] can optionally have them. So we implicitly assume that ArrayID==0 always exists for each file. This is why array_max[file] is never less than zero. You can tell from indirect_files(_read/written) if the legacy array- id zero was actually used. Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.c2
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_scan.h2
2 files changed, 4 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
index 9d1f848a9a8..e6011d2d85a 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
@@ -165,6 +165,8 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
= &parse.FullToken.FullDeclaration;
const uint file = fulldecl->Declaration.File;
uint reg;
+ if (fulldecl->Declaration.Array)
+ info->array_max[file] = MAX2(info->array_max[file], fulldecl->Array.ArrayID);
for (reg = fulldecl->Range.First;
reg <= fulldecl->Range.Last;
reg++) {
diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h
index 75540d5732b..5dc9267b8d2 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.h
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h
@@ -61,6 +61,8 @@ struct tgsi_shader_info
int file_max[TGSI_FILE_COUNT]; /**< highest index of declared registers */
int const_file_max[PIPE_MAX_CONSTANT_BUFFERS];
+ unsigned array_max[TGSI_FILE_COUNT]; /**< highest index array per register file */
+
uint immediate_count; /**< number of immediates declared */
uint num_instructions;