mirror of
https://github.com/X11Libre/xf86-video-ati.git
synced 2026-03-24 01:24:43 +00:00
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)
This commit is contained in:
@@ -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
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user