From: Michel Dänzer <[email protected]>

Preparatory, no functional change intended yet.

Also inline amdgpu_pixmap_create_fb into amdgpu_pixmap_get_fb, since
there's only one call-site.

(Ported from radeon commit 20f6b56fdb74d88086e8e094013fedbb14e50a24)

Signed-off-by: Michel Dänzer <[email protected]>
---
 src/amdgpu_pixmap.h | 46 +++++++++++++++++++++++++++-------------------
 1 file changed, 27 insertions(+), 19 deletions(-)

diff --git a/src/amdgpu_pixmap.h b/src/amdgpu_pixmap.h
index 00fb5bf05..eded17037 100644
--- a/src/amdgpu_pixmap.h
+++ b/src/amdgpu_pixmap.h
@@ -121,39 +121,47 @@ amdgpu_fb_create(int drm_fd, uint32_t width, uint32_t 
height, uint8_t depth,
        return NULL;
 }
 
-static inline struct drmmode_fb*
-amdgpu_pixmap_create_fb(int drm_fd, PixmapPtr pix)
+static inline struct drmmode_fb**
+amdgpu_pixmap_get_fb_ptr(PixmapPtr pix)
 {
-       uint32_t handle;
+       ScrnInfoPtr scrn = xf86ScreenToScrn(pix->drawable.pScreen);
+       AMDGPUInfoPtr info = AMDGPUPTR(scrn);
 
-       if (!amdgpu_pixmap_get_handle(pix, &handle))
-               return NULL;
+       if (info->use_glamor) {
+               struct amdgpu_pixmap *priv = amdgpu_get_pixmap_private(pix);
+
+               if (!priv)
+                       return NULL;
+
+               return &priv->fb;
+       }
 
-       return amdgpu_fb_create(drm_fd, pix->drawable.width, 
pix->drawable.height,
-                               pix->drawable.depth, pix->drawable.bitsPerPixel,
-                               pix->devKind, handle);
+       return NULL;
 }
 
 static inline struct drmmode_fb*
 amdgpu_pixmap_get_fb(PixmapPtr pix)
 {
-       ScrnInfoPtr scrn = xf86ScreenToScrn(pix->drawable.pScreen);
-       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
-       AMDGPUInfoPtr info = AMDGPUPTR(scrn);
+       struct drmmode_fb **fb_ptr = amdgpu_pixmap_get_fb_ptr(pix);
 
-       if (info->use_glamor) {
-               struct amdgpu_pixmap *priv = amdgpu_get_pixmap_private(pix);
+       if (!fb_ptr)
+               return NULL;
 
-               if (!priv)
-                       return NULL;
+       if (!*fb_ptr) {
+               uint32_t handle;
 
-               if (!priv->fb)
-                       priv->fb = amdgpu_pixmap_create_fb(pAMDGPUEnt->fd, pix);
+               if (amdgpu_pixmap_get_handle(pix, &handle)) {
+                       ScrnInfoPtr scrn = 
xf86ScreenToScrn(pix->drawable.pScreen);
+                       AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(scrn);
 
-               return priv->fb;
+                       *fb_ptr = amdgpu_fb_create(pAMDGPUEnt->fd, 
pix->drawable.width,
+                                                  pix->drawable.height, 
pix->drawable.depth,
+                                                  pix->drawable.bitsPerPixel, 
pix->devKind,
+                                                  handle);
+               }
        }
 
-       return NULL;
+       return *fb_ptr;
 }
 
 enum {
-- 
2.14.1

_______________________________________________
amd-gfx mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to