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

Roland Scheidegger sroland at vmware.com
Wed Feb 5 19:19:45 CET 2014


I don't think that will actually work as then the new code will never
get used and we will always have a huge static array.
There doesn't seem to be an explicit limit for immediates we could use -
there's one in patch 3/3 but that's only a ureg limit. Maybe need a new
limit somewhere.

Roland


Am 05.02.2014 19:00, schrieb Jose Fonseca:
> 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