summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/tgsi
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2014-03-14 14:49:33 -0600
committerBrian Paul <[email protected]>2014-09-22 16:56:23 -0600
commitb16bb3f50f0d71f7e720c4feefcb86e15090d52f (patch)
treefc8288e79f28b9a348961e953b55622e6e6042ee /src/gallium/auxiliary/tgsi
parent2826212dc79b90fcb008b72e5c1fdc34e8a1ac71 (diff)
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 <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/tgsi')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_transform.c7
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_transform.h6
2 files changed, 13 insertions, 0 deletions
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
@@ -57,6 +57,12 @@ struct tgsi_transform_context
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.
*/