Bring dirty code from old branch

main
Jakob Bornecrantz 2009-11-24 18:00:12 +01:00
parent 6f66de982a
commit 3e48613b48
4 changed files with 42 additions and 0 deletions

View File

@ -696,6 +696,7 @@ struct drm_gem_open {
#define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd) #define DRM_IOCTL_MODE_GETFB DRM_IOWR(0xAD, struct drm_mode_fb_cmd)
#define DRM_IOCTL_MODE_ADDFB DRM_IOWR(0xAE, struct drm_mode_fb_cmd) #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_RMFB DRM_IOWR(0xAF, unsigned int)
#define DRM_IOCTL_MODE_DIRTYFB DRM_IOWR(0xB0, struct drm_mode_fb_dirty_cmd)
/** /**
* Device specific ioctls should only be in their respective headers * Device specific ioctls should only be in their respective headers

View File

@ -222,6 +222,15 @@ struct drm_mode_fb_cmd {
__u32 handle; __u32 handle;
}; };
struct drm_mode_fb_dirty_cmd {
__u32 fb_id;
__u32 flags;
__u32 num_clips;
__u32 reserved1;
__u64 reserved2;
__u64 clips_ptr;
};
struct drm_mode_mode_cmd { struct drm_mode_mode_cmd {
__u32 connector_id; __u32 connector_id;
struct drm_mode_modeinfo mode; struct drm_mode_modeinfo mode;

View File

@ -241,6 +241,18 @@ drmModeFBPtr drmModeGetFB(int fd, uint32_t buf)
return r; 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 * Crtc functions

View File

@ -145,6 +145,17 @@
#endif /* _DRM_MODE_H */ #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 { typedef struct _drmModeRes {
int count_fbs; int count_fbs;
@ -185,6 +196,8 @@ typedef struct _drmModeFB {
uint32_t handle; uint32_t handle;
} drmModeFB, *drmModeFBPtr; } drmModeFB, *drmModeFBPtr;
typedef struct drm_clip_rect drmModeClip, *drmModeClipPtr;
typedef struct _drmModePropertyBlob { typedef struct _drmModePropertyBlob {
uint32_t id; uint32_t id;
uint32_t length; 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); 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 * Crtc functions
*/ */