[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