From: Michel Dänzer <[email protected]>

If there's a GPU copy and a non-zero devKind was passed in, set the GPU copy
pitch to that instead of to a possibly bogus value derived from the new width.
This is e.g. used by the radeon driver's drmmode_xf86crtc_resize hook, fixes
https://bugs.freedesktop.org/show_bug.cgi?id=33929 .

On the other hand, the system memory copy doesn't need the pitch to be aligned
beyond the PixmapBytePad of the width.

Signed-off-by: Michel Dänzer <[email protected]>
---
 exa/exa_mixed.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/exa/exa_mixed.c b/exa/exa_mixed.c
index 606f1e1..fd1afb2 100644
--- a/exa/exa_mixed.c
+++ b/exa/exa_mixed.c
@@ -175,8 +175,10 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, 
int height, int depth,
        depth != pPixmap->drawable.depth ||
        bitsPerPixel != pPixmap->drawable.bitsPerPixel) {
        if (pExaPixmap->driverPriv) {
-            exaSetFbPitch(pExaScr, pExaPixmap,
-                          width, height, bitsPerPixel);
+           if (devKind > 0)
+               pExaPixmap->fb_pitch = devKind;
+           else
+               exaSetFbPitch(pExaScr, pExaPixmap, width, height, bitsPerPixel);
 
             exaSetAccelBlock(pExaScr, pExaPixmap,
                              width, height, bitsPerPixel);
@@ -187,8 +189,7 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, 
int height, int depth,
        if (has_gpu_copy && pExaPixmap->sys_ptr) {
            free(pExaPixmap->sys_ptr);
            pExaPixmap->sys_ptr = NULL;
-           pExaPixmap->sys_pitch = devKind > 0 ? devKind :
-               PixmapBytePad(width, depth);
+           pExaPixmap->sys_pitch = PixmapBytePad(width, depth);
            DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
            DamageDestroy(pExaPixmap->pDamage);
            pExaPixmap->pDamage = NULL;
-- 
1.7.4.1

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to