[Mesa-dev] [PATCH] tgsi/scan: add support to figure out max nesting depth
Kenneth Graunke
kenneth at whitecape.org
Wed Sep 9 15:47:46 PDT 2015
On Wednesday, September 09, 2015 06:31:06 PM Rob Clark wrote:
> From: Rob Clark <robclark at freedesktop.org>
>
> Sometimes a useful thing for compilers (or, for example, tgsi_to_nir) to
> know. And pretty trivial for scan to figure this out for us.
>
> Signed-off-by: Rob Clark <robclark at freedesktop.org>
> ---
> src/gallium/auxiliary/tgsi/tgsi_scan.c | 16 ++++++++++++++++
> src/gallium/auxiliary/tgsi/tgsi_scan.h | 5 +++++
> 2 files changed, 21 insertions(+)
>
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.c b/src/gallium/auxiliary/tgsi/tgsi_scan.c
> index 9810b54..66306d7 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_scan.c
> +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.c
> @@ -56,6 +56,7 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
> {
> uint procType, i;
> struct tgsi_parse_context parse;
> + unsigned current_depth = 0;
>
> memset(info, 0, sizeof(*info));
> for (i = 0; i < TGSI_FILE_COUNT; i++)
> @@ -100,6 +101,21 @@ tgsi_scan_shader(const struct tgsi_token *tokens,
> assert(fullinst->Instruction.Opcode < TGSI_OPCODE_LAST);
> info->opcode_count[fullinst->Instruction.Opcode]++;
>
> + switch (fullinst->Instruction.Opcode) {
> + case TGSI_OPCODE_IF:
> + case TGSI_OPCODE_UIF:
> + case TGSI_OPCODE_BGNLOOP:
> + current_depth++;
> + info->max_depth = MAX2(info->max_depth, current_depth);
> + break;
> + case TGSI_OPCODE_ENDIF:
> + case TGSI_OPCODE_ENDLOOP:
> + current_depth--;
> + break;
> + default:
> + break;
> + }
> +
> if (fullinst->Instruction.Opcode >= TGSI_OPCODE_F2D &&
> fullinst->Instruction.Opcode <= TGSI_OPCODE_DSSG)
> info->uses_doubles = true;
> diff --git a/src/gallium/auxiliary/tgsi/tgsi_scan.h b/src/gallium/auxiliary/tgsi/tgsi_scan.h
> index c5900bc..42539ee 100644
> --- a/src/gallium/auxiliary/tgsi/tgsi_scan.h
> +++ b/src/gallium/auxiliary/tgsi/tgsi_scan.h
> @@ -113,6 +113,11 @@ struct tgsi_shader_info
> unsigned indirect_files_written;
>
> unsigned properties[TGSI_PROPERTY_COUNT]; /* index with TGSI_PROPERTY_ */
> +
> + /**
> + * Max nesting limit of loops/if's
> + */
> + unsigned max_depth;
> };
>
> extern void
>
FWIW, this is
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
but you should probably have other Gallium folks review it too.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150909/987d8733/attachment-0001.sig>
More information about the mesa-dev
mailing list