r600g: take constantly interpolated values into a/c

We could constant interpolated values now and set have_perspective
if nothing else is set to avoid a GPU hang.

Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Dave Airlie 2011-09-15 12:39:26 +01:00
parent 21c5607e64
commit 2dfabdd0a4

View file

@ -2230,9 +2230,7 @@ void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader
else if (rshader->input[i].name == TGSI_SEMANTIC_FACE)
face_index = i;
else {
if (rshader->input[i].interpolate == TGSI_INTERPOLATE_LINEAR ||
rshader->input[i].interpolate == TGSI_INTERPOLATE_PERSPECTIVE)
ninterp++;
ninterp++;
if (rshader->input[i].interpolate == TGSI_INTERPOLATE_LINEAR)
have_linear = TRUE;
if (rshader->input[i].interpolate == TGSI_INTERPOLATE_PERSPECTIVE)
@ -2274,6 +2272,9 @@ void evergreen_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shader
have_perspective = TRUE;
}
if (!have_perspective && !have_linear)
have_perspective = TRUE;
spi_ps_in_control_0 = S_0286CC_NUM_INTERP(ninterp) |
S_0286CC_PERSP_GRADIENT_ENA(have_perspective) |
S_0286CC_LINEAR_GRADIENT_ENA(have_linear);