summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/tgsi/tgsi_transform.c
diff options
context:
space:
mode:
authorZack Rusin <zackr@vmware.com>2009-12-14 16:34:07 -0500
committerZack Rusin <zackr@vmware.com>2009-12-14 16:35:09 -0500
commit3ff688ea299581e60caf5d6e1a464f68c717fe83 (patch)
treedcca338a1081b11a19bead6aed9053151e15b2a7 /src/gallium/auxiliary/tgsi/tgsi_transform.c
parent41b52aa3362665e08bdc2f75cc9bfdc4debc6eb0 (diff)
tgsi: add properties and system value register
adds support for properties to all parts of the tgsi framework, plus introduces a new register which will be used for system generated values.
Diffstat (limited to 'src/gallium/auxiliary/tgsi/tgsi_transform.c')
-rw-r--r--src/gallium/auxiliary/tgsi/tgsi_transform.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_transform.c b/src/gallium/auxiliary/tgsi/tgsi_transform.c
index 8b8f489b35..ae875f29ab 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_transform.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_transform.c
@@ -79,6 +79,19 @@ emit_immediate(struct tgsi_transform_context *ctx,
}
+static void
+emit_property(struct tgsi_transform_context *ctx,
+ const struct tgsi_full_property *prop)
+{
+ uint ti = ctx->ti;
+
+ ti += tgsi_build_full_property(prop,
+ ctx->tokens_out + ti,
+ ctx->header,
+ ctx->max_tokens_out - ti);
+ ctx->ti = ti;
+}
+
/**
* Apply user-defined transformations to the input shader to produce
@@ -110,6 +123,7 @@ tgsi_transform_shader(const struct tgsi_token *tokens_in,
ctx->emit_instruction = emit_instruction;
ctx->emit_declaration = emit_declaration;
ctx->emit_immediate = emit_immediate;
+ ctx->emit_property = emit_property;
ctx->tokens_out = tokens_out;
ctx->max_tokens_out = max_tokens_out;
@@ -182,6 +196,17 @@ tgsi_transform_shader(const struct tgsi_token *tokens_in,
ctx->emit_immediate(ctx, fullimm);
}
break;
+ case TGSI_TOKEN_TYPE_PROPERTY:
+ {
+ struct tgsi_full_property *fullprop
+ = &parse.FullToken.FullProperty;
+
+ if (ctx->transform_property)
+ ctx->transform_property(ctx, fullprop);
+ else
+ ctx->emit_property(ctx, fullprop);
+ }
+ break;
default:
assert( 0 );