diff options
author | Michel Dänzer <michel.daenzer@amd.com> | 2019-05-09 12:35:37 +0200 |
---|---|---|
committer | Michel Dänzer <michel.daenzer@amd.com> | 2019-05-09 12:35:37 +0200 |
commit | f758908db4e71406e5d437d32e43aabd38a63504 (patch) | |
tree | 69aaec635213e311dc060bb6d0e5e2060b064f86 | |
parent | d1d8e3c8d0a0a0394d395eba171460501745209b (diff) |
dri3: Always flush glamor before sharing pixmap storage with clients
Even if glamor_gbm_bo_from_pixmap / glamor_fd_from_pixmap themselves
don't trigger any drawing, there could already be unflushed drawing to
the pixmap whose storage we share with a client.
(Ported from amdgpu commit 4b17533fcb30842caf0035ba593b7d986520cc85)
Acked-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r-- | src/radeon_dri3.c | 26 |
1 files changed, 5 insertions, 21 deletions
diff --git a/src/radeon_dri3.c b/src/radeon_dri3.c index 73353bf5..f8f91c4b 100644 --- a/src/radeon_dri3.c +++ b/src/radeon_dri3.c @@ -220,29 +220,13 @@ static int radeon_dri3_fd_from_pixmap(ScreenPtr screen, RADEONInfoPtr info = RADEONPTR(scrn); if (info->use_glamor) { - Bool need_flush = TRUE; - int ret = -1; -#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,19,99,904,0) - struct gbm_bo *gbm_bo = glamor_gbm_bo_from_pixmap(screen, pixmap); + int ret = glamor_fd_from_pixmap(screen, pixmap, stride, size); - if (gbm_bo) { - ret = gbm_bo_get_fd(gbm_bo); - gbm_bo_destroy(gbm_bo); - - if (ret >= 0) - need_flush = FALSE; - } -#endif - - if (ret < 0) - ret = glamor_fd_from_pixmap(screen, pixmap, stride, size); - - /* glamor might have needed to reallocate the pixmap storage and - * copy the pixmap contents to the new storage. The copy - * operation needs to be flushed to the kernel driver before the - * client starts using the pixmap storage for direct rendering. + /* Any pending drawing operations need to be flushed to the + * kernel driver before the client starts using the pixmap + * storage for direct rendering. */ - if (ret >= 0 && need_flush) + if (ret >= 0) radeon_cs_flush_indirect(scrn); return ret; |