[PATCH xf86-video-amdgpu] Allow changing DCC parameters between flips
Marek Olšák
maraeo at gmail.com
Thu Feb 28 22:40:26 UTC 2019
From: Marek Olšák <marek.olsak at amd.com>
---
src/amdgpu_present.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/src/amdgpu_present.c b/src/amdgpu_present.c
index ce88bd8f..f4fc6ebd 100644
--- a/src/amdgpu_present.c
+++ b/src/amdgpu_present.c
@@ -271,26 +271,34 @@ amdgpu_present_check_flip(RRCrtcPtr crtc, WindowPtr window, PixmapPtr pixmap,
return FALSE;
if (info->drmmode.dri2_flipping)
return FALSE;
#if XORG_VERSION_CURRENT <= XORG_VERSION_NUMERIC(1, 20, 99, 1, 0)
if (pixmap->devKind != screen_pixmap->devKind)
return FALSE;
#endif
+ uint64_t tiling_info1 = amdgpu_pixmap_get_tiling_info(pixmap);
+ uint64_t tiling_info2 = amdgpu_pixmap_get_tiling_info(screen_pixmap);
+
/* The kernel driver doesn't handle flipping between BOs with different
- * tiling parameters correctly yet
+ * tiling parameters correctly yet except DCC.
*/
- if (amdgpu_pixmap_get_tiling_info(pixmap) !=
- amdgpu_pixmap_get_tiling_info(screen_pixmap))
- return FALSE;
+ if (info->family >= AMDGPU_FAMILY_AI) {
+ if (AMDGPU_TILING_GET(tiling_info1, SWIZZLE_MODE) !=
+ AMDGPU_TILING_GET(tiling_info2, SWIZZLE_MODE))
+ return FALSE;
+ } else {
+ if (tiling_info1 != tiling_info2)
+ return FALSE;
+ }
for (i = 0, num_crtcs_on = 0; i < config->num_crtc; i++) {
if (drmmode_crtc_can_flip(config->crtc[i]))
num_crtcs_on++;
else if (config->crtc[i] == crtc->devPrivate)
return FALSE;
}
if (num_crtcs_on == 0)
return FALSE;
--
2.17.1
More information about the amd-gfx
mailing list