r600g: evergreen interpolation support.

On evergreen, interpolation has moved into the fragment shader,
with the interpolation parmaters being passed via GPRs and LDS entries.

This works out the number of interps required and reserves GPR/LDS
storage for them, it also correctly routes face/position values which
aren't interpolated from the vertex shader.

Also if we noticed nothing is to be interpolated we always setup perspective
interpolation for one value otherwise the GPU appears to lockup.

This fixes about 15 piglit tests on evergreen.
This commit is contained in:
Dave Airlie
2010-10-14 14:40:51 +10:00
parent 07a30e3d18
commit fc6caef4cb
3 changed files with 149 additions and 22 deletions

View File

@@ -32,6 +32,7 @@ struct r600_shader_io {
int sid;
unsigned interpolate;
boolean centroid;
unsigned lds_pos; /* for evergreen */
};
struct r600_shader {
@@ -40,6 +41,7 @@ struct r600_shader {
boolean flat_shade;
unsigned ninput;
unsigned noutput;
unsigned nlds;
struct r600_shader_io input[32];
struct r600_shader_io output[32];
enum radeon_family family;