[Mesa-dev] [PATCH] gallivm: allow large numbers of temporaries

Roland Scheidegger sroland at vmware.com
Tue Feb 4 21:36:40 CET 2014


Am 04.02.2014 03:43, schrieb Zack Rusin:
> The number of allowed temporaries increases almost with every
> iteration of an api. We used to support 128, then we started
> increasing and the newer api's support 4096+. So if we notice
> that the number of temporaries is larger than our statically
> allocated storage would allow we just treat them as indexable
> temporaries and allocate them as an array from the start.
> 
> Signed-off-by: Zack Rusin <zackr at vmware.com>
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
> index 9db41a9..7c5de21 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
> @@ -2672,8 +2672,8 @@ lp_emit_declaration_soa(
>        assert(last <= bld->bld_base.info->file_max[decl->Declaration.File]);
>        switch (decl->Declaration.File) {
>        case TGSI_FILE_TEMPORARY:
> -         assert(idx < LP_MAX_TGSI_TEMPS);
>           if (!(bld->indirect_files & (1 << TGSI_FILE_TEMPORARY))) {
> +            assert(idx < LP_MAX_TGSI_TEMPS);
>              for (i = 0; i < TGSI_NUM_CHANNELS; i++)
>                 bld->temps[idx][i] = lp_build_alloca(gallivm, vec_type, "temp");
>           }
> @@ -3621,6 +3621,15 @@ lp_build_tgsi_soa(struct gallivm_state *gallivm,
>     bld.bld_base.info = info;
>     bld.indirect_files = info->indirect_files;
>  
> +   /*
> +    * If the number of temporaries is rather large then we just
> +    * allocate them as an array right from the start and treat
> +    * like indirect temporaries.
> +    */
> +   if (info->file_max[TGSI_FILE_TEMPORARY] >= LP_MAX_TGSI_TEMPS) {
> +      bld.indirect_files |= (1 << TGSI_FILE_TEMPORARY);
> +   }
> +
>     bld.bld_base.soa = TRUE;
>     bld.bld_base.emit_debug = emit_debug;
>     bld.bld_base.emit_fetch_funcs[TGSI_FILE_CONSTANT] = emit_fetch_constant;
> 

Looks good to me.

Roland


More information about the mesa-dev mailing list