The negation source modifer for logical instructions changed its meaning on 
Broadwell that
can cause the source bits to be inverted. This patch series addresses a current 
issue in 
our Broadwell driver where a shader could cause the negation source modifier to 
be set on
logical operations and produce wrong results. 

A piglit test demonstrates this issue[1].

For example:

 and dst, src0, -src1

actually does

   dst = src0 & ~src1

Conversely, since the logical source modifier is now logical, this capability 
allows expressions like a and (not b) to be calculated with one instruction.

No regressions observed on existing piglit tests. Shader-db did not report any 
gains
or loses as well.

Thanks to Matt Turner for initial feeback and advice.

Abdiel Janulgue (6):
      i965/fs: Refactor check for potential copy propagated instructions.
      i965/fs: copy propagate 'NOT' instruction when used with logical operation
      i965/fs: skip copy-propate for negated logical instructions and 'NOT' src 
registers
      i965/vec4: copy propagate 'NOT' instruction when used with logical 
operation
      i965/vec4: skip copy-propate for negated logical instructions and 'NOT' 
src registers
      i965/disasm: Properly debug negate source modifier for logical 
instructions

 src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp   | 48 
+++++++++++++++++++++++-------
 src/mesa/drivers/dri/i965/brw_vec4.h                    |  4 ++-
 src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp | 76 
++++++++++++++++++++++++++++++++----------------
 src/mesa/drivers/dri/i965/gen8_disasm.c                 | 24 +++++++++++++--
 4 files changed, 113 insertions(+), 39 deletions(-)

--
[1] http://lists.freedesktop.org/archives/piglit/2014-June/011002.html

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to