mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2025-12-20 12:50:04 +01:00
EXA/mixed: ModifyPixmapHeader pitch fixes. (bug #33929)
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 <daenzer@vmware.com>
Acked-by: Cyril Brulebois <kibi@debian.org>
Tested-by: Cyril Brulebois <kibi@debian.org>
Reported-by: Thierry Vignaud <thierry.vignaud@gmail.com>
Tested-by: Thierry Vignaud <thierry.vignaud@gmail.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 31704510f4)
This commit is contained in:
parent
0e253a9c86
commit
7b3b7efe78
1 changed files with 5 additions and 4 deletions
|
|
@ -175,8 +175,10 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
|
||||||
depth != pPixmap->drawable.depth ||
|
depth != pPixmap->drawable.depth ||
|
||||||
bitsPerPixel != pPixmap->drawable.bitsPerPixel) {
|
bitsPerPixel != pPixmap->drawable.bitsPerPixel) {
|
||||||
if (pExaPixmap->driverPriv) {
|
if (pExaPixmap->driverPriv) {
|
||||||
exaSetFbPitch(pExaScr, pExaPixmap,
|
if (devKind > 0)
|
||||||
width, height, bitsPerPixel);
|
pExaPixmap->fb_pitch = devKind;
|
||||||
|
else
|
||||||
|
exaSetFbPitch(pExaScr, pExaPixmap, width, height, bitsPerPixel);
|
||||||
|
|
||||||
exaSetAccelBlock(pExaScr, pExaPixmap,
|
exaSetAccelBlock(pExaScr, pExaPixmap,
|
||||||
width, height, bitsPerPixel);
|
width, height, bitsPerPixel);
|
||||||
|
|
@ -187,8 +189,7 @@ exaModifyPixmapHeader_mixed(PixmapPtr pPixmap, int width, int height, int depth,
|
||||||
if (has_gpu_copy && pExaPixmap->sys_ptr) {
|
if (has_gpu_copy && pExaPixmap->sys_ptr) {
|
||||||
free(pExaPixmap->sys_ptr);
|
free(pExaPixmap->sys_ptr);
|
||||||
pExaPixmap->sys_ptr = NULL;
|
pExaPixmap->sys_ptr = NULL;
|
||||||
pExaPixmap->sys_pitch = devKind > 0 ? devKind :
|
pExaPixmap->sys_pitch = PixmapBytePad(width, depth);
|
||||||
PixmapBytePad(width, depth);
|
|
||||||
DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
|
DamageUnregister(&pPixmap->drawable, pExaPixmap->pDamage);
|
||||||
DamageDestroy(pExaPixmap->pDamage);
|
DamageDestroy(pExaPixmap->pDamage);
|
||||||
pExaPixmap->pDamage = NULL;
|
pExaPixmap->pDamage = NULL;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue