Add drmModeGetFB2
Add a wrapper around the getfb2 ioctl, which returns extended framebuffer information mirroring addfb2, including multiple planes and modifiers. Changes since v7: - add new symbols to core-symbol.txt (Eric Engestrom) Changes since v5: - style change Changes since v4: - Set fb_id at init instead of memclear() and set (Eric Engestrom) Changes since v3: - remove unnecessary null check in drmModeFreeFB2 (Daniel Stone) Changes since v2: - getfb2 ioctl has been merged upstream - sync include/drm/drm.h in a seperate patch Changes since v1: - functions should be drm_public - modifier should be 64 bits - update ioctl number Signed-off-by: Juston Li <juston.li@intel.com> Signed-off-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Eric Engestrom <eric@engestrom.ch>main
parent
63d914d479
commit
d8731e9eec
|
@ -112,6 +112,7 @@ drmModeFreeConnector
|
||||||
drmModeFreeCrtc
|
drmModeFreeCrtc
|
||||||
drmModeFreeEncoder
|
drmModeFreeEncoder
|
||||||
drmModeFreeFB
|
drmModeFreeFB
|
||||||
|
drmModeFreeFB2
|
||||||
drmModeFreeModeInfo
|
drmModeFreeModeInfo
|
||||||
drmModeFreeObjectProperties
|
drmModeFreeObjectProperties
|
||||||
drmModeFreePlane
|
drmModeFreePlane
|
||||||
|
@ -124,6 +125,7 @@ drmModeGetConnectorCurrent
|
||||||
drmModeGetCrtc
|
drmModeGetCrtc
|
||||||
drmModeGetEncoder
|
drmModeGetEncoder
|
||||||
drmModeGetFB
|
drmModeGetFB
|
||||||
|
drmModeGetFB2
|
||||||
drmModeGetLease
|
drmModeGetLease
|
||||||
drmModeGetPlane
|
drmModeGetPlane
|
||||||
drmModeGetPlaneResources
|
drmModeGetPlaneResources
|
||||||
|
|
|
@ -1594,3 +1594,38 @@ drmModeRevokeLease(int fd, uint32_t lessee_id)
|
||||||
return 0;
|
return 0;
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drm_public drmModeFB2Ptr
|
||||||
|
drmModeGetFB2(int fd, uint32_t fb_id)
|
||||||
|
{
|
||||||
|
struct drm_mode_fb_cmd2 get = {
|
||||||
|
.fb_id = fb_id,
|
||||||
|
};
|
||||||
|
drmModeFB2Ptr ret;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = DRM_IOCTL(fd, DRM_IOCTL_MODE_GETFB2, &get);
|
||||||
|
if (err != 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
ret = drmMalloc(sizeof(drmModeFB2));
|
||||||
|
if (!ret)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
ret->fb_id = fb_id;
|
||||||
|
ret->width = get.width;
|
||||||
|
ret->height = get.height;
|
||||||
|
ret->pixel_format = get.pixel_format;
|
||||||
|
ret->flags = get.flags;
|
||||||
|
ret->modifier = get.modifier[0];
|
||||||
|
memcpy(ret->handles, get.handles, sizeof(uint32_t) * 4);
|
||||||
|
memcpy(ret->pitches, get.pitches, sizeof(uint32_t) * 4);
|
||||||
|
memcpy(ret->offsets, get.offsets, sizeof(uint32_t) * 4);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
drm_public void drmModeFreeFB2(drmModeFB2Ptr ptr)
|
||||||
|
{
|
||||||
|
drmFree(ptr);
|
||||||
|
}
|
||||||
|
|
|
@ -225,6 +225,19 @@ typedef struct _drmModeFB {
|
||||||
uint32_t handle;
|
uint32_t handle;
|
||||||
} drmModeFB, *drmModeFBPtr;
|
} drmModeFB, *drmModeFBPtr;
|
||||||
|
|
||||||
|
typedef struct _drmModeFB2 {
|
||||||
|
uint32_t fb_id;
|
||||||
|
uint32_t width, height;
|
||||||
|
uint32_t pixel_format; /* fourcc code from drm_fourcc.h */
|
||||||
|
uint64_t modifier; /* applies to all buffers */
|
||||||
|
uint32_t flags;
|
||||||
|
|
||||||
|
/* per-plane GEM handle; may be duplicate entries for multiple planes */
|
||||||
|
uint32_t handles[4];
|
||||||
|
uint32_t pitches[4]; /* bytes */
|
||||||
|
uint32_t offsets[4]; /* bytes */
|
||||||
|
} drmModeFB2, *drmModeFB2Ptr;
|
||||||
|
|
||||||
typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr;
|
typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr;
|
||||||
|
|
||||||
typedef struct _drmModePropertyBlob {
|
typedef struct _drmModePropertyBlob {
|
||||||
|
@ -343,6 +356,7 @@ typedef struct _drmModePlaneRes {
|
||||||
extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr );
|
extern void drmModeFreeModeInfo( drmModeModeInfoPtr ptr );
|
||||||
extern void drmModeFreeResources( drmModeResPtr ptr );
|
extern void drmModeFreeResources( drmModeResPtr ptr );
|
||||||
extern void drmModeFreeFB( drmModeFBPtr ptr );
|
extern void drmModeFreeFB( drmModeFBPtr ptr );
|
||||||
|
extern void drmModeFreeFB2( drmModeFB2Ptr ptr );
|
||||||
extern void drmModeFreeCrtc( drmModeCrtcPtr ptr );
|
extern void drmModeFreeCrtc( drmModeCrtcPtr ptr );
|
||||||
extern void drmModeFreeConnector( drmModeConnectorPtr ptr );
|
extern void drmModeFreeConnector( drmModeConnectorPtr ptr );
|
||||||
extern void drmModeFreeEncoder( drmModeEncoderPtr ptr );
|
extern void drmModeFreeEncoder( drmModeEncoderPtr ptr );
|
||||||
|
@ -362,6 +376,7 @@ extern drmModeResPtr drmModeGetResources(int fd);
|
||||||
* Retrieve information about framebuffer bufferId
|
* Retrieve information about framebuffer bufferId
|
||||||
*/
|
*/
|
||||||
extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId);
|
extern drmModeFBPtr drmModeGetFB(int fd, uint32_t bufferId);
|
||||||
|
extern drmModeFB2Ptr drmModeGetFB2(int fd, uint32_t bufferId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new framebuffer with an buffer object as its scanout buffer.
|
* Creates a new framebuffer with an buffer object as its scanout buffer.
|
||||||
|
|
Loading…
Reference in New Issue