gallium/tgsi: Move interpolation info from tgsi_declaration to a separate token.
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.
This commit is contained in:
@@ -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 (decl->Declaration.Interpolate) {
|
||||
if (iter->processor.Processor == TGSI_PROCESSOR_FRAGMENT &&
|
||||
decl->Declaration.File == TGSI_FILE_INPUT)
|
||||
{
|
||||
TXT( ", " );
|
||||
ENM( decl->Declaration.Interpolate, tgsi_interpolate_names );
|
||||
ENM( decl->Interp.Interpolate, tgsi_interpolate_names );
|
||||
}
|
||||
|
||||
if (decl->Declaration.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 */
|
||||
|
Reference in New Issue
Block a user