r600g: only pick centroid coordinate when asked.
authorDave Airlie <airlied@redhat.com>
Thu, 14 Oct 2010 03:29:11 +0000 (13:29 +1000)
committerDave Airlie <airlied@redhat.com>
Thu, 14 Oct 2010 04:15:15 +0000 (14:15 +1000)
TGSI tells us when to use this, its not hooked up from GLSL to MESA to TGSI yet though.

src/gallium/drivers/r600/r600_shader.c
src/gallium/drivers/r600/r600_shader.h

index 4a9d9beaba59018550cfa5e2fbba1d2262a5c04c..512cc4a32f48647012963bc43cf0b78454a335fc 100644 (file)
@@ -115,7 +115,8 @@ static void r600_pipe_shader_ps(struct pipe_context *ctx, struct r600_pipe_shade
 
        for (i = 0; i < rshader->ninput; i++) {
                tmp = S_028644_SEMANTIC(r600_find_vs_semantic_index(&rctx->vs_shader->shader, rshader, i));
-               tmp |= S_028644_SEL_CENTROID(1);
+               if (rshader->input[i].centroid)
+                       tmp |= S_028644_SEL_CENTROID(1);
                if (rshader->input[i].name == TGSI_SEMANTIC_POSITION)
                        have_pos = TRUE;
                if (rshader->input[i].name == TGSI_SEMANTIC_COLOR ||
@@ -439,6 +440,7 @@ static int tgsi_declaration(struct r600_shader_ctx *ctx)
                ctx->shader->input[i].name = d->Semantic.Name;
                ctx->shader->input[i].sid = d->Semantic.Index;
                ctx->shader->input[i].interpolate = d->Declaration.Interpolate;
+               ctx->shader->input[i].centroid = d->Declaration.Centroid;
                ctx->shader->input[i].gpr = ctx->file_offset[TGSI_FILE_INPUT] + i;
                if (ctx->type == TGSI_PROCESSOR_VERTEX) {
                        /* turn input into fetch */
index 6e2620f20122edbd9774524c53a649cc12269d19..a341cca08363ba5e266b319eee5c6906f5e38792 100644 (file)
@@ -31,6 +31,7 @@ struct r600_shader_io {
        unsigned                done;
        int                     sid;
        unsigned                interpolate;
+       boolean                 centroid;
 };
 
 struct r600_shader {