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 <za...@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 >> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev