diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2010-08-28 18:08:26 +0200 |
---|---|---|
committer | Christoph Bumiller <e0425955@student.tuwien.ac.at> | 2010-09-01 18:02:50 +0200 |
commit | 7145ab214f1bd0d84671936dddb87db05f2861f6 (patch) | |
tree | 2ba372954db96f4892cf971b5f1f9863604337a3 /src | |
parent | 0a8292e096bc37eeb225bf7d3854b6b6edc4bceb (diff) |
nv50: DST
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/nv50/nv50_tgsi_to_nc.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/gallium/drivers/nv50/nv50_tgsi_to_nc.c b/src/gallium/drivers/nv50/nv50_tgsi_to_nc.c index 8b18a9c025..0ea2912846 100644 --- a/src/gallium/drivers/nv50/nv50_tgsi_to_nc.c +++ b/src/gallium/drivers/nv50/nv50_tgsi_to_nc.c @@ -1337,6 +1337,19 @@ bld_instruction(struct bld_context *bld, FOR_EACH_DST0_ENABLED_CHANNEL(c, insn) dst0[c] = temp; break; + case TGSI_OPCODE_DST: + if (insn->Dst[0].Register.WriteMask & 1) + dst0[0] = bld_imm_f32(bld, 1.0f); + if (insn->Dst[0].Register.WriteMask & 2) { + src0 = emit_fetch(bld, insn, 0, 1); + src1 = emit_fetch(bld, insn, 1, 1); + dst0[1] = bld_insn_2(bld, NV_OP_MUL, src0, src1); + } + if (insn->Dst[0].Register.WriteMask & 4) + dst0[2] = emit_fetch(bld, insn, 0, 2); + if (insn->Dst[0].Register.WriteMask & 8) + dst0[3] = emit_fetch(bld, insn, 1, 3); + break; case TGSI_OPCODE_EX2: src0 = emit_fetch(bld, insn, 0, 0); temp = bld_insn_1(bld, NV_OP_PREEX2, src0); |