OSDN Git Service

r600g: fix constant splitting
authorDave Airlie <airlied@redhat.com>
Tue, 31 Aug 2010 00:43:04 +0000 (10:43 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 31 Aug 2010 00:47:03 +0000 (10:47 +1000)
constant splitting was broken for multi-constant cases, fixes fp1 CMP+MAD, vp1 CMP.

src/gallium/drivers/r600/r600_shader.c

index 2210f83..2197a16 100644 (file)
@@ -650,7 +650,7 @@ static int tgsi_split_constant(struct r600_shader_ctx *ctx, struct r600_bc_alu_s
                        for (k = 0; k < 4; k++) {
                                memset(&alu, 0, sizeof(struct r600_bc_alu));
                                alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV;
-                               alu.src[0].sel = r600_src[0].sel;
+                               alu.src[0].sel = r600_src[j].sel;
                                alu.src[0].chan = k;
                                alu.dst.sel = ctx->temp_reg + j;
                                alu.dst.chan = k;
@@ -661,7 +661,7 @@ static int tgsi_split_constant(struct r600_shader_ctx *ctx, struct r600_bc_alu_s
                                if (r)
                                        return r;
                        }
-                       r600_src[0].sel = ctx->temp_reg + j;
+                       r600_src[j].sel = ctx->temp_reg + j;
                        j--;
                }
        }