commit
3bd834a217
|
@ -697,6 +697,7 @@ struct drm_gem_open {
|
|||
#define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd)
|
||||
#define DRM_IOCTL_MODE_RMFB DRM_IOWR(0xAF, unsigned int)
|
||||
#define DRM_IOCTL_MODE_PAGE_FLIP DRM_IOWR(0xB0, struct drm_mode_crtc_page_flip)
|
||||
#define DRM_IOCTL_MODE_DIRTYFB DRM_IOWR(0xB1, struct drm_mode_fb_dirty_cmd)
|
||||
|
||||
/*@}*/
|
||||
|
||||
|
|
|
@ -222,6 +222,45 @@ struct drm_mode_fb_cmd {
|
|||
__u32 handle;
|
||||
};
|
||||
|
||||
#define DRM_MODE_FB_DIRTY_ANNOTATE_COPY 0x01
|
||||
#define DRM_MODE_FB_DIRTY_ANNOTATE_FILL 0x02
|
||||
#define DRM_MODE_FB_DIRTY_FLAGS 0x03
|
||||
|
||||
/*
|
||||
* Mark a region of a framebuffer as dirty.
|
||||
*
|
||||
* Some hardware does not automatically update display contents
|
||||
* as a hardware or software draw to a framebuffer. This ioctl
|
||||
* allows userspace to tell the kernel and the hardware what
|
||||
* regions of the framebuffer have changed.
|
||||
*
|
||||
* The kernel or hardware is free to update more then just the
|
||||
* region specified by the clip rects. The kernel or hardware
|
||||
* may also delay and/or coalesce several calls to dirty into a
|
||||
* single update.
|
||||
*
|
||||
* Userspace may annotate the updates, the annotates are a
|
||||
* promise made by the caller that the change is either a copy
|
||||
* of pixels or a fill of a single color in the region specified.
|
||||
*
|
||||
* If the DRM_MODE_FB_DIRTY_ANNOTATE_COPY flag is given then
|
||||
* the number of updated regions are half of num_clips given,
|
||||
* where the clip rects are paired in src and dst. The width and
|
||||
* height of each one of the pairs must match.
|
||||
*
|
||||
* If the DRM_MODE_FB_DIRTY_ANNOTATE_FILL flag is given the caller
|
||||
* promises that the region specified of the clip rects is filled
|
||||
* completely with a single color as given in the color argument.
|
||||
*/
|
||||
|
||||
struct drm_mode_fb_dirty_cmd {
|
||||
__u32 fb_id;
|
||||
__u32 flags;
|
||||
__u32 color;
|
||||
__u32 num_clips;
|
||||
__u64 clips_ptr;
|
||||
};
|
||||
|
||||
struct drm_mode_mode_cmd {
|
||||
__u32 connector_id;
|
||||
struct drm_mode_modeinfo mode;
|
||||
|
|
|
@ -241,6 +241,18 @@ drmModeFBPtr drmModeGetFB(int fd, uint32_t buf)
|
|||
return r;
|
||||
}
|
||||
|
||||
int drmModeDirtyFB(int fd, uint32_t bufferId,
|
||||
drmModeClipPtr clips, uint32_t num_clips)
|
||||
{
|
||||
struct drm_mode_fb_dirty_cmd dirty = { 0 };
|
||||
|
||||
dirty.fb_id = bufferId;
|
||||
dirty.clips_ptr = VOID2U64(clips);
|
||||
dirty.num_clips = num_clips;
|
||||
|
||||
return drmIoctl(fd, DRM_IOCTL_MODE_DIRTYFB, &dirty);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Crtc functions
|
||||
|
|
|
@ -145,6 +145,17 @@
|
|||
|
||||
#endif /* _DRM_MODE_H */
|
||||
|
||||
|
||||
/*
|
||||
* Feature defines
|
||||
*
|
||||
* Just because these are defined doesn't mean that the kernel
|
||||
* can do that feature, its just for new code vs old libdrm.
|
||||
*/
|
||||
#define DRM_MODE_FEATURE_KMS 1
|
||||
#define DRM_MODE_FEATURE_DIRTYFB 1
|
||||
|
||||
|
||||
typedef struct _drmModeRes {
|
||||
|
||||
int count_fbs;
|
||||
|
@ -185,6 +196,8 @@ typedef struct _drmModeFB {
|
|||
uint32_t handle;
|
||||
} drmModeFB, *drmModeFBPtr;
|
||||
|
||||
typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr;
|
||||
|
||||
typedef struct _drmModePropertyBlob {
|
||||
uint32_t id;
|
||||
uint32_t length;
|
||||
|
@ -293,6 +306,13 @@ extern int drmModeAddFB(int fd, uint32_t width, uint32_t height, uint8_t depth,
|
|||
*/
|
||||
extern int drmModeRmFB(int fd, uint32_t bufferId);
|
||||
|
||||
/**
|
||||
* Mark a region of a framebuffer as dirty.
|
||||
*/
|
||||
extern int drmModeDirtyFB(int fd, uint32_t bufferId,
|
||||
drmModeClipPtr clips, uint32_t num_clips);
|
||||
|
||||
|
||||
/*
|
||||
* Crtc functions
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue