summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/tgsi/tgsi_scan.c
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2010-07-21 09:51:11 -0600
committerBrian Paul <brianp@vmware.com>2010-07-21 10:16:32 -0600
commit85206e56a1c3400be47229d4a8c6a1cd7a2f476e (patch)
treed60dcdbb341febdd535d71e63a3d98bc4bbbbcda /src/gallium/auxiliary/tgsi/tgsi_scan.c
parent0115f07507fc661a0a19564c496a781c3dcbc7a0 (diff)
tgsi: added tgsi_shader_info::indirect_files field
Indicates which register files are accessed with indirect addressing.
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 ced9c94f46..90198a4f60 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
@@ -109,6 +109,19 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
info->input_usage_mask[ind] |= usage_mask;
}
}
+
+ /* check for indirect register reads */
+ if (src->Register.Indirect) {
+ info->indirect_files |= (1 << src->Register.File);
+ }
+ }
+
+ /* check for indirect register writes */
+ for (i = 0; i < fullinst->Instruction.NumDstRegs; i++) {
+ const struct tgsi_full_dst_register *dst = &fullinst->Dst[i];
+ if (dst->Register.Indirect) {
+ info->indirect_files |= (1 << dst->Register.File);
+ }
}
info->num_instructions++;