[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