r600g: take constantly interpolated values into a/c
authorDave Airlie <airlied@redhat.com>
Thu, 15 Sep 2011 11:39:26 +0000 (12:39 +0100)
committerDave Airlie <airlied@redhat.com>
Fri, 16 Sep 2011 08:26:57 +0000 (09:26 +0100)
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>
src/gallium/drivers/r600/evergreen_state.c

index 0e7e635ce8e63c90de346d62f0c6af03c27ca997..3b7844f0fa4a1dc59c74e8173ec5f5c355565eed 100644 (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);