r600: Fix interpolateAtCentroid

If the instruction interpolateAtCentroid is used the extra interpolator
must also be enabled in the state.

Fixes: fs-interpolateatcentroid-block

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
Gert Wollny 2019-08-28 10:48:04 +02:00
parent 1481d05409
commit 7cbb44aa6a
4 changed files with 14 additions and 1 deletions

View file

@ -3364,6 +3364,12 @@ void evergreen_update_ps_state(struct pipe_context *ctx, struct r600_pipe_shader
spi_baryc_cntl |= spi_baryc_enable_bit[k];
have_perspective |= k < 3;
have_linear |= !(k < 3);
if (rshader->input[i].uses_interpolate_at_centroid) {
k = eg_get_interpolator_index(
rshader->input[i].interpolate,
TGSI_INTERPOLATE_LOC_CENTROID);
spi_baryc_cntl |= spi_baryc_enable_bit[k];
}
}
}

View file

@ -6973,6 +6973,7 @@ static int tgsi_interp_egcm(struct r600_shader_ctx *ctx)
}
else {
location = TGSI_INTERPOLATE_LOC_CENTROID;
ctx->shader->input[input].uses_interpolate_at_centroid = 1;
}
k = eg_get_interpolator_index(ctx->shader->input[input].interpolate, location);

View file

@ -54,6 +54,7 @@ struct r600_shader_io {
unsigned back_color_input;
unsigned write_mask;
int ring_offset;
unsigned uses_interpolate_at_centroid;
};
struct r600_shader_atomic {

View file

@ -171,8 +171,13 @@ int bc_parser::parse_decls() {
sh->add_input(in.gpr, preloaded, /*in.write_mask*/ 0x0F);
if (ps_interp && in.spi_sid) {
int k = eg_get_interpolator_index(in.interpolate, in.interpolate_location);
if (k >= 0)
if (k >= 0) {
ij_interpolators[k] |= true;
if (in.uses_interpolate_at_centroid) {
k = eg_get_interpolator_index(in.interpolate, TGSI_INTERPOLATE_LOC_CENTROID);
ij_interpolators[k] |= true;
}
}
}
}