Commit 33803c85 authored by Michel Dänzer's avatar Michel Dänzer
Browse files

present: Check that we can get a KMS FB for flipping

This can legitimately fail if the pixmap's storage is shared from
another device, e.g. when using PRIME render offloading.

(Ported from amdgpu commit 7d3fef72e0c871e1677e9e544f4cae5e238b5c52)
parent fee737e8
......@@ -309,6 +309,7 @@ struct radeon_pixmap {
struct radeon_buffer *bo;
struct drmmode_fb *fb;
Bool fb_failed;
uint32_t tiling_flags;
......
......@@ -254,6 +254,7 @@ radeon_present_check_flip(RRCrtcPtr crtc, WindowPtr window, PixmapPtr pixmap,
xf86CrtcPtr xf86_crtc = crtc->devPrivate;
ScreenPtr screen = window->drawable.pScreen;
ScrnInfoPtr scrn = xf86_crtc->scrn;
struct radeon_pixmap *priv = radeon_get_pixmap_private(pixmap);
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
RADEONInfoPtr info = RADEONPTR(scrn);
PixmapPtr screen_pixmap = screen->GetScreenPixmap(screen);
......@@ -277,6 +278,23 @@ radeon_present_check_flip(RRCrtcPtr crtc, WindowPtr window, PixmapPtr pixmap,
return FALSE;
#endif
if (priv && priv->fb_failed)
return FALSE;
if (!radeon_pixmap_get_fb(pixmap)) {
if (!priv)
priv = radeon_get_pixmap_private(pixmap);
if (priv && !priv->fb_failed) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
"Cannot get FB for Present flip (may be "
"normal if using PRIME render offloading)\n");
priv->fb_failed = TRUE;
}
return FALSE;
}
/* The kernel driver doesn't handle flipping between BOs with different
* tiling parameters correctly yet
*/
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment