--- src/gallium/auxiliary/tgsi/tgsi_dump.c | 3 +- src/gallium/auxiliary/tgsi/tgsi_text.c | 3 +- src/gallium/auxiliary/tgsi/tgsi_ureg.c | 36 +++++++++++++++++++++------- src/gallium/auxiliary/tgsi/tgsi_ureg.h | 6 ++++ src/gallium/include/pipe/p_shader_tokens.h | 3 +- 5 files changed, 39 insertions(+), 12 deletions(-)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c index e830aa5..bd299b0 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_dump.c +++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c @@ -129,7 +129,8 @@ static const char *semantic_names[] = "PRIM_ID", "INSTANCEID", "VERTEXID", - "STENCIL" + "STENCIL", + "CLIPDIST" }; static const char *immediate_type_names[] = diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c b/src/gallium/auxiliary/tgsi/tgsi_text.c index eb9190c..f46ba19 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_text.c +++ b/src/gallium/auxiliary/tgsi/tgsi_text.c @@ -1024,7 +1024,8 @@ static const char *semantic_names[TGSI_SEMANTIC_COUNT] = "PRIM_ID", "INSTANCEID", "VERTEXID", - "STENCIL" + "STENCIL", + "CLIPDIST" }; static const char *interpolate_names[TGSI_INTERPOLATE_COUNT] = diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c index 17f9ce2..56c4492 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c @@ -122,6 +122,7 @@ struct ureg_program struct { unsigned semantic_name; unsigned semantic_index; + unsigned usage_mask; } output[UREG_MAX_OUTPUT]; unsigned nr_outputs; @@ -396,21 +397,25 @@ ureg_DECL_system_value(struct ureg_program *ureg, struct ureg_dst -ureg_DECL_output( struct ureg_program *ureg, - unsigned name, - unsigned index ) +ureg_DECL_output_masked( struct ureg_program *ureg, + unsigned name, + unsigned index, + unsigned usage_mask ) { unsigned i; for (i = 0; i < ureg->nr_outputs; i++) { if (ureg->output[i].semantic_name == name && - ureg->output[i].semantic_index == index) + ureg->output[i].semantic_index == index) { + ureg->output[i].usage_mask |= usage_mask; goto out; + } } if (ureg->nr_outputs < UREG_MAX_OUTPUT) { ureg->output[i].semantic_name = name; ureg->output[i].semantic_index = index; + ureg->output[i].usage_mask = usage_mask; ureg->nr_outputs++; } else { @@ -422,6 +427,15 @@ out: } +struct ureg_dst +ureg_DECL_output( struct ureg_program *ureg, + unsigned name, + unsigned index ) +{ + return ureg_DECL_output_masked(ureg, name, index, TGSI_WRITEMASK_XYZW); +} + + /* Returns a new constant register. Keep track of which have been * referred to so that we can emit decls later. * @@ -1181,7 +1195,8 @@ emit_decl_semantic(struct ureg_program *ureg, unsigned file, unsigned index, unsigned semantic_name, - unsigned semantic_index) + unsigned semantic_index, + unsigned usage_mask) { union tgsi_any_token *out = get_tokens(ureg, DOMAIN_DECL, 3); @@ -1189,7 +1204,7 @@ emit_decl_semantic(struct ureg_program *ureg, out[0].decl.Type = TGSI_TOKEN_TYPE_DECLARATION; out[0].decl.NrTokens = 3; out[0].decl.File = file; - out[0].decl.UsageMask = TGSI_WRITEMASK_XYZW; /* FIXME! */ + out[0].decl.UsageMask = usage_mask; out[0].decl.Semantic = 1; out[1].value = 0; @@ -1427,7 +1442,8 @@ static void emit_decls( struct ureg_program *ureg ) TGSI_FILE_INPUT, ureg->gs_input[i].index, ureg->gs_input[i].semantic_name, - ureg->gs_input[i].semantic_index); + ureg->gs_input[i].semantic_index, + TGSI_WRITEMASK_XYZW); } } @@ -1436,7 +1452,8 @@ static void emit_decls( struct ureg_program *ureg ) TGSI_FILE_SYSTEM_VALUE, ureg->system_value[i].index, ureg->system_value[i].semantic_name, - ureg->system_value[i].semantic_index); + ureg->system_value[i].semantic_index, + TGSI_WRITEMASK_XYZW); } for (i = 0; i < ureg->nr_outputs; i++) { @@ -1444,7 +1461,8 @@ static void emit_decls( struct ureg_program *ureg ) TGSI_FILE_OUTPUT, i, ureg->output[i].semantic_name, - ureg->output[i].semantic_index); + ureg->output[i].semantic_index, + ureg->output[i].usage_mask); } for (i = 0; i < ureg->nr_samplers; i++) { diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.h b/src/gallium/auxiliary/tgsi/tgsi_ureg.h index bf55d54..07ab8cb 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h @@ -229,6 +229,12 @@ ureg_DECL_system_value(struct ureg_program *, unsigned semantic_index); struct ureg_dst +ureg_DECL_output_masked( struct ureg_program *, + unsigned semantic_name, + unsigned semantic_index, + unsigned usage_mask ); + +struct ureg_dst ureg_DECL_output( struct ureg_program *, unsigned semantic_name, unsigned semantic_index ); diff --git a/src/gallium/include/pipe/p_shader_tokens.h b/src/gallium/include/pipe/p_shader_tokens.h index 10cfaf6..330e0ba 100644 --- a/src/gallium/include/pipe/p_shader_tokens.h +++ b/src/gallium/include/pipe/p_shader_tokens.h @@ -146,7 +146,8 @@ struct tgsi_declaration_dimension #define TGSI_SEMANTIC_INSTANCEID 10 #define TGSI_SEMANTIC_VERTEXID 11 #define TGSI_SEMANTIC_STENCIL 12 -#define TGSI_SEMANTIC_COUNT 13 /**< number of semantic values */ +#define TGSI_SEMANTIC_CLIPDIST 13 +#define TGSI_SEMANTIC_COUNT 14 /**< number of semantic values */ struct tgsi_declaration_semantic { -- 1.7.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev