mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-04-20 07:10:41 +02:00
EXA: Fix a couple of logic errors in exaGetPixmapFirstPixel.
The fb pointer would be left uninitialized when exaPixmapIsOffscreen returned false. When it returned true and the pixmap was damaged, fb would be initialized from the pixmap's devPrivate.ptr before the exaDoMigration and exaPrepareAccess calls, at which point devPrivate.ptr would still be pointing at offscreen memory.
This commit is contained in:
parent
23fbd5292d
commit
3c448b0eb6
1 changed files with 12 additions and 12 deletions
|
|
@ -382,19 +382,19 @@ exaGetPixmapFirstPixel (PixmapPtr pPixmap)
|
|||
ExaMigrationRec pixmaps[1];
|
||||
ExaPixmapPriv (pPixmap);
|
||||
|
||||
fb = pExaPixmap->sys_ptr;
|
||||
|
||||
/* Try to avoid framebuffer readbacks */
|
||||
if (exaPixmapIsOffscreen(pPixmap)) {
|
||||
if (!miPointInRegion(DamageRegion(pExaPixmap->pDamage), 0, 0, &box)) {
|
||||
fb = pExaPixmap->sys_ptr;
|
||||
} else {
|
||||
need_finish = TRUE;
|
||||
fb = pPixmap->devPrivate.ptr;
|
||||
pixmaps[0].as_dst = FALSE;
|
||||
pixmaps[0].as_src = TRUE;
|
||||
pixmaps[0].pPix = pPixmap;
|
||||
exaDoMigration (pixmaps, 1, FALSE);
|
||||
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
|
||||
}
|
||||
if (exaPixmapIsOffscreen(pPixmap) &&
|
||||
miPointInRegion(DamageRegion(pExaPixmap->pDamage), 0, 0, &box))
|
||||
{
|
||||
need_finish = TRUE;
|
||||
pixmaps[0].as_dst = FALSE;
|
||||
pixmaps[0].as_src = TRUE;
|
||||
pixmaps[0].pPix = pPixmap;
|
||||
exaDoMigration (pixmaps, 1, FALSE);
|
||||
exaPrepareAccess(&pPixmap->drawable, EXA_PREPARE_SRC);
|
||||
fb = pPixmap->devPrivate.ptr;
|
||||
}
|
||||
|
||||
switch (pPixmap->drawable.bitsPerPixel) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue