diff options
author | Dave Airlie <airlied@redhat.com> | 2010-08-31 11:57:04 +1000 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-08-31 12:59:10 +1000 |
commit | d3fa92584b109bf59dce32501eec73f8de74f42b (patch) | |
tree | eeca52e9d1b51565fdaee2e960ecbccb96ddfaf6 /src/gallium/drivers/r600/r600_shader.c | |
parent | 24ff42e7d56ac489caeca6b5ffcc3091cc8194b5 (diff) |
r600g: make LIT work properly
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
Diffstat (limited to 'src/gallium/drivers/r600/r600_shader.c')
-rw-r--r-- | src/gallium/drivers/r600/r600_shader.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index ed953d3f1d..bac96e8a30 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -1028,6 +1028,9 @@ static int tgsi_lit(struct r600_shader_ctx *ctx) r = tgsi_split_constant(ctx, r600_src); if (r) return r; + r = tgsi_split_literal_constant(ctx, r600_src); + if (r) + return r; /* dst.x, <- 1.0 */ memset(&alu, 0, sizeof(struct r600_bc_alu)); @@ -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; |