diff options
author | Dave Airlie <[email protected]> | 2015-02-18 10:13:20 +1000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2015-02-18 11:13:06 +1000 |
commit | e8e4437ed0660b3f1d1912f53d997cf5e25f486d (patch) | |
tree | 5620f8bd55a7a55b4af17d624c05d0ef033b50ce /src/gallium/drivers/r600/sb | |
parent | 598d144cef412f114bddccc5d3c428682b41a7c2 (diff) |
r600g/sb: treat undefined values like constants
When we schedule an instructions with undefined value, we
eventually will use 0, which is a constant, however sb wasn't
taking this into account and creating ops with illegal scalar
swizzles.
this replaces my fix for op3 in t slots.
Reviewed-by: Glenn Kennard <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/gallium/drivers/r600/sb')
-rw-r--r-- | src/gallium/drivers/r600/sb/sb_sched.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/gallium/drivers/r600/sb/sb_sched.cpp b/src/gallium/drivers/r600/sb/sb_sched.cpp index 4fbdc4fd971..63e74640687 100644 --- a/src/gallium/drivers/r600/sb/sb_sched.cpp +++ b/src/gallium/drivers/r600/sb/sb_sched.cpp @@ -266,7 +266,7 @@ bool rp_gpr_tracker::try_reserve(alu_node* n) { for (i = 0; i < nsrc; ++i) { value *v = n->src[i]; - if (v->is_readonly()) { + if (v->is_readonly() || v->is_undef()) { const_count++; if (trans && const_count == 3) break; @@ -295,7 +295,7 @@ bool rp_gpr_tracker::try_reserve(alu_node* n) { if (need_unreserve && i--) { do { value *v = n->src[i]; - if (!v->is_readonly()) { + if (!v->is_readonly() && !v->is_undef()) { if (i == 1 && opt) continue; unreserve(bs_cycle(trans, bs, i), n->bc.src[i].sel, |