summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/r600/sb/sb_pass.h
diff options
context:
space:
mode:
authorVadim Girlin <[email protected]>2013-05-27 01:39:54 +0400
committerVadim Girlin <[email protected]>2013-05-27 01:45:07 +0400
commitff2a6116992a6592747105fb167cab18603361c0 (patch)
treed5acba597f983392c04a757a90dd422bc675a73d /src/gallium/drivers/r600/sb/sb_pass.h
parent44a117ab9ac7e18ffddf4d59ae35fe2c266efc1d (diff)
r600g/sb: fix scheduling of PRED_SET instructions
PRED_SET instructions that update exec mask should be scheduled immediately prior to the "if-then-else" block, because any instruction that is inserted after alu clause with PRED_SET and before conditional block is also conditionally executed by hw (exec mask is already updated at that moment). Propbably it's better to make PRED_SET a part of conditional "if-then-else" block in the IR to handle this more cleanly, but for now this temporary solution should prevent the problem. Signed-off-by: Vadim Girlin <[email protected]>
Diffstat (limited to 'src/gallium/drivers/r600/sb/sb_pass.h')
-rw-r--r--src/gallium/drivers/r600/sb/sb_pass.h4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/gallium/drivers/r600/sb/sb_pass.h b/src/gallium/drivers/r600/sb/sb_pass.h
index d5d48c3c740..a6338ae0176 100644
--- a/src/gallium/drivers/r600/sb/sb_pass.h
+++ b/src/gallium/drivers/r600/sb/sb_pass.h
@@ -250,13 +250,15 @@ class gcm : public pass {
static const int rp_threshold = 100;
+ bool pending_exec_mask_update;
+
public:
gcm(shader &sh) : pass(sh),
bu_ready(), bu_ready_next(), bu_ready_early(),
ready(), op_map(), uses(), nuc_stk(1), ucs_level(),
bu_bb(), pending_defs(), pending_nodes(), cur_sq(),
- live(), live_count() {}
+ live(), live_count(), pending_exec_mask_update() {}
virtual int run();