[Mesa-dev] [PATCH] r600g/sb: treat undefined values like constants
Glenn Kennard
glenn.kennard at gmail.com
Tue Feb 17 16:36:58 PST 2015
On Wed, 18 Feb 2015 01:17:32 +0100, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> 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.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> src/gallium/drivers/r600/sb/sb_sched.cpp | 4 ++--
> 1 file 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 4fbdc4f..63e7464 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,
Reviewed-by: Glenn Kennard <glenn.kennard at gmail.com>
More information about the mesa-dev
mailing list