[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