diff options
author | Christoph Bumiller <[email protected]> | 2013-06-12 21:31:19 +0200 |
---|---|---|
committer | Ilia Mirkin <[email protected]> | 2014-05-23 12:34:39 -0400 |
commit | d479713d25699c168af807ad36068691af11d0e0 (patch) | |
tree | b2f053e6fdea5b111389f18661198c8af7f50e4f /src/gallium/drivers/nouveau/codegen | |
parent | 452a4151aa1eebbc12b621a465fc452fdb95a08b (diff) |
nv50/ir/tgsi: optimize KIL
Reviewed-by: Ilia Mirkin <[email protected]>
Cc: "10.2" <[email protected]>
Diffstat (limited to 'src/gallium/drivers/nouveau/codegen')
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp index e24be519d75..a0f1fe1c87d 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp @@ -2457,7 +2457,12 @@ Converter::handleInstruction(const struct tgsi_full_instruction *insn) break; case TGSI_OPCODE_KILL_IF: val0 = new_LValue(func, FILE_PREDICATE); + mask = 0; for (c = 0; c < 4; ++c) { + const int s = tgsi.getSrc(0).getSwizzle(c); + if (mask & (1 << s)) + continue; + mask |= 1 << s; mkCmp(OP_SET, CC_LT, TYPE_F32, val0, TYPE_F32, fetchSrc(0, c), zero); mkOp(OP_DISCARD, TYPE_NONE, NULL)->setPredicate(CC_P, val0); } |