diff options
author | Vadim Girlin <[email protected]> | 2013-05-27 01:39:54 +0400 |
---|---|---|
committer | Vadim Girlin <[email protected]> | 2013-05-27 01:45:07 +0400 |
commit | ff2a6116992a6592747105fb167cab18603361c0 (patch) | |
tree | d5acba597f983392c04a757a90dd422bc675a73d /src/gallium/drivers/r600/sb/sb_pass.h | |
parent | 44a117ab9ac7e18ffddf4d59ae35fe2c266efc1d (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.h | 4 |
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(); |