Move Interpolate, Centroid and CylindricalWrap from tgsi_declaration to a separate token -- they only make sense for FS inputs and we need room for other flags in the top-level declaration token.tags/i965-primitive-restart-v2
@@ -237,12 +237,13 @@ aa_transform_inst(struct tgsi_transform_context *ctx, | |||
decl = tgsi_default_full_declaration(); | |||
decl.Declaration.File = TGSI_FILE_INPUT; | |||
/* XXX this could be linear... */ | |||
decl.Declaration.Interpolate = TGSI_INTERPOLATE_PERSPECTIVE; | |||
decl.Declaration.Interpolate = 1; | |||
decl.Declaration.Semantic = 1; | |||
decl.Semantic.Name = TGSI_SEMANTIC_GENERIC; | |||
decl.Semantic.Index = aactx->maxGeneric + 1; | |||
decl.Range.First = | |||
decl.Range.Last = aactx->maxInput + 1; | |||
decl.Interp.Interpolate = TGSI_INTERPOLATE_PERSPECTIVE; | |||
ctx->emit_declaration(ctx, &decl); | |||
/* declare new sampler */ |
@@ -201,12 +201,13 @@ aa_transform_inst(struct tgsi_transform_context *ctx, | |||
decl = tgsi_default_full_declaration(); | |||
decl.Declaration.File = TGSI_FILE_INPUT; | |||
/* XXX this could be linear... */ | |||
decl.Declaration.Interpolate = TGSI_INTERPOLATE_PERSPECTIVE; | |||
decl.Declaration.Interpolate = 1; | |||
decl.Declaration.Semantic = 1; | |||
decl.Semantic.Name = TGSI_SEMANTIC_GENERIC; | |||
decl.Semantic.Index = aactx->maxGeneric + 1; | |||
decl.Range.First = | |||
decl.Range.Last = texInput; | |||
decl.Interp.Interpolate = TGSI_INTERPOLATE_PERSPECTIVE; | |||
ctx->emit_declaration(ctx, &decl); | |||
/* declare new temp regs */ |
@@ -234,12 +234,13 @@ pstip_transform_inst(struct tgsi_transform_context *ctx, | |||
/* declare new position input reg */ | |||
decl = tgsi_default_full_declaration(); | |||
decl.Declaration.File = TGSI_FILE_INPUT; | |||
decl.Declaration.Interpolate = TGSI_INTERPOLATE_LINEAR; /* XXX? */ | |||
decl.Declaration.Interpolate = 1; | |||
decl.Declaration.Semantic = 1; | |||
decl.Semantic.Name = TGSI_SEMANTIC_POSITION; | |||
decl.Semantic.Index = 0; | |||
decl.Range.First = | |||
decl.Range.Last = wincoordInput; | |||
decl.Interp.Interpolate = TGSI_INTERPOLATE_LINEAR; /* XXX? */ | |||
ctx->emit_declaration(ctx, &decl); | |||
} | |||
@@ -104,12 +104,10 @@ tgsi_default_declaration( void ) | |||
declaration.NrTokens = 1; | |||
declaration.File = TGSI_FILE_NULL; | |||
declaration.UsageMask = TGSI_WRITEMASK_XYZW; | |||
declaration.Interpolate = TGSI_INTERPOLATE_CONSTANT; | |||
declaration.Interpolate = 0; | |||
declaration.Dimension = 0; | |||
declaration.Semantic = 0; | |||
declaration.Centroid = 0; | |||
declaration.Invariant = 0; | |||
declaration.CylindricalWrap = 0; | |||
return declaration; | |||
} | |||
@@ -121,9 +119,7 @@ tgsi_build_declaration( | |||
unsigned interpolate, | |||
unsigned dimension, | |||
unsigned semantic, | |||
unsigned centroid, | |||
unsigned invariant, | |||
unsigned cylindrical_wrap, | |||
struct tgsi_header *header ) | |||
{ | |||
struct tgsi_declaration declaration; | |||
@@ -137,9 +133,7 @@ tgsi_build_declaration( | |||
declaration.Interpolate = interpolate; | |||
declaration.Dimension = dimension; | |||
declaration.Semantic = semantic; | |||
declaration.Centroid = centroid; | |||
declaration.Invariant = invariant; | |||
declaration.CylindricalWrap = cylindrical_wrap; | |||
header_bodysize_grow( header ); | |||
@@ -194,6 +188,36 @@ tgsi_build_declaration_dimension(unsigned index_2d, | |||
return dd; | |||
} | |||
static struct tgsi_declaration_interp | |||
tgsi_default_declaration_interp( void ) | |||
{ | |||
struct tgsi_declaration_interp di; | |||
di.Interpolate = TGSI_INTERPOLATE_CONSTANT; | |||
di.Centroid = 0; | |||
di.CylindricalWrap = 0; | |||
return di; | |||
} | |||
static struct tgsi_declaration_interp | |||
tgsi_build_declaration_interp(unsigned interpolate, | |||
unsigned centroid, | |||
unsigned cylindrical_wrap, | |||
struct tgsi_declaration *declaration, | |||
struct tgsi_header *header) | |||
{ | |||
struct tgsi_declaration_interp di; | |||
di.Interpolate = interpolate; | |||
di.Centroid = centroid; | |||
di.CylindricalWrap = cylindrical_wrap; | |||
declaration_grow(declaration, header); | |||
return di; | |||
} | |||
static struct tgsi_declaration_semantic | |||
tgsi_default_declaration_semantic( void ) | |||
{ | |||
@@ -298,6 +322,7 @@ tgsi_default_full_declaration( void ) | |||
full_declaration.Declaration = tgsi_default_declaration(); | |||
full_declaration.Range = tgsi_default_declaration_range(); | |||
full_declaration.Semantic = tgsi_default_declaration_semantic(); | |||
full_declaration.Interp = tgsi_default_declaration_interp(); | |||
full_declaration.ImmediateData.u = NULL; | |||
full_declaration.Resource = tgsi_default_declaration_resource(); | |||
full_declaration.SamplerView = tgsi_default_declaration_sampler_view(); | |||
@@ -327,9 +352,7 @@ tgsi_build_full_declaration( | |||
full_decl->Declaration.Interpolate, | |||
full_decl->Declaration.Dimension, | |||
full_decl->Declaration.Semantic, | |||
full_decl->Declaration.Centroid, | |||
full_decl->Declaration.Invariant, | |||
full_decl->Declaration.CylindricalWrap, | |||
header ); | |||
if (maxsize <= size) | |||
@@ -357,6 +380,22 @@ tgsi_build_full_declaration( | |||
header); | |||
} | |||
if (full_decl->Declaration.Interpolate) { | |||
struct tgsi_declaration_interp *di; | |||
if (maxsize <= size) { | |||
return 0; | |||
} | |||
di = (struct tgsi_declaration_interp *)&tokens[size]; | |||
size++; | |||
*di = tgsi_build_declaration_interp(full_decl->Interp.Interpolate, | |||
full_decl->Interp.Centroid, | |||
full_decl->Interp.CylindricalWrap, | |||
declaration, | |||
header); | |||
} | |||
if( full_decl->Declaration.Semantic ) { | |||
struct tgsi_declaration_semantic *ds; | |||
@@ -306,36 +306,39 @@ iter_declaration( | |||
} | |||
} | |||
if (iter->processor.Processor == TGSI_PROCESSOR_FRAGMENT && | |||
decl->Declaration.File == TGSI_FILE_INPUT) | |||
{ | |||
TXT( ", " ); | |||
ENM( decl->Declaration.Interpolate, tgsi_interpolate_names ); | |||
} | |||
if (decl->Declaration.Interpolate) { | |||
if (iter->processor.Processor == TGSI_PROCESSOR_FRAGMENT && | |||
decl->Declaration.File == TGSI_FILE_INPUT) | |||
{ | |||
TXT( ", " ); | |||
ENM( decl->Interp.Interpolate, tgsi_interpolate_names ); | |||
} | |||
if (decl->Declaration.Centroid) { | |||
TXT( ", CENTROID" ); | |||
if (decl->Interp.Centroid) { | |||
TXT( ", CENTROID" ); | |||
} | |||
if (decl->Interp.CylindricalWrap) { | |||
TXT(", CYLWRAP_"); | |||
if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_X) { | |||
CHR('X'); | |||
} | |||
if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Y) { | |||
CHR('Y'); | |||
} | |||
if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Z) { | |||
CHR('Z'); | |||
} | |||
if (decl->Interp.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_W) { | |||
CHR('W'); | |||
} | |||
} | |||
} | |||
if (decl->Declaration.Invariant) { | |||
TXT( ", INVARIANT" ); | |||
} | |||
if (decl->Declaration.CylindricalWrap) { | |||
TXT(", CYLWRAP_"); | |||
if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_X) { | |||
CHR('X'); | |||
} | |||
if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Y) { | |||
CHR('Y'); | |||
} | |||
if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_Z) { | |||
CHR('Z'); | |||
} | |||
if (decl->Declaration.CylindricalWrap & TGSI_CYLINDRICAL_WRAP_W) { | |||
CHR('W'); | |||
} | |||
} | |||
if (decl->Declaration.File == TGSI_FILE_IMMEDIATE_ARRAY) { | |||
unsigned i; |
@@ -2371,7 +2371,7 @@ exec_declaration(struct tgsi_exec_machine *mach, | |||
eval_coef_func eval; | |||
uint i, j; | |||
switch (decl->Declaration.Interpolate) { | |||
switch (decl->Interp.Interpolate) { | |||
case TGSI_INTERPOLATE_CONSTANT: | |||
eval = eval_constant_coef; | |||
break; |
@@ -113,6 +113,10 @@ tgsi_parse_token( | |||
next_token(ctx, &decl->Dim); | |||
} | |||
if( decl->Declaration.Interpolate ) { | |||
next_token( ctx, &decl->Interp ); | |||
} | |||
if( decl->Declaration.Semantic ) { | |||
next_token( ctx, &decl->Semantic ); | |||
} |
@@ -67,6 +67,7 @@ struct tgsi_full_declaration | |||
struct tgsi_declaration Declaration; | |||
struct tgsi_declaration_range Range; | |||
struct tgsi_declaration_dimension Dim; | |||
struct tgsi_declaration_interp Interp; | |||
struct tgsi_declaration_semantic Semantic; | |||
struct tgsi_immediate_array_data ImmediateData; | |||
struct tgsi_declaration_resource Resource; |
@@ -1170,7 +1170,7 @@ emit_declaration( | |||
for( i = first; i <= last; i++ ) { | |||
for( j = 0; j < NUM_CHANNELS; j++ ) { | |||
if( mask & (1 << j) ) { | |||
switch( decl->Declaration.Interpolate ) { | |||
switch( decl->Interp.Interpolate ) { | |||
case TGSI_INTERPOLATE_CONSTANT: | |||
emit_coef_a0( func, 0, i, j ); | |||
emit_inputs( func, 0, i, j ); |
@@ -157,9 +157,9 @@ tgsi_scan_shader(const struct tgsi_token *tokens, | |||
if (file == TGSI_FILE_INPUT) { | |||
info->input_semantic_name[reg] = (ubyte)fulldecl->Semantic.Name; | |||
info->input_semantic_index[reg] = (ubyte)fulldecl->Semantic.Index; | |||
info->input_interpolate[reg] = (ubyte)fulldecl->Declaration.Interpolate; | |||
info->input_centroid[reg] = (ubyte)fulldecl->Declaration.Centroid; | |||
info->input_cylindrical_wrap[reg] = (ubyte)fulldecl->Declaration.CylindricalWrap; | |||
info->input_interpolate[reg] = (ubyte)fulldecl->Interp.Interpolate; | |||
info->input_centroid[reg] = (ubyte)fulldecl->Interp.Centroid; | |||
info->input_cylindrical_wrap[reg] = (ubyte)fulldecl->Interp.CylindricalWrap; | |||
info->num_inputs++; | |||
if (procType == TGSI_PROCESSOR_FRAGMENT && |
@@ -1225,7 +1225,8 @@ static boolean parse_declaration( struct translate_ctx *ctx ) | |||
if (str_match_no_case( &cur, tgsi_interpolate_names[i] )) { | |||
if (is_digit_alpha_underscore( cur )) | |||
continue; | |||
decl.Declaration.Interpolate = i; | |||
decl.Declaration.Interpolate = 1; | |||
decl.Interp.Interpolate = i; | |||
ctx->cur = cur; | |||
break; |
@@ -46,6 +46,7 @@ union tgsi_any_token { | |||
struct tgsi_declaration decl; | |||
struct tgsi_declaration_range decl_range; | |||
struct tgsi_declaration_dimension decl_dim; | |||
struct tgsi_declaration_interp decl_interp; | |||
struct tgsi_declaration_semantic decl_semantic; | |||
struct tgsi_declaration_sampler_view decl_sampler_view; | |||
struct tgsi_immediate imm; | |||
@@ -1229,25 +1230,28 @@ emit_decl_fs(struct ureg_program *ureg, | |||
unsigned cylindrical_wrap, | |||
unsigned centroid) | |||
{ | |||
union tgsi_any_token *out = get_tokens(ureg, DOMAIN_DECL, 3); | |||
union tgsi_any_token *out = get_tokens(ureg, DOMAIN_DECL, 4); | |||
out[0].value = 0; | |||
out[0].decl.Type = TGSI_TOKEN_TYPE_DECLARATION; | |||
out[0].decl.NrTokens = 3; | |||
out[0].decl.NrTokens = 4; | |||
out[0].decl.File = file; | |||
out[0].decl.UsageMask = TGSI_WRITEMASK_XYZW; /* FIXME! */ | |||
out[0].decl.Interpolate = interpolate; | |||
out[0].decl.Interpolate = 1; | |||
out[0].decl.Semantic = 1; | |||
out[0].decl.CylindricalWrap = cylindrical_wrap; | |||
out[0].decl.Centroid = centroid; | |||
out[1].value = 0; | |||
out[1].decl_range.First = index; | |||
out[1].decl_range.Last = index; | |||
out[2].value = 0; | |||
out[2].decl_semantic.Name = semantic_name; | |||
out[2].decl_semantic.Index = semantic_index; | |||
out[2].decl_interp.Interpolate = interpolate; | |||
out[2].decl_interp.CylindricalWrap = cylindrical_wrap; | |||
out[2].decl_interp.Centroid = centroid; | |||
out[3].value = 0; | |||
out[3].decl_semantic.Name = semantic_name; | |||
out[3].decl_semantic.Index = semantic_index; | |||
} | |||
@@ -1263,7 +1267,6 @@ static void emit_decl_range( struct ureg_program *ureg, | |||
out[0].decl.NrTokens = 2; | |||
out[0].decl.File = file; | |||
out[0].decl.UsageMask = TGSI_WRITEMASK_XYZW; | |||
out[0].decl.Interpolate = TGSI_INTERPOLATE_CONSTANT; | |||
out[0].decl.Semantic = 0; | |||
out[1].value = 0; | |||
@@ -1285,7 +1288,6 @@ emit_decl_range2D(struct ureg_program *ureg, | |||
out[0].decl.NrTokens = 3; | |||
out[0].decl.File = file; | |||
out[0].decl.UsageMask = TGSI_WRITEMASK_XYZW; | |||
out[0].decl.Interpolate = TGSI_INTERPOLATE_CONSTANT; | |||
out[0].decl.Dimension = 1; | |||
out[1].value = 0; | |||
@@ -1312,7 +1314,6 @@ emit_decl_sampler_view(struct ureg_program *ureg, | |||
out[0].decl.NrTokens = 3; | |||
out[0].decl.File = TGSI_FILE_SAMPLER_VIEW; | |||
out[0].decl.UsageMask = 0xf; | |||
out[0].decl.Interpolate = TGSI_INTERPOLATE_CONSTANT; | |||
out[1].value = 0; | |||
out[1].decl_range.First = index; |
@@ -298,12 +298,13 @@ pstip_transform_inst(struct tgsi_transform_context *ctx, | |||
/* declare new position input reg */ | |||
decl = tgsi_default_full_declaration(); | |||
decl.Declaration.File = TGSI_FILE_INPUT; | |||
decl.Declaration.Interpolate = TGSI_INTERPOLATE_LINEAR; | |||
decl.Declaration.Interpolate = 1; | |||
decl.Declaration.Semantic = 1; | |||
decl.Semantic.Name = TGSI_SEMANTIC_POSITION; | |||
decl.Semantic.Index = 0; | |||
decl.Range.First = | |||
decl.Range.Last = wincoordInput; | |||
decl.Interp.Interpolate = TGSI_INTERPOLATE_LINEAR; | |||
ctx->emit_declaration(ctx, &decl); | |||
} | |||
@@ -1559,19 +1559,11 @@ of TGSI_FILE. | |||
UsageMask field specifies which of the register components can be accessed | |||
and is one of TGSI_WRITEMASK. | |||
Interpolate field is only valid for fragment shader INPUT register files. | |||
It specifes the way input is being interpolated by the rasteriser and is one | |||
of TGSI_INTERPOLATE. | |||
If Dimension flag is set to 1, a Declaration Dimension token follows. | |||
If Semantic flag is set to 1, a Declaration Semantic token follows. | |||
CylindricalWrap bitfield is only valid for fragment shader INPUT register | |||
files. It specifies which register components should be subject to cylindrical | |||
wrapping when interpolating by the rasteriser. If TGSI_CYLINDRICAL_WRAP_X | |||
is set to 1, the X component should be interpolated according to cylindrical | |||
wrapping rules. | |||
If Interpolate flag is set to 1, a Declaration Interpolate token follows. | |||
If file is TGSI_FILE_RESOURCE, a Declaration Resource token follows. | |||
@@ -1718,6 +1710,20 @@ is a writable stencil reference value. Only the Y component is writable. | |||
This allows the fragment shader to change the fragments stencilref value. | |||
Declaration Interpolate | |||
^^^^^^^^^^^^^^^^^^^^^^^ | |||
This token is only valid for fragment shader INPUT declarations. | |||
The Interpolate field specifes the way input is being interpolated by | |||
the rasteriser and is one of TGSI_INTERPOLATE_*. | |||
The CylindricalWrap bitfield specifies which register components | |||
should be subject to cylindrical wrapping when interpolating by the | |||
rasteriser. If TGSI_CYLINDRICAL_WRAP_X is set to 1, the X component | |||
should be interpolated according to cylindrical wrapping rules. | |||
Declaration Sampler View | |||
^^^^^^^^^^^^^^^^^^^^^^^^ | |||
@@ -805,7 +805,7 @@ bool Source::scanDeclaration(const struct tgsi_full_declaration *decl) | |||
info->in[i].si = si; | |||
if (info->type == PIPE_SHADER_FRAGMENT) { | |||
// translate interpolation mode | |||
switch (decl->Declaration.Interpolate) { | |||
switch (decl->Interp.Interpolate) { | |||
case TGSI_INTERPOLATE_CONSTANT: | |||
info->in[i].flat = 1; | |||
break; | |||
@@ -818,7 +818,7 @@ bool Source::scanDeclaration(const struct tgsi_full_declaration *decl) | |||
default: | |||
break; | |||
} | |||
if (decl->Declaration.Centroid) | |||
if (decl->Interp.Centroid) | |||
info->in[i].centroid = 1; | |||
} | |||
} |
@@ -94,11 +94,12 @@ static void emit_output(struct tgsi_transform_context *ctx, | |||
decl = tgsi_default_full_declaration(); | |||
decl.Declaration.File = TGSI_FILE_OUTPUT; | |||
decl.Declaration.Interpolate = interp; | |||
decl.Declaration.Interpolate = 1; | |||
decl.Declaration.Semantic = TRUE; | |||
decl.Semantic.Name = name; | |||
decl.Semantic.Index = index; | |||
decl.Range.First = decl.Range.Last = reg; | |||
decl.Interp.Interpolate = interp; | |||
ctx->emit_declaration(ctx, &decl); | |||
++vsctx->num_outputs; | |||
} |
@@ -722,8 +722,8 @@ static int tgsi_declaration(struct r600_shader_ctx *ctx) | |||
ctx->shader->input[i].name = d->Semantic.Name; | |||
ctx->shader->input[i].sid = d->Semantic.Index; | |||
ctx->shader->input[i].spi_sid = r600_spi_sid(&ctx->shader->input[i]); | |||
ctx->shader->input[i].interpolate = d->Declaration.Interpolate; | |||
ctx->shader->input[i].centroid = d->Declaration.Centroid; | |||
ctx->shader->input[i].interpolate = d->Interp.Interpolate; | |||
ctx->shader->input[i].centroid = d->Interp.Centroid; | |||
ctx->shader->input[i].gpr = ctx->file_offset[TGSI_FILE_INPUT] + d->Range.First; | |||
if (ctx->type == TGSI_PROCESSOR_FRAGMENT) { | |||
switch (ctx->shader->input[i].name) { | |||
@@ -749,7 +749,7 @@ static int tgsi_declaration(struct r600_shader_ctx *ctx) | |||
ctx->shader->output[i].sid = d->Semantic.Index; | |||
ctx->shader->output[i].spi_sid = r600_spi_sid(&ctx->shader->output[i]); | |||
ctx->shader->output[i].gpr = ctx->file_offset[TGSI_FILE_OUTPUT] + d->Range.First; | |||
ctx->shader->output[i].interpolate = d->Declaration.Interpolate; | |||
ctx->shader->output[i].interpolate = d->Interp.Interpolate; | |||
ctx->shader->output[i].write_mask = d->Declaration.UsageMask; | |||
if (ctx->type == TGSI_PROCESSOR_VERTEX) { | |||
switch (d->Semantic.Name) { |
@@ -199,7 +199,7 @@ static void declare_input_fs( | |||
LLVMValueRef attr_number = lp_build_const_int32(gallivm, input_index); | |||
/* XXX: Handle all possible interpolation modes */ | |||
switch (decl->Declaration.Interpolate) { | |||
switch (decl->Interp.Interpolate) { | |||
case TGSI_INTERPOLATE_COLOR: | |||
if (si_shader_ctx->rctx->rasterizer->flatshade) | |||
intr_name = "llvm.SI.fs.interp.constant"; | |||
@@ -331,14 +331,14 @@ static void si_llvm_emit_epilogue(struct lp_build_tgsi_context * bld_base) | |||
i = shader->ninput++; | |||
shader->input[i].name = d->Semantic.Name; | |||
shader->input[i].sid = d->Semantic.Index; | |||
shader->input[i].interpolate = d->Declaration.Interpolate; | |||
shader->input[i].centroid = d->Declaration.Centroid; | |||
shader->input[i].interpolate = d->Interp.Interpolate; | |||
shader->input[i].centroid = d->Interp.Centroid; | |||
break; | |||
case TGSI_FILE_OUTPUT: | |||
i = shader->noutput++; | |||
shader->output[i].name = d->Semantic.Name; | |||
shader->output[i].sid = d->Semantic.Index; | |||
shader->output[i].interpolate = d->Declaration.Interpolate; | |||
shader->output[i].interpolate = d->Interp.Interpolate; | |||
break; | |||
} | |||
@@ -115,12 +115,11 @@ struct tgsi_declaration | |||
unsigned NrTokens : 8; /**< UINT */ | |||
unsigned File : 4; /**< one of TGSI_FILE_x */ | |||
unsigned UsageMask : 4; /**< bitmask of TGSI_WRITEMASK_x flags */ | |||
unsigned Interpolate : 4; /**< one of TGSI_INTERPOLATE_x */ | |||
unsigned Dimension : 1; /**< any extra dimension info? */ | |||
unsigned Semantic : 1; /**< BOOL, any semantic info? */ | |||
unsigned Centroid : 1; /**< centroid sampling? */ | |||
unsigned Interpolate : 1; /**< any interpolation info? */ | |||
unsigned Invariant : 1; /**< invariant optimization? */ | |||
unsigned CylindricalWrap:4; /**< TGSI_CYLINDRICAL_WRAP_x flags */ | |||
unsigned Padding : 8; | |||
}; | |||
struct tgsi_declaration_range | |||
@@ -135,6 +134,14 @@ struct tgsi_declaration_dimension | |||
unsigned Padding:16; | |||
}; | |||
struct tgsi_declaration_interp | |||
{ | |||
unsigned Interpolate : 4; /**< one of TGSI_INTERPOLATE_x */ | |||
unsigned Centroid : 1; /**< centroid sampling? */ | |||
unsigned CylindricalWrap:4; /**< TGSI_CYLINDRICAL_WRAP_x flags */ | |||
unsigned Padding : 23; | |||
}; | |||
#define TGSI_SEMANTIC_POSITION 0 | |||
#define TGSI_SEMANTIC_COLOR 1 | |||
#define TGSI_SEMANTIC_BCOLOR 2 /**< back-face color */ |