mirror of
https://github.com/X11Libre/xf86-video-ati.git
synced 2026-03-24 01:24:43 +00:00
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 <alexander.deucher@amd.com>
This commit is contained in:
25
src/radeon.h
25
src/radeon.h
@@ -877,21 +877,22 @@ static inline struct drmmode_fb*
|
||||
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 && *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) {
|
||||
uint32_t handle;
|
||||
if (!fb_ptr)
|
||||
fb_ptr = radeon_pixmap_get_fb_ptr(pix);
|
||||
|
||||
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);
|
||||
}
|
||||
*fb_ptr = radeon_fb_create(scrn, pRADEONEnt->fd,
|
||||
pix->drawable.width,
|
||||
pix->drawable.height, pix->devKind,
|
||||
handle);
|
||||
}
|
||||
|
||||
return *fb_ptr;
|
||||
|
||||
Reference in New Issue
Block a user