Hello community, here is the log from the commit of package xf86-video-ati for openSUSE:Factory checked in at 2019-10-18 14:30:56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xf86-video-ati (Old) and /work/SRC/openSUSE:Factory/.xf86-video-ati.new.2352 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xf86-video-ati" Fri Oct 18 14:30:56 2019 rev:37 rq:738665 version:19.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/xf86-video-ati/xf86-video-ati.changes 2019-03-26 22:30:03.233740080 +0100 +++ /work/SRC/openSUSE:Factory/.xf86-video-ati.new.2352/xf86-video-ati.changes 2019-10-18 14:30:57.992624873 +0200 @@ -1,0 +2,6 @@ +Tue Oct 15 16:55:49 UTC 2019 - Stefan Dirsch <[email protected]> + +- Update to release 19.1.0 + * bug fixes and minor improvements + +------------------------------------------------------------------- Old: ---- xf86-video-ati-19.0.1.tar.bz2 xf86-video-ati-19.0.1.tar.bz2.sig New: ---- xf86-video-ati-19.1.0.tar.bz2 xf86-video-ati-19.1.0.tar.bz2.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xf86-video-ati.spec ++++++ --- /var/tmp/diff_new_pack.DdQeEA/_old 2019-10-18 14:30:59.200621727 +0200 +++ /var/tmp/diff_new_pack.DdQeEA/_new 2019-10-18 14:30:59.208621707 +0200 @@ -12,13 +12,13 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # %define xserver_glamor 1 Name: xf86-video-ati -Version: 19.0.1 +Version: 19.1.0 Release: 0 Summary: ATI video driver for the Xorg X server License: MIT ++++++ xf86-video-ati-19.0.1.tar.bz2 -> xf86-video-ati-19.1.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-19.0.1/ChangeLog new/xf86-video-ati-19.1.0/ChangeLog --- old/xf86-video-ati-19.0.1/ChangeLog 2019-03-19 18:12:05.000000000 +0100 +++ new/xf86-video-ati-19.1.0/ChangeLog 2019-10-15 18:17:13.000000000 +0200 @@ -1,3 +1,123 @@ +commit b9bd8097e1d2c088b081f1b81799ea3892406214 +Author: Michel Dänzer <[email protected]> +Date: Tue Oct 15 17:54:12 2019 +0200 + + Bump version for 19.1.0 release + +commit 2faaecc69b127248718e759c6c98c84d56dd1b6b +Author: Michel Dänzer <[email protected]> +Date: Fri Sep 20 17:24:19 2019 +0200 + + Don't unreference FBs of pixmaps from different screens in LeaveVT + + FindClientResourcesByType finds pixmaps from all screens, but trying to + process ones from other screens here makes no sense and likely results + in a crash or memory corruption. + + Fixes: 06a465484101 ("Make all active CRTCs scan out an all-black + framebuffer in LeaveVT") + +commit 2cbbd8648cdd27db8076565943b932ef81337053 +Author: Michel Dänzer <[email protected]> +Date: Fri Sep 20 18:47:02 2019 +0200 + + Don't set up black scanout buffer if LeaveVT is called from CloseScreen + + Avoids a crash described in + https://gitlab.freedesktop.org/xorg/driver/xf86-video-amdgpu/merge_requests/43#note_223718 + + (Ported from amdgpu commit 5b8bc9fc505c551dcd9b0ed5ab835a49fa4f9fda) + Reviewed-by: Alex Deucher <[email protected]> + +commit c7ed12cb2ea76999351d7cb87877224bdc0664f0 +Author: Michel Dänzer <[email protected]> +Date: Thu Jul 18 18:14:48 2019 +0200 + + Don't disable page flipping completely with SW cursor + + Even with SW cursor, page flipping can be used while no X cursor is + visible. + + Occurred to me in the context of xorg/xserver#828. + (Ported from amdgpu commit 87f41ace4920fd2069794211683659eb25b025a6) + +commit 33803c85f761d343aa7300311b8e9489b1a89495 +Author: Michel Dänzer <[email protected]> +Date: Tue Jun 25 17:46:23 2019 +0200 + + 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) + +commit fee737e82837dc8282a832fc9391ed959c4c3737 +Author: Michel Dänzer <[email protected]> +Date: Fri Jun 14 11:23:34 2019 +0200 + + Remove dri2_drawable_crtc parameter consider_disabled + + All callers were passing TRUE. + + (Ported from amdgpu commit ea19a5207054bb159fc7fb6d88e0ceb10c3da010) + Reviewed-by: Alex Deucher <[email protected]> + +commit 2a3f2d2089f603c99be54c98d7033155e771ce7b +Author: Michel Dänzer <[email protected]> +Date: Fri Jun 14 11:21:40 2019 +0200 + + dri2: Re-use previous CRTC when possible if pick_best_crtc returns NULL + + This way, the MSC will continue ticking at the rate of (the last mode + which was enabled for) that CRTC, instead of the client running + unthrottled. + + (Ported from amdgpu commit 3109f088fdbd89c2ee8078625d4f073852492656) + Reviewed-by: Alex Deucher <[email protected]> + +commit d5f5bc5846ef06c3ecf9e5acf1ca357574f06f5a +Author: Flora Cui <[email protected]> +Date: Fri Jun 14 11:20:12 2019 +0200 + + dri2: reply to client for WaitMSC request in any case + + otherwise client would wait for reply forever and desktop appears hang. + + Signed-off-by: Flora Cui <[email protected]> + (Ported from amdgpu commit fb06fb814700a47464abd756e1111dcc76d0d776) + Reviewed-by: Alex Deucher <[email protected]> + +commit f758908db4e71406e5d437d32e43aabd38a63504 +Author: Michel Dänzer <[email protected]> +Date: Thu May 9 12:35:37 2019 +0200 + + 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 <[email protected]> + +commit d1d8e3c8d0a0a0394d395eba171460501745209b +Author: Michel Dänzer <[email protected]> +Date: Wed Apr 24 12:25:39 2019 +0200 + + Retry get_fb_ptr in get_fb + + If get_fb_ptr returns NULL, try again after pixmap_get_handle, it should + work then. + + Fixes spurious Present page flipping failures using "normal" pixmaps + which aren't shared with direct rendering clients, e.g. with a + compositor using the RENDER extension. + + Bugzilla: https://bugs.freedesktop.org/110417 + (Ported from amdgpu commit bf61e6d7ac1a5754b1026d7f80acf25ef622c491) + Reviewed-by: Alex Deucher <[email protected]> + commit 36703f66c3b06875651606a6280d5dc9d9dad51e Author: Michel Dänzer <[email protected]> Date: Tue Mar 19 18:01:02 2019 +0100 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-19.0.1/configure new/xf86-video-ati-19.1.0/configure --- old/xf86-video-ati-19.0.1/configure 2019-03-19 18:11:50.000000000 +0100 +++ new/xf86-video-ati-19.1.0/configure 2019-10-15 18:16:57.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for xf86-video-ati 19.0.1. +# Generated by GNU Autoconf 2.69 for xf86-video-ati 19.1.0. # # Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/Radeon>. # @@ -591,8 +591,8 @@ # Identity of this package. PACKAGE_NAME='xf86-video-ati' PACKAGE_TARNAME='xf86-video-ati' -PACKAGE_VERSION='19.0.1' -PACKAGE_STRING='xf86-video-ati 19.0.1' +PACKAGE_VERSION='19.1.0' +PACKAGE_STRING='xf86-video-ati 19.1.0' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/Radeon' PACKAGE_URL='' @@ -1408,7 +1408,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures xf86-video-ati 19.0.1 to adapt to many kinds of systems. +\`configure' configures xf86-video-ati 19.1.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1479,7 +1479,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xf86-video-ati 19.0.1:";; + short | recursive ) echo "Configuration of xf86-video-ati 19.1.0:";; esac cat <<\_ACEOF @@ -1642,7 +1642,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xf86-video-ati configure 19.0.1 +xf86-video-ati configure 19.1.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2057,7 +2057,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xf86-video-ati $as_me 19.0.1, which was +It was created by xf86-video-ati $as_me 19.1.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2928,7 +2928,7 @@ # Define the identity of the package. PACKAGE='xf86-video-ati' - VERSION='19.0.1' + VERSION='19.1.0' cat >>confdefs.h <<_ACEOF @@ -20729,7 +20729,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by xf86-video-ati $as_me 19.0.1, which was +This file was extended by xf86-video-ati $as_me 19.1.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -20795,7 +20795,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -xf86-video-ati config.status 19.0.1 +xf86-video-ati config.status 19.1.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-19.0.1/configure.ac new/xf86-video-ati-19.1.0/configure.ac --- old/xf86-video-ati-19.0.1/configure.ac 2019-03-19 18:11:19.000000000 +0100 +++ new/xf86-video-ati-19.1.0/configure.ac 2019-10-15 18:16:29.000000000 +0200 @@ -23,7 +23,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([xf86-video-ati], - [19.0.1], + [19.1.0], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/Radeon], [xf86-video-ati]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-19.0.1/src/radeon.h new/xf86-video-ati-19.1.0/src/radeon.h --- old/xf86-video-ati-19.0.1/src/radeon.h 2019-03-19 18:11:19.000000000 +0100 +++ new/xf86-video-ati-19.1.0/src/radeon.h 2019-10-15 18:16:29.000000000 +0200 @@ -309,6 +309,7 @@ struct radeon_buffer *bo; struct drmmode_fb *fb; + Bool fb_failed; uint32_t tiling_flags; @@ -877,21 +878,22 @@ radeon_pixmap_get_fb(PixmapPtr pix) { struct drmmode_fb **fb_ptr = radeon_pixmap_get_fb_ptr(pix); + uint32_t handle; - if (!fb_ptr) - return NULL; - - if (!*fb_ptr) { - uint32_t handle; - - if (radeon_get_pixmap_handle(pix, &handle)) { - ScrnInfoPtr scrn = xf86ScreenToScrn(pix->drawable.pScreen); - RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn); - - *fb_ptr = radeon_fb_create(scrn, pRADEONEnt->fd, pix->drawable.width, - pix->drawable.height, pix->devKind, - handle); - } + if (fb_ptr && *fb_ptr) + return *fb_ptr; + + if (radeon_get_pixmap_handle(pix, &handle)) { + ScrnInfoPtr scrn = xf86ScreenToScrn(pix->drawable.pScreen); + RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn); + + if (!fb_ptr) + fb_ptr = radeon_pixmap_get_fb_ptr(pix); + + *fb_ptr = radeon_fb_create(scrn, pRADEONEnt->fd, + pix->drawable.width, + pix->drawable.height, pix->devKind, + handle); } return *fb_ptr; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-19.0.1/src/radeon_dri2.c new/xf86-video-ati-19.1.0/src/radeon_dri2.c --- old/xf86-video-ati-19.0.1/src/radeon_dri2.c 2019-03-19 18:11:19.000000000 +0100 +++ new/xf86-video-ati-19.1.0/src/radeon_dri2.c 2019-10-15 18:16:29.000000000 +0200 @@ -509,18 +509,20 @@ } static -xf86CrtcPtr radeon_dri2_drawable_crtc(DrawablePtr pDraw, Bool consider_disabled) +xf86CrtcPtr radeon_dri2_drawable_crtc(DrawablePtr pDraw) { ScreenPtr pScreen = pDraw->pScreen; ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); - xf86CrtcPtr crtc = radeon_pick_best_crtc(pScrn, consider_disabled, + xf86CrtcPtr crtc = radeon_pick_best_crtc(pScrn, TRUE, pDraw->x, pDraw->x + pDraw->width, pDraw->y, pDraw->y + pDraw->height); - if (crtc && pDraw->type == DRAWABLE_WINDOW) { + if (pDraw->type == DRAWABLE_WINDOW) { struct dri2_window_priv *priv = get_dri2_window_priv((WindowPtr)pDraw); - if (priv->crtc && priv->crtc != crtc) { + if (!crtc) { + crtc = priv->crtc; + } else if (priv->crtc && priv->crtc != crtc) { CARD64 ust, mscold, mscnew; if (radeon_dri2_get_crtc_msc(priv->crtc, &ust, &mscold) && @@ -926,7 +928,7 @@ */ static int radeon_dri2_get_msc(DrawablePtr draw, CARD64 *ust, CARD64 *msc) { - xf86CrtcPtr crtc = radeon_dri2_drawable_crtc(draw, TRUE); + xf86CrtcPtr crtc = radeon_dri2_drawable_crtc(draw); /* Drawable not displayed, make up a value */ if (!crtc) { @@ -1041,7 +1043,7 @@ ScrnInfoPtr scrn = xf86ScreenToScrn(screen); DRI2FrameEventPtr wait_info = NULL; uintptr_t drm_queue_seq = 0; - xf86CrtcPtr crtc = radeon_dri2_drawable_crtc(draw, TRUE); + xf86CrtcPtr crtc = radeon_dri2_drawable_crtc(draw); uint32_t msc_delta; uint32_t seq; CARD64 current_msc; @@ -1156,6 +1158,9 @@ out_complete: if (wait_info) radeon_dri2_deferred_event(NULL, 0, wait_info); + else + DRI2WaitMSCComplete(client, draw, 0, 0, 0); + return TRUE; } @@ -1187,7 +1192,7 @@ { ScreenPtr screen = draw->pScreen; ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - xf86CrtcPtr crtc = radeon_dri2_drawable_crtc(draw, TRUE); + xf86CrtcPtr crtc = radeon_dri2_drawable_crtc(draw); uint32_t msc_delta; drmVBlankSeqType type; uint32_t seq; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-19.0.1/src/radeon_dri3.c new/xf86-video-ati-19.1.0/src/radeon_dri3.c --- old/xf86-video-ati-19.0.1/src/radeon_dri3.c 2019-03-19 18:11:19.000000000 +0100 +++ new/xf86-video-ati-19.1.0/src/radeon_dri3.c 2019-10-15 18:16:29.000000000 +0200 @@ -220,29 +220,13 @@ 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; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-19.0.1/src/radeon_kms.c new/xf86-video-ati-19.1.0/src/radeon_kms.c --- old/xf86-video-ati-19.0.1/src/radeon_kms.c 2019-03-19 18:11:19.000000000 +0100 +++ new/xf86-video-ati-19.1.0/src/radeon_kms.c 2019-10-15 18:16:29.000000000 +0200 @@ -1917,19 +1917,15 @@ if (!pScrn->is_gpu) { if (info->dri2.pKernelDRMVersion->version_minor >= 8) { - Bool sw_cursor = xf86ReturnOptValBool(info->Options, - OPTION_SW_CURSOR, FALSE); - info->allowPageFlip = xf86ReturnOptValBool(info->Options, OPTION_PAGE_FLIP, TRUE); - if (sw_cursor || info->shadow_primary) { + if (info->shadow_primary) { xf86DrvMsg(pScrn->scrnIndex, info->allowPageFlip ? X_WARNING : X_DEFAULT, "KMS Pageflipping: disabled%s\n", info->allowPageFlip ? - (sw_cursor ? " because of SWcursor" : - " because of ShadowPrimary") : ""); + " because of ShadowPrimary" : ""); info->allowPageFlip = FALSE; } else { xf86DrvMsg(pScrn->scrnIndex, X_INFO, @@ -2606,16 +2602,25 @@ } static void -pixmap_unref_fb(void *value, XID id, void *cdata) +pixmap_unref_fb(PixmapPtr pixmap) { - PixmapPtr pixmap = value; - RADEONEntPtr pRADEONEnt = cdata; + ScrnInfoPtr scrn = xf86ScreenToScrn(pixmap->drawable.pScreen); struct drmmode_fb **fb_ptr = radeon_pixmap_get_fb_ptr(pixmap); + RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn); if (fb_ptr) drmmode_fb_reference(pRADEONEnt->fd, fb_ptr, NULL); } +static void +client_pixmap_unref_fb(void *value, XID id, void *pScreen) +{ + PixmapPtr pixmap = value; + + if (pixmap->drawable.pScreen == pScreen) + pixmap_unref_fb(pixmap); +} + void RADEONLeaveVT_KMS(ScrnInfoPtr pScrn) { RADEONInfoPtr info = RADEONPTR(pScrn); @@ -2633,6 +2638,12 @@ unsigned w = 0, h = 0; int i; + /* If we're called from CloseScreen, trying to clear the black + * scanout BO will likely crash and burn + */ + if (!pScreen->GCperDepth[0]) + goto hide_cursors; + /* Compute maximum scanout dimensions of active CRTCs */ for (i = 0; i < xf86_config->num_crtc; i++) { crtc = xf86_config->crtc[i]; @@ -2671,11 +2682,9 @@ if (pScrn->is_gpu) { if (drmmode_crtc->scanout[0].pixmap) - pixmap_unref_fb(drmmode_crtc->scanout[0].pixmap, - None, pRADEONEnt); + pixmap_unref_fb(drmmode_crtc->scanout[0].pixmap); if (drmmode_crtc->scanout[1].pixmap) - pixmap_unref_fb(drmmode_crtc->scanout[1].pixmap, - None, pRADEONEnt); + pixmap_unref_fb(drmmode_crtc->scanout[1].pixmap); } else { drmmode_crtc_scanout_free(crtc); } @@ -2695,18 +2704,20 @@ (!clients[i] || clients[i]->clientState != ClientStateRunning)) continue; - FindClientResourcesByType(clients[i], RT_PIXMAP, pixmap_unref_fb, - pRADEONEnt); + FindClientResourcesByType(clients[i], RT_PIXMAP, + client_pixmap_unref_fb, pScreen); } - pixmap_unref_fb(pScreen->GetScreenPixmap(pScreen), None, pRADEONEnt); + pixmap_unref_fb(pScreen->GetScreenPixmap(pScreen)); } else { memset(info->front_buffer->bo.radeon->ptr, 0, pScrn->displayWidth * info->pixel_bytes * pScrn->virtualY); } - TimerSet(NULL, 0, 1000, cleanup_black_fb, pScreen); + if (pScreen->GCperDepth[0]) + TimerSet(NULL, 0, 1000, cleanup_black_fb, pScreen); + hide_cursors: xf86_hide_cursors (pScrn); radeon_drop_drm_master(pScrn); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-ati-19.0.1/src/radeon_present.c new/xf86-video-ati-19.1.0/src/radeon_present.c --- old/xf86-video-ati-19.0.1/src/radeon_present.c 2019-03-19 18:11:19.000000000 +0100 +++ new/xf86-video-ati-19.1.0/src/radeon_present.c 2019-10-15 18:16:29.000000000 +0200 @@ -254,6 +254,7 @@ 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 @@ 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 */
