summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/nouveau/codegen
diff options
context:
space:
mode:
authorChristoph Bumiller <[email protected]>2013-06-12 21:31:19 +0200
committerIlia Mirkin <[email protected]>2014-05-23 12:34:39 -0400
commitd479713d25699c168af807ad36068691af11d0e0 (patch)
treeb2f053e6fdea5b111389f18661198c8af7f50e4f /src/gallium/drivers/nouveau/codegen
parent452a4151aa1eebbc12b621a465fc452fdb95a08b (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.cpp5
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);
}