[PATCH xf86-video-amdgpu 7/7] present: Separate checks for flips vs unflips

Michel Dänzer michel at daenzer.net
Wed Jun 22 08:50:31 UTC 2016


From: Michel Dänzer <michel.daenzer at amd.com>

All unflip checks apply to flips as well, but not vice versa.

Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
---
 src/amdgpu_present.c | 43 +++++++++++++++++++++++++------------------
 1 file changed, 25 insertions(+), 18 deletions(-)

diff --git a/src/amdgpu_present.c b/src/amdgpu_present.c
index c0b2f17..b0ee580 100644
--- a/src/amdgpu_present.c
+++ b/src/amdgpu_present.c
@@ -210,16 +210,9 @@ amdgpu_present_flush(WindowPtr window)
 	amdgpu_glamor_flush(xf86ScreenToScrn(window->drawable.pScreen));
 }
 
-/*
- * Test to see if page flipping is possible on the target crtc
- */
 static Bool
-amdgpu_present_check_flip(RRCrtcPtr crtc, WindowPtr window, PixmapPtr pixmap,
-			  Bool sync_flip)
+amdgpu_present_check_unflip(ScrnInfoPtr scrn)
 {
-	ScreenPtr screen = window->drawable.pScreen;
-	ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
-	AMDGPUInfoPtr info = AMDGPUPTR(scrn);
 	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
 	int num_crtcs_on;
 	int i;
@@ -227,15 +220,6 @@ amdgpu_present_check_flip(RRCrtcPtr crtc, WindowPtr window, PixmapPtr pixmap,
 	if (!scrn->vtSema)
 		return FALSE;
 
-	if (!info->allowPageFlip)
-		return FALSE;
-
-	if (info->hwcursor_disabled)
-		return FALSE;
-
-	if (info->drmmode.dri2_flipping)
-		return FALSE;
-
 	for (i = 0, num_crtcs_on = 0; i < config->num_crtc; i++) {
 		drmmode_crtc_private_ptr drmmode_crtc = config->crtc[i]->driver_private;
 
@@ -254,6 +238,29 @@ amdgpu_present_check_flip(RRCrtcPtr crtc, WindowPtr window, PixmapPtr pixmap,
 }
 
 /*
+ * Test to see if page flipping is possible on the target crtc
+ */
+static Bool
+amdgpu_present_check_flip(RRCrtcPtr crtc, WindowPtr window, PixmapPtr pixmap,
+			  Bool sync_flip)
+{
+	ScreenPtr screen = window->drawable.pScreen;
+	ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
+	AMDGPUInfoPtr info = AMDGPUPTR(scrn);
+
+	if (!info->allowPageFlip)
+		return FALSE;
+
+	if (info->hwcursor_disabled)
+		return FALSE;
+
+	if (info->drmmode.dri2_flipping)
+		return FALSE;
+
+	return amdgpu_present_check_unflip(scrn);
+}
+
+/*
  * Once the flip has been completed on all CRTCs, notify the
  * extension code telling it when that happened
  */
@@ -333,7 +340,7 @@ amdgpu_present_unflip(ScreenPtr screen, uint64_t event_id)
 	PixmapPtr pixmap = screen->GetScreenPixmap(screen);
 	int i;
 
-	if (!amdgpu_present_check_flip(NULL, screen->root, pixmap, TRUE))
+	if (!amdgpu_present_check_unflip(scrn))
 		goto modeset;
 
 	event = calloc(1, sizeof(struct amdgpu_present_vblank_event));
-- 
2.8.1



More information about the amd-gfx mailing list