[Mesa-dev] [PATCH] i965/vec4: check opcode on vec4_instruction::reads_flag(channel)

Alejandro PiƱeiro apinheiro at igalia.com
Fri Oct 23 07:04:35 PDT 2015

Commit f17b78 added an alternative reads_flag(channel) that returned
if the instruction was reading a specific channel flag. By mistake it
only took into account the predicate, but when the opcode is
VS_OPCODE_UNPACK_FLAGS_SIMD4X2 there isn't any predicate, but the flag
are used.

That mistake caused some regressions on old hw. More information on
this bug:

The bug mentions G965, ILK and G45, but I only have available ILK to
test, so it would be good if someone confirms that the regressions
get solved on that hw too. Having said so, it would be strange if
it is not the case.

Additionally, the bug mentions 24 regressions. But it only lists 21.
And I only detected 17 regressions on ILK. So it would be good
to confirm how many regressions the series introduced, and if
this new commit solve all of them.

 src/mesa/drivers/dri/i965/brw_ir_vec4.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_ir_vec4.h b/src/mesa/drivers/dri/i965/brw_ir_vec4.h
index 74e9733..cc4104c 100644
--- a/src/mesa/drivers/dri/i965/brw_ir_vec4.h
+++ b/src/mesa/drivers/dri/i965/brw_ir_vec4.h
@@ -188,8 +188,8 @@ public:
    bool reads_flag(unsigned c)
-      if (!reads_flag())
-         return false;
+      if (opcode == VS_OPCODE_UNPACK_FLAGS_SIMD4X2)
+         return true;
       switch (predicate) {

More information about the mesa-dev mailing list