mirror of
https://github.com/X11Libre/xf86-video-amdgpu.git
synced 2026-03-24 01:24:31 +00:00
Pass extents to amdgpu_scanout_do_update by value
amdgpu_scanout_extents_intersect could leave the scanout damage region in an invalid state, triggering debugging checks in pixman: *** BUG *** In pixman_region_append_non_o: The expression r->x1 < r->x2 was false Set a breakpoint on '_pixman_log_error' to debug
This commit is contained in:
committed by
Michel Dänzer
parent
29649652a0
commit
8af9895469
@@ -347,7 +347,7 @@ Bool amdgpu_dri3_screen_init(ScreenPtr screen);
|
||||
|
||||
/* amdgpu_kms.c */
|
||||
Bool amdgpu_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id,
|
||||
PixmapPtr src_pix, BoxPtr extents);
|
||||
PixmapPtr src_pix, BoxRec extents);
|
||||
void AMDGPUWindowExposures_oneshot(WindowPtr pWin, RegionPtr pRegion
|
||||
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,16,99,901,0)
|
||||
, RegionPtr pBSRegion
|
||||
|
||||
@@ -804,21 +804,21 @@ amdgpu_dirty_update(ScrnInfoPtr scrn)
|
||||
|
||||
Bool
|
||||
amdgpu_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id,
|
||||
PixmapPtr src_pix, BoxPtr extents)
|
||||
PixmapPtr src_pix, BoxRec extents)
|
||||
{
|
||||
drmmode_crtc_private_ptr drmmode_crtc = xf86_crtc->driver_private;
|
||||
RegionRec region = { .extents = *extents, .data = NULL };
|
||||
RegionRec region = { .extents = extents, .data = NULL };
|
||||
ScrnInfoPtr scrn = xf86_crtc->scrn;
|
||||
ScreenPtr pScreen = scrn->pScreen;
|
||||
DrawablePtr pDraw;
|
||||
|
||||
if (!xf86_crtc->enabled ||
|
||||
!drmmode_crtc->scanout[scanout_id].pixmap ||
|
||||
extents->x1 >= extents->x2 || extents->y1 >= extents->y2)
|
||||
extents.x1 >= extents.x2 || extents.y1 >= extents.y2)
|
||||
return FALSE;
|
||||
|
||||
pDraw = &drmmode_crtc->scanout[scanout_id].pixmap->drawable;
|
||||
if (!amdgpu_scanout_extents_intersect(xf86_crtc, extents))
|
||||
if (!amdgpu_scanout_extents_intersect(xf86_crtc, &extents))
|
||||
return FALSE;
|
||||
|
||||
if (drmmode_crtc->tear_free) {
|
||||
@@ -860,9 +860,9 @@ amdgpu_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id,
|
||||
pScreen->SourceValidate = NULL;
|
||||
CompositePicture(PictOpSrc,
|
||||
src, NULL, dst,
|
||||
extents->x1, extents->y1, 0, 0, extents->x1,
|
||||
extents->y1, extents->x2 - extents->x1,
|
||||
extents->y2 - extents->y1);
|
||||
extents.x1, extents.y1, 0, 0, extents.x1,
|
||||
extents.y1, extents.x2 - extents.x1,
|
||||
extents.y2 - extents.y1);
|
||||
pScreen->SourceValidate = SourceValidate;
|
||||
|
||||
free_dst:
|
||||
@@ -876,9 +876,9 @@ amdgpu_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id,
|
||||
|
||||
ValidateGC(pDraw, gc);
|
||||
(*gc->ops->CopyArea)(&src_pix->drawable, pDraw, gc,
|
||||
xf86_crtc->x + extents->x1, xf86_crtc->y + extents->y1,
|
||||
extents->x2 - extents->x1, extents->y2 - extents->y1,
|
||||
extents->x1, extents->y1);
|
||||
xf86_crtc->x + extents.x1, xf86_crtc->y + extents.y1,
|
||||
extents.x2 - extents.x1, extents.y2 - extents.y1,
|
||||
extents.x1, extents.y1);
|
||||
FreeScratchGC(gc);
|
||||
}
|
||||
|
||||
@@ -908,7 +908,7 @@ amdgpu_scanout_update_handler(xf86CrtcPtr crtc, uint32_t frame, uint64_t usec,
|
||||
drmmode_crtc->dpms_mode == DPMSModeOn) {
|
||||
if (amdgpu_scanout_do_update(crtc, drmmode_crtc->scanout_id,
|
||||
screen->GetWindowPixmap(screen->root),
|
||||
®ion->extents))
|
||||
region->extents))
|
||||
RegionEmpty(region);
|
||||
}
|
||||
|
||||
@@ -989,7 +989,7 @@ amdgpu_scanout_flip(ScreenPtr pScreen, AMDGPUInfoPtr info,
|
||||
scanout_id = drmmode_crtc->scanout_id ^ 1;
|
||||
if (!amdgpu_scanout_do_update(xf86_crtc, scanout_id,
|
||||
pScreen->GetWindowPixmap(pScreen->root),
|
||||
®ion->extents))
|
||||
region->extents))
|
||||
return;
|
||||
RegionEmpty(region);
|
||||
|
||||
|
||||
@@ -754,7 +754,7 @@ drmmode_crtc_scanout_update(xf86CrtcPtr crtc, DisplayModePtr mode,
|
||||
|
||||
amdgpu_scanout_do_update(crtc, scanout_id,
|
||||
screen->GetWindowPixmap(screen->root),
|
||||
box);
|
||||
*box);
|
||||
amdgpu_glamor_finish(scrn);
|
||||
}
|
||||
}
|
||||
@@ -3079,7 +3079,7 @@ Bool amdgpu_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
|
||||
}
|
||||
|
||||
amdgpu_scanout_do_update(crtc, scanout_id, new_front,
|
||||
&extents);
|
||||
extents);
|
||||
|
||||
drmmode_crtc_wait_pending_event(drmmode_crtc, pAMDGPUEnt->fd,
|
||||
drmmode_crtc->scanout_update_pending);
|
||||
|
||||
Reference in New Issue
Block a user