diff options
author | Si Chen <[email protected]> | 2013-11-14 09:17:13 -0800 |
---|---|---|
committer | José Fonseca <[email protected]> | 2013-11-19 19:16:18 +0000 |
commit | e7a5905d8a3960b0981750f8131e3af9acbfcdb8 (patch) | |
tree | 451b43f4c28db5d6df2b7c92aa8c28161551fe14 /src/gallium/auxiliary | |
parent | 81b998ca48fc96753096f22949bf3785b7aa425c (diff) |
gallivm: Fix mask calculation for emit_kill_if.
The exec_mask must be taken in consideration, just like emit_kill above.
The tgsi_exec module has the same bug and should be fixed in a future
change.
Reviewed-by: Roland Scheidegger <[email protected]>
Reviewed-by: José Fonseca <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r-- | src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c index 3e0fd1cf991..37f7a569702 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c @@ -2295,12 +2295,15 @@ emit_kill_if( } } - if(mask) { - lp_build_mask_update(bld->mask, mask); - - if (!near_end_of_shader(bld, pc)) - lp_build_mask_check(bld->mask); + if (bld->exec_mask.has_mask) { + LLVMValueRef invmask; + invmask = LLVMBuildNot(builder, bld->exec_mask.exec_mask, "kilp"); + mask = LLVMBuildOr(builder, mask, invmask, ""); } + + lp_build_mask_update(bld->mask, mask); + if (!near_end_of_shader(bld, pc)) + lp_build_mask_check(bld->mask); } |