i965/vec4: check opcode on vec4_instruction::reads_flag(channel)
authorAlejandro Piñeiro <apinheiro@igalia.com>
Fri, 23 Oct 2015 13:32:30 +0000 (15:32 +0200)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Fri, 23 Oct 2015 16:11:09 +0000 (18:11 +0200)
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:
https://bugs.freedesktop.org/show_bug.cgi?id=92621

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_ir_vec4.h

index 74e9733bd4423fba4e81e0a7808d16e3fdfed842..cc4104c8eb3e73de847214b660d47e6dd2ef8c3d 100644 (file)
@@ -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) {
       case BRW_PREDICATE_NONE: