r600g: fix evergreen interpolation setup
authorAndre Maasikas <amaasikas@gmail.com>
Wed, 6 Oct 2010 18:14:15 +0000 (21:14 +0300)
committerAndre Maasikas <amaasikas@gmail.com>
Thu, 7 Oct 2010 04:51:32 +0000 (07:51 +0300)
interp data is stored in gpr0 so first interp overwrote it
and subsequent ones got wrong values

reserve register 0 so it's not used for attribs.
alternative is to interpolate attrib0 last (reverse, as r600c does)

src/gallium/drivers/r600/r600_shader.c

index 016e75bd52b496959c5d522f3d48cf7204663149..1f79c15a2b5657b42d5fcac1d46f3cc8bb1305da 100644 (file)
@@ -529,6 +529,9 @@ int r600_shader_from_tgsi(const struct tgsi_token *tokens, struct r600_shader *s
        if (ctx.type == TGSI_PROCESSOR_VERTEX) {
                ctx.file_offset[TGSI_FILE_INPUT] = 1;
        }
+       if (ctx.type == TGSI_PROCESSOR_FRAGMENT && ctx.bc->chiprev == 2) {
+               ctx.file_offset[TGSI_FILE_INPUT] = 1;
+       }
        ctx.file_offset[TGSI_FILE_OUTPUT] = ctx.file_offset[TGSI_FILE_INPUT] +
                                                ctx.info.file_count[TGSI_FILE_INPUT];
        ctx.file_offset[TGSI_FILE_TEMPORARY] = ctx.file_offset[TGSI_FILE_OUTPUT] +