We want to call the caller's epilog callback when we find the TGSI END instruction, not after it. --- src/gallium/auxiliary/tgsi/tgsi_transform.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_transform.c b/src/gallium/auxiliary/tgsi/tgsi_transform.c index 93e5b98..5a5f56c 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_transform.c +++ b/src/gallium/auxiliary/tgsi/tgsi_transform.c @@ -171,10 +171,19 @@ tgsi_transform_shader(const struct tgsi_token *tokens_in, ctx->prolog(ctx); } - if (ctx->transform_instruction) - ctx->transform_instruction(ctx, fullinst); - else + if (fullinst->Instruction.Opcode == TGSI_OPCODE_END + && ctx->epilog) { + /* Emit caller's epilog */ + ctx->epilog(ctx); + /* Emit END */ ctx->emit_instruction(ctx, fullinst); + } + else { + if (ctx->transform_instruction) + ctx->transform_instruction(ctx, fullinst); + else + ctx->emit_instruction(ctx, fullinst); + } first_instruction = FALSE; } @@ -220,10 +229,6 @@ tgsi_transform_shader(const struct tgsi_token *tokens_in, } } - if (ctx->epilog) { - ctx->epilog(ctx); - } - tgsi_parse_free (&parse); return ctx->ti; -- 1.7.10.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev