[Mesa-dev] [PATCH 2/3] gallivm: make sure analysis works with large number of immediates

Jose Fonseca jfonseca at vmware.com
Wed Feb 5 19:00:13 CET 2014


Let's update LP_MAX_TGSI_IMMEDIATES and use it instead of 4096.

Otherwise looks good.


Jose

----- Original Message -----
> We need to handle a lot more immediates and in order to do that
> we also switch from allocating this structure on the stack to
> allocating it on the heap.
> 
> Signed-off-by: Zack Rusin <zackr at vmware.com>
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_tgsi_info.c | 17 +++++++++--------
>  1 file changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_info.c
> b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_info.c
> index 184790b..ce0598d 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_info.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_info.c
> @@ -47,7 +47,7 @@ struct analysis_context
>     struct lp_tgsi_info *info;
>  
>     unsigned num_imms;
> -   float imm[128][4];
> +   float imm[4096][4];
>  
>     struct lp_tgsi_channel_info temp[32][4];
>  };
> @@ -487,7 +487,7 @@ lp_build_tgsi_info(const struct tgsi_token *tokens,
>                     struct lp_tgsi_info *info)
>  {
>     struct tgsi_parse_context parse;
> -   struct analysis_context ctx;
> +   struct analysis_context *ctx;
>     unsigned index;
>     unsigned chan;
>  
> @@ -495,8 +495,8 @@ lp_build_tgsi_info(const struct tgsi_token *tokens,
>  
>     tgsi_scan_shader(tokens, &info->base);
>  
> -   memset(&ctx, 0, sizeof ctx);
> -   ctx.info = info;
> +   ctx = CALLOC(1, sizeof(struct analysis_context));
> +   ctx->info = info;
>  
>     tgsi_parse_init(&parse, tokens);
>  
> @@ -518,7 +518,7 @@ lp_build_tgsi_info(const struct tgsi_token *tokens,
>                 goto finished;
>              }
>  
> -            analyse_instruction(&ctx, inst);
> +            analyse_instruction(ctx, inst);
>           }
>           break;
>  
> @@ -527,16 +527,16 @@ lp_build_tgsi_info(const struct tgsi_token *tokens,
>              const unsigned size =
>                    parse.FullToken.FullImmediate.Immediate.NrTokens - 1;
>              assert(size <= 4);
> -            if (ctx.num_imms < Elements(ctx.imm)) {
> +            if (ctx->num_imms < Elements(ctx->imm)) {
>                 for (chan = 0; chan < size; ++chan) {
>                    float value = parse.FullToken.FullImmediate.u[chan].Float;
> -                  ctx.imm[ctx.num_imms][chan] = value;
> +                  ctx->imm[ctx->num_imms][chan] = value;
>  
>                    if (value < 0.0f || value > 1.0f) {
>                       info->unclamped_immediates = TRUE;
>                    }
>                 }
> -               ++ctx.num_imms;
> +               ++ctx->num_imms;
>              }
>           }
>           break;
> @@ -551,6 +551,7 @@ lp_build_tgsi_info(const struct tgsi_token *tokens,
>  finished:
>  
>     tgsi_parse_free(&parse);
> +   FREE(ctx);
>  
>  
>     /*
> --
> 1.8.3.2
> 


More information about the mesa-dev mailing list