r600g: make LIT work properly
authorDave Airlie <airlied@redhat.com>
Tue, 31 Aug 2010 01:57:04 +0000 (11:57 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 31 Aug 2010 02:59:10 +0000 (12:59 +1000)
this is a bit of a workaround, something is wrong with the literal emits here
so we just use the trig copy function to copy the immd to a temp at start of op.

fix VP/FP LIT tests

src/gallium/drivers/r600/r600_shader.c

index ed953d3f1d6ee7be73ed3fa79c5e631e1bfadbe6..bac96e8a30e5b4b301791f05262bba43d6c8d9db 100644 (file)
@@ -1026,6 +1026,9 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
        int r;
 
        r = tgsi_split_constant(ctx, r600_src);
+       if (r)
+               return r;
+       r = tgsi_split_literal_constant(ctx, r600_src);
        if (r)
                return r;
 
@@ -1056,14 +1059,6 @@ static int tgsi_lit(struct r600_shader_ctx *ctx)
        if (r)
                return r;
 
-       /* dst.z = NOP - fill Z slot */
-       memset(&alu, 0, sizeof(struct r600_bc_alu));
-       alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_NOP;
-       alu.dst.chan = 2;
-       r = r600_bc_add_alu(ctx->bc, &alu);
-       if (r)
-               return r;
-
        /* dst.w, <- 1.0  */
        memset(&alu, 0, sizeof(struct r600_bc_alu));
        alu.inst = V_SQ_ALU_WORD1_OP2_SQ_OP2_INST_MOV;