From: Michel Dänzer <michel.daen...@amd.com>

Preparatory, no functional change intended yet.

Also inline radeon_pixmap_create_fb into radeon_pixmap_get_fb, since
there's only one call-site anymore.

Signed-off-by: Michel Dänzer <michel.daen...@amd.com>
---
 src/radeon.h | 53 +++++++++++++++++++++++++++++------------------------
 1 file changed, 29 insertions(+), 24 deletions(-)

diff --git a/src/radeon.h b/src/radeon.h
index 71123c7c7..5ce9999ab 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -842,24 +842,10 @@ radeon_fb_create(int drm_fd, uint32_t width, uint32_t 
height, uint8_t depth,
     return NULL;
 }
 
-static inline struct drmmode_fb*
-radeon_pixmap_create_fb(int drm_fd, PixmapPtr pix)
-{
-    uint32_t handle;
-
-    if (!radeon_get_pixmap_handle(pix, &handle))
-       return NULL;
-
-    return radeon_fb_create(drm_fd, pix->drawable.width, pix->drawable.height,
-                           pix->drawable.depth, pix->drawable.bitsPerPixel,
-                           pix->devKind, handle);
-}
-
-static inline struct drmmode_fb*
-radeon_pixmap_get_fb(PixmapPtr pix)
+static inline struct drmmode_fb**
+radeon_pixmap_get_fb_ptr(PixmapPtr pix)
 {
     ScrnInfoPtr scrn = xf86ScreenToScrn(pix->drawable.pScreen);
-    RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
     RADEONInfoPtr info = RADEONPTR(scrn);
 
 #ifdef USE_GLAMOR
@@ -869,10 +855,7 @@ radeon_pixmap_get_fb(PixmapPtr pix)
        if (!priv)
            return NULL;
 
-       if (!priv->fb)
-           priv->fb = radeon_pixmap_create_fb(pRADEONEnt->fd, pix);
-
-       return priv->fb;
+       return &priv->fb;
     } else
 #endif
     if (info->accelOn)
@@ -883,15 +866,37 @@ radeon_pixmap_get_fb(PixmapPtr pix)
        if (!driver_priv)
            return NULL;
 
-       if (!driver_priv->fb)
-           driver_priv->fb = radeon_pixmap_create_fb(pRADEONEnt->fd, pix);
-
-       return driver_priv->fb;
+       return &driver_priv->fb;
     }
 
     return NULL;
 }
 
+static inline struct drmmode_fb*
+radeon_pixmap_get_fb(PixmapPtr pix)
+{
+    struct drmmode_fb **fb_ptr = radeon_pixmap_get_fb_ptr(pix);
+
+    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(pRADEONEnt->fd, pix->drawable.width,
+                                      pix->drawable.height, 
pix->drawable.depth,
+                                      pix->drawable.bitsPerPixel, pix->devKind,
+                                      handle);
+       }
+    }
+
+    return *fb_ptr;
+}
+
 #define CP_PACKET0(reg, n)                                             \
        (RADEON_CP_PACKET0 | ((n) << 16) | ((reg) >> 2))
 #define CP_PACKET1(reg0, reg1)                                         \
-- 
2.14.1

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to