[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