Re: [Mesa-dev] [PATCH 2/3] gallivm: make sure analysis works with large number of immediates
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
Re: [Mesa-dev] [PATCH 2/3] gallivm: make sure analysis works with large number of immediates
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
Re: [Mesa-dev] [PATCH 2/3] gallivm: make sure analysis works with large number of immediates
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 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
Re: [Mesa-dev] [PATCH 2/3] gallivm: make sure analysis works with large number of immediates
On 02/04/2014 05:34 PM, Zack Rusin wrote: 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 Reviewed-by: Brian Paul bri...@vmware.com ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev