From b16bb3f50f0d71f7e720c4feefcb86e15090d52f Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 14 Mar 2014 14:49:33 -0600 Subject: [PATCH] tgsi: add prolog() method to tgsi_transform_context Called when the user can insert new decls, instructions. This could be used in a few places in the 'draw' module. Reviewed-by: Charmaine Lee --- src/gallium/auxiliary/tgsi/tgsi_transform.c | 7 +++++++ src/gallium/auxiliary/tgsi/tgsi_transform.h | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/src/gallium/auxiliary/tgsi/tgsi_transform.c b/src/gallium/auxiliary/tgsi/tgsi_transform.c index b16d29661f3..93e5b98c915 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_transform.c +++ b/src/gallium/auxiliary/tgsi/tgsi_transform.c @@ -109,6 +109,7 @@ tgsi_transform_shader(const struct tgsi_token *tokens_in, struct tgsi_transform_context *ctx) { uint procType; + boolean first_instruction = TRUE; /* input shader */ struct tgsi_parse_context parse; @@ -166,10 +167,16 @@ tgsi_transform_shader(const struct tgsi_token *tokens_in, struct tgsi_full_instruction *fullinst = &parse.FullToken.FullInstruction; + if (first_instruction && ctx->prolog) { + ctx->prolog(ctx); + } + if (ctx->transform_instruction) ctx->transform_instruction(ctx, fullinst); else ctx->emit_instruction(ctx, fullinst); + + first_instruction = FALSE; } break; diff --git a/src/gallium/auxiliary/tgsi/tgsi_transform.h b/src/gallium/auxiliary/tgsi/tgsi_transform.h index 8b96664ae87..5ec0719464c 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_transform.h +++ b/src/gallium/auxiliary/tgsi/tgsi_transform.h @@ -56,6 +56,12 @@ struct tgsi_transform_context void (*transform_property)(struct tgsi_transform_context *ctx, struct tgsi_full_property *prop); + /** + * Called after last declaration, before first instruction. This is + * where the user might insert new declarations and/or instructions. + */ + void (*prolog)(struct tgsi_transform_context *ctx); + /** * Called at end of input program to allow caller to append extra * instructions. Return number of tokens emitted. -- 2.30.2