Re: [Mesa-dev] [PATCH] i965/fs: Fix projector==1.0 optimization pre-gen6.
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.roman...@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++; } ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH] i965/fs: Fix projector==1.0 optimization pre-gen6.
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. 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++; } -- 1.7.7.3 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev