From: Rob Clark Date: Sat, 3 Jan 2015 21:11:28 +0000 (-0500) Subject: tgsi: keep track of read vs written indirects X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=49b4a6331f846cd86e6ca792959a9506bddeb658;p=mesa.git tgsi: keep track of read vs written indirects At least temporarily, I need to fallback to old compiler still for relative dest (for freedreno), but I can do relative src temp. Only a temporary situation, but seems easy/reasonable for tgsi-scan to track this. Signed-off-by: Rob Clark Reviewed-by: Roland Scheidegger --- diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c index 6210ebdb3ad..9d1f848a9a8 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_scan.c +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c @@ -130,6 +130,7 @@ tgsi_scan_shader(const struct tgsi_token *tokens, /* check for indirect register reads */ if (src->Register.Indirect) { info->indirect_files |= (1 << src->Register.File); + info->indirect_files_read |= (1 << src->Register.File); } /* MSAA samplers */ @@ -150,6 +151,7 @@ tgsi_scan_shader(const struct tgsi_token *tokens, const struct tgsi_full_dst_register *dst = &fullinst->Dst[i]; if (dst->Register.Indirect) { info->indirect_files |= (1 << dst->Register.File); + info->indirect_files_written |= (1 << dst->Register.File); } } diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h index bacb4aba242..75540d5732b 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_scan.h +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h @@ -94,6 +94,12 @@ struct tgsi_shader_info * indirect addressing. The bits are (1 << TGSI_FILE_x), etc. */ unsigned indirect_files; + /** + * Bitmask indicating which register files are read / written with + * indirect addressing. The bits are (1 << TGSI_FILE_x). + */ + unsigned indirect_files_read; + unsigned indirect_files_written; unsigned properties[TGSI_PROPERTY_COUNT]; /* index with TGSI_PROPERTY_ */ };