When reducing a xy reflection to a 180 degree rotation, make sure
only one rotation bit is set.  Also by rotating the bit left, we
can support cases where xy reflection happens with 90/270 degree
rotation.

Signed-off-by: Bob Paauwe <bob.j.paa...@intel.com>
---
 src/sna/sna_display.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 5b975c1..c8c2197 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -1007,6 +1007,8 @@ static unsigned
 rotation_reduce(struct plane *p, unsigned rotation)
 {
        unsigned unsupported_rotations = rotation & ~p->rotation.supported;
+       unsigned rr_mask = (RR_Rotate_0 | RR_Rotate_90 |
+                           RR_Rotate_180 | RR_Rotate_270);
 
        if (unsupported_rotations == 0)
                return rotation;
@@ -1016,7 +1018,8 @@ rotation_reduce(struct plane *p, unsigned rotation)
        if ((unsupported_rotations & RR_Reflect_XY) == RR_Reflect_XY &&
            p->rotation.supported& RR_Rotate_180) {
                rotation &= ~RR_Reflect_XY;
-               rotation ^= RR_Rotate_180;
+               rotation = ((rotation << 2 & rr_mask) |
+                           (((rotation << 2) & ~rr_mask) >> 4));
        }
 
        if ((unsupported_rotations & RR_Rotate_180) &&
-- 
2.1.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to