summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichel Dänzer <michel.daenzer@amd.com>2017-08-29 16:56:56 +0900
committerMichel Dänzer <michel@daenzer.net>2017-08-30 17:09:36 +0900
commit6b376c8d73b20c92755527edb0527a233886e4eb (patch)
tree5ff7d445b838dcaf72b1a44e19c2709b6e5353d1
parent5af396253f6a03fa3f8f92e81da231dd581b50c9 (diff)
Create amdgpu_pixmap_get_fb_ptr helper
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) Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--src/amdgpu_pixmap.h46
1 files changed, 27 insertions, 19 deletions
diff --git a/src/amdgpu_pixmap.h b/src/amdgpu_pixmap.h
index 00fb5bf..eded170 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 {