From: Michel Dänzer <michel.daenzer@xxxxxxx> 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 <michel.daenzer at amd.com> --- 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