forked from enlightenment/efl
ecore-drm: Add API function to mark a Framebuffer as dirty
Summary: This adds an API function used to mark a framebuffer as dirty @feature Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
parent
0885834b68
commit
a3a6399c3a
|
@ -183,6 +183,7 @@ EAPI extern int ECORE_DRM_EVENT_SEAT_ADD; /**< @since 1.14 */
|
||||||
* @li @ref Ecore_Drm_Output_Group
|
* @li @ref Ecore_Drm_Output_Group
|
||||||
* @li @ref Ecore_Drm_Input_Group
|
* @li @ref Ecore_Drm_Input_Group
|
||||||
* @li @ref Ecore_Drm_Sprite_Group
|
* @li @ref Ecore_Drm_Sprite_Group
|
||||||
|
* @li @ref Ecore_Drm_Fb_Group
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -233,6 +234,20 @@ EAPI Eina_Bool ecore_drm_sprites_crtc_supported(Ecore_Drm_Output *output, unsign
|
||||||
EAPI Ecore_Drm_Fb *ecore_drm_fb_create(Ecore_Drm_Device *dev, int width, int height);
|
EAPI Ecore_Drm_Fb *ecore_drm_fb_create(Ecore_Drm_Device *dev, int width, int height);
|
||||||
EAPI void ecore_drm_fb_destroy(Ecore_Drm_Fb *fb);
|
EAPI void ecore_drm_fb_destroy(Ecore_Drm_Fb *fb);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mark an Ecore_Drm_Fb as dirty
|
||||||
|
*
|
||||||
|
* This function mark an Ecore_Drm_Fb as being dirty
|
||||||
|
*
|
||||||
|
* @param fb The Ecore_Drm_Fb to mark as dirty
|
||||||
|
* @param rects The regions of the Ecore_Drm_Fb which are dirty
|
||||||
|
* @param count The number of regions
|
||||||
|
*
|
||||||
|
* @ingroup Ecore_Drm_Fb_Group
|
||||||
|
* @since 1.15
|
||||||
|
*/
|
||||||
|
EAPI void ecore_drm_fb_dirty(Ecore_Drm_Fb *fb, Eina_Rectangle *rects, unsigned int count);
|
||||||
|
|
||||||
EAPI Eina_Bool ecore_drm_launcher_connect(Ecore_Drm_Device *dev);
|
EAPI Eina_Bool ecore_drm_launcher_connect(Ecore_Drm_Device *dev);
|
||||||
EAPI void ecore_drm_launcher_disconnect(Ecore_Drm_Device *dev);
|
EAPI void ecore_drm_launcher_disconnect(Ecore_Drm_Device *dev);
|
||||||
|
|
||||||
|
|
|
@ -9,11 +9,8 @@
|
||||||
*
|
*
|
||||||
* Functions that deal with frame buffers.
|
* Functions that deal with frame buffers.
|
||||||
*
|
*
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* TODO: DOXY !! */
|
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_ecore_drm_fb_create2(int fd, Ecore_Drm_Fb *fb)
|
_ecore_drm_fb_create2(int fd, Ecore_Drm_Fb *fb)
|
||||||
{
|
{
|
||||||
|
@ -137,3 +134,31 @@ ecore_drm_fb_destroy(Ecore_Drm_Fb *fb)
|
||||||
drmIoctl(fb->fd, DRM_IOCTL_MODE_DESTROY_DUMB, &darg);
|
drmIoctl(fb->fd, DRM_IOCTL_MODE_DESTROY_DUMB, &darg);
|
||||||
free(fb);
|
free(fb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_drm_fb_dirty(Ecore_Drm_Fb *fb, Eina_Rectangle *rects, unsigned int count)
|
||||||
|
{
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN(fb);
|
||||||
|
|
||||||
|
#ifdef DRM_MODE_FEATURE_DIRTYFB
|
||||||
|
drmModeClip *clip;
|
||||||
|
unsigned int i = 0;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
clip = alloca(count * sizeof(drmModeClip));
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
clip[i].x1 = rects[i].x;
|
||||||
|
clip[i].y1 = rects[i].y;
|
||||||
|
clip[i].x2 = rects[i].w;
|
||||||
|
clip[i].y2 = rects[i].h;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = drmModeDirtyFB(fb->fd, fb->id, clip, count);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
if (ret == -EINVAL)
|
||||||
|
ERR("Could not mark FB as Dirty: %m");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue