[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:21:09 CET 2014


Sorry just saw your other answers so you can forget this.

Roland

Am 05.02.2014 19:19, schrieb Roland Scheidegger:
> 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