summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2017-08-18 17:24:45 +0900
committerMichel Dänzer <michel@daenzer.net>2017-08-22 18:35:22 +0900
commita2ee5c36c7d4fdcd067fdc1ef424be474f1ad2cb (patch)
treea23f574686ae0b1c5ac5c5b95a765526d126a075
parent828fb44cf953f78bd65d8f391bdabe2b1b3d53ae (diff)
Make amdgpu_scanout_do_update take a PixmapPtr instead of a DrawablePtr
All callers were already passing in a pixmap. This allows simplifying the rotated scanout case slightly. (Ported from radeon commit d822a0f47070374ad0c1a97b559bae27724dc52a) Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--src/amdgpu_drv.h2
-rw-r--r--src/amdgpu_kms.c13
-rw-r--r--src/drmmode_display.c6
3 files changed, 10 insertions, 11 deletions
diff --git a/src/amdgpu_drv.h b/src/amdgpu_drv.h
index 1323747..75c2a26 100644
--- a/src/amdgpu_drv.h
+++ b/src/amdgpu_drv.h
@@ -341,7 +341,7 @@ Bool amdgpu_dri3_screen_init(ScreenPtr screen);
/* amdgpu_kms.c */
Bool amdgpu_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id,
- DrawablePtr src_draw, BoxPtr extents);
+ PixmapPtr src_pix, BoxPtr extents);
void AMDGPUWindowExposures_oneshot(WindowPtr pWin, RegionPtr pRegion
#if XORG_VERSION_CURRENT < XORG_VERSION_NUMERIC(1,16,99,901,0)
, RegionPtr pBSRegion
diff --git a/src/amdgpu_kms.c b/src/amdgpu_kms.c
index f665a01..e0b7358 100644
--- a/src/amdgpu_kms.c
+++ b/src/amdgpu_kms.c
@@ -806,7 +806,7 @@ amdgpu_dirty_update(ScrnInfoPtr scrn)
Bool
amdgpu_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id,
- DrawablePtr src_draw, BoxPtr extents)
+ PixmapPtr src_pix, BoxPtr extents)
{
drmmode_crtc_private_ptr drmmode_crtc = xf86_crtc->driver_private;
RegionRec region = { .extents = *extents, .data = NULL };
@@ -834,10 +834,9 @@ amdgpu_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id,
PictFormatPtr format = PictureWindowFormat(pScreen->root);
int error;
PicturePtr src, dst;
- XID include_inferiors = IncludeInferiors;
- src = CreatePicture(None, src_draw, format, CPSubwindowMode,
- &include_inferiors, serverClient, &error);
+ src = CreatePicture(None, &src_pix->drawable, format, 0L, NULL,
+ serverClient, &error);
if (!src) {
ErrorF("Failed to create source picture for transformed scanout "
"update\n");
@@ -880,7 +879,7 @@ amdgpu_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id,
GCPtr gc = GetScratchGC(pDraw->depth, pScreen);
ValidateGC(pDraw, gc);
- (*gc->ops->CopyArea)(src_draw, 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);
@@ -912,7 +911,7 @@ amdgpu_scanout_update_handler(xf86CrtcPtr crtc, uint32_t frame, uint64_t usec,
!drmmode_crtc->flip_pending &&
drmmode_crtc->dpms_mode == DPMSModeOn) {
if (amdgpu_scanout_do_update(crtc, drmmode_crtc->scanout_id,
- &screen->GetWindowPixmap(screen->root)->drawable,
+ screen->GetWindowPixmap(screen->root),
&region->extents))
RegionEmpty(region);
}
@@ -993,7 +992,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)->drawable,
+ pScreen->GetWindowPixmap(pScreen->root),
&region->extents))
return;
RegionEmpty(region);
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index edd955e..ad3325b 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -779,7 +779,7 @@ drmmode_crtc_scanout_update(xf86CrtcPtr crtc, DisplayModePtr mode,
*x = *y = 0;
amdgpu_scanout_do_update(crtc, scanout_id,
- &screen->GetWindowPixmap(screen->root)->drawable,
+ screen->GetWindowPixmap(screen->root),
box);
amdgpu_glamor_finish(scrn);
}
@@ -2850,8 +2850,8 @@ Bool amdgpu_do_pageflip(ScrnInfoPtr scrn, ClientPtr client,
goto error;
}
- amdgpu_scanout_do_update(crtc, scanout_id,
- &new_front->drawable, &extents);
+ amdgpu_scanout_do_update(crtc, scanout_id, new_front,
+ &extents);
drmmode_crtc_wait_pending_event(drmmode_crtc, pAMDGPUEnt->fd,
drmmode_crtc->scanout_update_pending);