[Mesa-dev] [PATCH] i965/fs: Fix projector==1.0 optimization pre-gen6.

Ian Romanick idr at freedesktop.org
Fri Jan 6 14:00:51 PST 2012


On 01/05/2012 06:59 PM, Eric Anholt wrote:
> The optimization was supposed to turn an attribute component that was
> always 1.0 into a mov of 1.0.  But by leaving loop this patch removes
> out of that test, we applied the projection correction to the 1.0 and
> got some other value, breaking openarena once it was converted to
> using the new compiler backend.
>
> Originally this hunk was separate from the former loop to make the
> generated instructions slightly better pipelined.  We now have
> automatic instruction scheduling to handle that, and the generated
> instruction sequence looked the same to me after this change (except
> for the bugfix).
> ---
>
> idr, are you set up to test this patch with your code?  It's a
> retyping of what I did on Ken's machine, so I'm paranoid that I've
> mangled it.

Tested-by: Ian Romanick <ian.d.romanick at intel.com>

>   src/mesa/drivers/dri/i965/brw_fs.cpp |   10 +++-------
>   1 files changed, 3 insertions(+), 7 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index b6aa60e..40327ac 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -491,17 +491,13 @@ fs_visitor::emit_general_interpolation(ir_variable *ir)
>                     emit(FS_OPCODE_LINTERP, attr,
>                          this->delta_x[barycoord_mode],
>                          this->delta_y[barycoord_mode], fs_reg(interp));
> +		  if (intel->gen<  6) {
> +		     emit(BRW_OPCODE_MUL, attr, attr, this->pixel_w);
> +		  }
>   	       }
>   	       attr.reg_offset++;
>   	    }
>
> -	    if (intel->gen<  6) {
> -	       attr.reg_offset -= type->vector_elements;
> -	       for (unsigned int k = 0; k<  type->vector_elements; k++) {
> -		  emit(BRW_OPCODE_MUL, attr, attr, this->pixel_w);
> -		  attr.reg_offset++;
> -	       }
> -	    }
>   	 }
>   	 location++;
>         }



More information about the mesa-dev mailing list