ecore-drm2: Remove #ifdef HAVE_ATOMIC_DRM

As we now use static_libs/libdrm for compiling ecore-drm2, we can
remove the atomic #ifdefs as we can run-time check this now.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
Chris Michael 2017-06-09 14:20:05 -04:00
parent de12621c90
commit bbd18510d6
5 changed files with 33 additions and 58 deletions

View File

@ -17,14 +17,12 @@ int (*sym_drmIoctl)(int fd, unsigned long request, void *arg) = NULL;
void *(*sym_drmModeObjectGetProperties)(int fd, uint32_t object_id, uint32_t object_type) = NULL;
void (*sym_drmModeFreeObjectProperties)(drmModeObjectPropertiesPtr ptr) = NULL;
int (*sym_drmModeCreatePropertyBlob)(int fd, const void *data, size_t size, uint32_t *id) = NULL;
# ifdef HAVE_ATOMIC_DRM
void *(*sym_drmModeAtomicAlloc)(void) = NULL;
void (*sym_drmModeAtomicFree)(drmModeAtomicReqPtr req) = NULL;
int (*sym_drmModeAtomicAddProperty)(drmModeAtomicReqPtr req, uint32_t object_id, uint32_t property_id, uint64_t value) = NULL;
int (*sym_drmModeAtomicCommit)(int fd, drmModeAtomicReqPtr req, uint32_t flags, void *user_data) = NULL;
void (*sym_drmModeAtomicSetCursor)(drmModeAtomicReqPtr req, int cursor) = NULL;
int (*sym_drmModeAtomicMerge)(drmModeAtomicReqPtr base, drmModeAtomicReqPtr augment);
# endif
void *(*sym_drmModeGetEncoder)(int fd, uint32_t encoder_id) = NULL;
void (*sym_drmModeFreeEncoder)(drmModeEncoderPtr ptr) = NULL;
void *(*sym_drmModeGetCrtc)(int fd, uint32_t crtcId) = NULL;
@ -96,14 +94,12 @@ _ecore_drm2_link(void)
SYM(drm_lib, drmModeObjectGetProperties);
SYM(drm_lib, drmModeFreeObjectProperties);
SYM(drm_lib, drmModeCreatePropertyBlob);
#ifdef HAVE_ATOMIC_DRM
SYM(drm_lib, drmModeAtomicAlloc);
SYM(drm_lib, drmModeAtomicFree);
SYM(drm_lib, drmModeAtomicAddProperty);
SYM(drm_lib, drmModeAtomicCommit);
SYM(drm_lib, drmModeAtomicSetCursor);
SYM(drm_lib, drmModeAtomicMerge);
#endif
SYM(drm_lib, drmModeGetEncoder);
SYM(drm_lib, drmModeFreeEncoder);
SYM(drm_lib, drmModeGetCrtc);

View File

@ -4,9 +4,7 @@
# define DRM_CAP_DUMB_PREFER_SHADOW 0x4
#endif
#ifdef HAVE_ATOMIC_DRM
# include <sys/utsname.h>
#endif
#include <sys/utsname.h>
Eina_Bool _ecore_drm2_use_atomic = EINA_TRUE;
@ -143,7 +141,6 @@ out:
return ret;
}
#ifdef HAVE_ATOMIC_DRM
# if 0
static Eina_Bool
_drm2_atomic_usable(int fd)
@ -187,7 +184,6 @@ _drm2_atomic_usable(int fd)
return ret;
}
# endif
#endif
static void
_drm2_atomic_state_crtc_fill(Ecore_Drm2_Crtc_State *cstate, int fd)
@ -614,15 +610,15 @@ ecore_drm2_device_open(Ecore_Drm2_Device *device)
DBG("Device Path: %s", device->path);
DBG("Device Fd: %d", device->fd);
#ifdef HAVE_ATOMIC_DRM
# if 0
/* check that this system can do atomic */
_ecore_drm2_use_atomic = _drm2_atomic_usable(device->fd);
# endif
if (getenv("ECORE_DRM2_ATOMIC_DISABLE"))
_ecore_drm2_use_atomic = EINA_FALSE;
if (_ecore_drm2_use_atomic)
#endif
{
if (sym_drmSetClientCap(device->fd,
DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1) < 0)

View File

@ -248,11 +248,12 @@ _ecore_drm2_fb_buffer_release(Ecore_Drm2_Output *output, Ecore_Drm2_Output_State
if (output->release_cb) output->release_cb(output->release_data, s->fb);
_ecore_drm2_fb_deref(s->fb);
s->fb = NULL;
#ifdef HAVE_ATOMIC_DRM
if (s->atomic_req)
sym_drmModeAtomicFree(s->atomic_req);
s->atomic_req = NULL;
#endif
if (_ecore_drm2_use_atomic)
{
if (s->atomic_req)
sym_drmModeAtomicFree(s->atomic_req);
s->atomic_req = NULL;
}
}
EAPI Eina_Bool
@ -268,21 +269,22 @@ ecore_drm2_fb_flip_complete(Ecore_Drm2_Output *output)
output->current.fb = output->pending.fb;
output->pending.fb = NULL;
#ifdef HAVE_ATOMIC_DRM
Eina_List *l, *ll;
Ecore_Drm2_Plane *plane;
output->current.atomic_req = output->pending.atomic_req;
output->pending.atomic_req = NULL;
EINA_LIST_FOREACH_SAFE(output->planes, l, ll, plane)
if (_ecore_drm2_use_atomic)
{
if (!plane->dead) continue;
output->planes = eina_list_remove_list(output->planes, l);
free(plane);
Eina_List *l, *ll;
Ecore_Drm2_Plane *plane;
output->current.atomic_req = output->pending.atomic_req;
output->pending.atomic_req = NULL;
EINA_LIST_FOREACH_SAFE(output->planes, l, ll, plane)
{
if (!plane->dead) continue;
output->planes = eina_list_remove_list(output->planes, l);
free(plane);
}
}
#endif
EINA_LIST_FREE(output->fbs, fb)
_ecore_drm2_fb_deref(fb);
output->fbs = NULL;
@ -293,7 +295,6 @@ ecore_drm2_fb_flip_complete(Ecore_Drm2_Output *output)
Eina_Bool
_fb_atomic_flip_test(Ecore_Drm2_Output *output)
{
#ifdef HAVE_ATOMIC_DRM
int ret = 0;
Eina_List *l;
Ecore_Drm2_Crtc_State *cstate;
@ -303,6 +304,8 @@ _fb_atomic_flip_test(Ecore_Drm2_Output *output)
uint32_t flags = DRM_MODE_ATOMIC_NONBLOCK | DRM_MODE_ATOMIC_ALLOW_MODESET |
DRM_MODE_ATOMIC_TEST_ONLY;
if (!_ecore_drm2_use_atomic) return EINA_FALSE;
req = sym_drmModeAtomicAlloc();
if (!req) return EINA_FALSE;
@ -401,7 +404,6 @@ _fb_atomic_flip_test(Ecore_Drm2_Output *output)
err:
DBG("Failed Atomic Test: %m");
sym_drmModeAtomicFree(req);
#endif
return EINA_FALSE;
}
@ -409,12 +411,13 @@ err:
static int
_fb_atomic_flip(Ecore_Drm2_Output *output)
{
#ifdef HAVE_ATOMIC_DRM
int res = 0;
uint32_t flags =
DRM_MODE_ATOMIC_NONBLOCK | DRM_MODE_PAGE_FLIP_EVENT |
DRM_MODE_ATOMIC_ALLOW_MODESET;
if (!_ecore_drm2_use_atomic) return -1;
/* If we have no req yet, we're flipping to current state.
* rebuild the current state in the prep state */
if (!output->prep.atomic_req) _fb_atomic_flip_test(output);
@ -433,9 +436,6 @@ _fb_atomic_flip(Ecore_Drm2_Output *output)
}
return 0;
#endif
return -1;
}
static int
@ -578,10 +578,13 @@ ecore_drm2_fb_flip(Ecore_Drm2_Fb *fb, Ecore_Drm2_Output *output)
}
output->pending.fb = output->prep.fb;
output->prep.fb = NULL;
#ifdef HAVE_ATOMIC_DRM
output->pending.atomic_req = output->prep.atomic_req;
output->prep.atomic_req = NULL;
#endif
if (_ecore_drm2_use_atomic)
{
output->pending.atomic_req = output->prep.atomic_req;
output->prep.atomic_req = NULL;
}
return 0;
}

View File

@ -193,7 +193,6 @@ _output_edid_parse(Ecore_Drm2_Output *output, const uint8_t *data, size_t len)
return 0;
}
//#ifdef HAVE_ATOMIC_DRM
static void
_output_edid_atomic_find(Ecore_Drm2_Output *output)
{
@ -213,7 +212,6 @@ _output_edid_atomic_find(Ecore_Drm2_Output *output)
eina_stringshare_replace(&output->serial, output->edid.serial);
}
}
//#endif
static void
_output_edid_find(Ecore_Drm2_Output *output, const drmModeConnector *conn)
@ -576,7 +574,6 @@ _output_matrix_update(Ecore_Drm2_Output *output)
eina_matrix4_inverse(&output->inverse, &output->matrix);
}
//#ifdef HAVE_ATOMIC_DRM
static Ecore_Drm2_Crtc_State *
_atomic_state_crtc_duplicate(Ecore_Drm2_Crtc_State *state)
{
@ -673,7 +670,6 @@ _output_plane_states_get(Ecore_Drm2_Atomic_State *state, unsigned int crtc_id, i
return states;
}
//#endif
static Eina_Bool
_output_create(Ecore_Drm2_Device *dev, const drmModeRes *res, const drmModeConnector *conn, int x, int y, int *w, Eina_Bool cloned)
@ -756,11 +752,9 @@ _output_create(Ecore_Drm2_Device *dev, const drmModeRes *res, const drmModeConne
_output_modes_create(dev, output, conn);
#ifdef HAVE_ATOMIC_DRM
if (_ecore_drm2_use_atomic)
_output_edid_atomic_find(output);
else
#endif
_output_edid_find(output, conn);
if (output->connected) output->enabled = EINA_TRUE;
@ -887,13 +881,11 @@ _output_destroy(Ecore_Drm2_Device *dev, Ecore_Drm2_Output *output)
Ecore_Drm2_Plane *plane;
Ecore_Drm2_Plane_State *pstate;
#ifdef HAVE_ATOMIC_DRM
if (_ecore_drm2_use_atomic)
{
if (output->prep.atomic_req)
sym_drmModeAtomicFree(output->prep.atomic_req);
}
#endif
if (_ecore_drm2_use_atomic)
{
@ -1055,11 +1047,9 @@ ecore_drm2_output_edid_get(Ecore_Drm2_Output *output)
EINA_SAFETY_ON_NULL_RETURN_VAL(output, NULL);
#ifdef HAVE_ATOMIC_DRM
if (_ecore_drm2_use_atomic)
blob = output->conn_state->edid.data;
else
#endif
{
EINA_SAFETY_ON_NULL_RETURN_VAL(output->edid.blob, NULL);
blob = output->edid.blob;
@ -1266,7 +1256,6 @@ ecore_drm2_output_mode_info_get(Ecore_Drm2_Output_Mode *mode, int *w, int *h, un
if (flags) *flags = mode->flags;
}
#ifdef HAVE_ATOMIC_DRM
static Eina_Bool
_output_mode_atomic_set(Ecore_Drm2_Output *output, Ecore_Drm2_Output_Mode *mode)
{
@ -1337,7 +1326,6 @@ err:
sym_drmModeAtomicFree(req);
return ret;
}
#endif
EAPI Eina_Bool
ecore_drm2_output_mode_set(Ecore_Drm2_Output *output, Ecore_Drm2_Output_Mode *mode, int x, int y)
@ -1351,11 +1339,9 @@ ecore_drm2_output_mode_set(Ecore_Drm2_Output *output, Ecore_Drm2_Output_Mode *mo
output->y = y;
output->current_mode = mode;
#ifdef HAVE_ATOMIC_DRM
if (_ecore_drm2_use_atomic)
ret = _output_mode_atomic_set(output, mode);
else
#endif
{
if (mode)
{
@ -1553,7 +1539,6 @@ ecore_drm2_output_rotation_set(Ecore_Drm2_Output *output, int rotation)
EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
#ifdef HAVE_ATOMIC_DRM
if (_ecore_drm2_use_atomic)
{
Eina_List *l;
@ -1596,7 +1581,6 @@ ecore_drm2_output_rotation_set(Ecore_Drm2_Output *output, int rotation)
err:
sym_drmModeAtomicFree(req);
}
#endif
return ret;
}

View File

@ -192,9 +192,7 @@ struct _Ecore_Drm2_Output_Mode
typedef struct _Ecore_Drm2_Output_State
{
Ecore_Drm2_Fb *fb;
# ifdef HAVE_ATOMIC_DRM
drmModeAtomicReq *atomic_req;
# endif
} Ecore_Drm2_Output_State;
struct _Ecore_Drm2_Output
@ -314,14 +312,12 @@ extern int (*sym_drmIoctl)(int fd, unsigned long request, void *arg);
extern void *(*sym_drmModeObjectGetProperties)(int fd, uint32_t object_id, uint32_t object_type);
extern void (*sym_drmModeFreeObjectProperties)(drmModeObjectPropertiesPtr ptr);
extern int (*sym_drmModeCreatePropertyBlob)(int fd, const void *data, size_t size, uint32_t *id);
# ifdef HAVE_ATOMIC_DRM
extern void *(*sym_drmModeAtomicAlloc)(void);
extern void (*sym_drmModeAtomicFree)(drmModeAtomicReqPtr req);
extern int (*sym_drmModeAtomicAddProperty)(drmModeAtomicReqPtr req, uint32_t object_id, uint32_t property_id, uint64_t value);
extern int (*sym_drmModeAtomicCommit)(int fd, drmModeAtomicReqPtr req, uint32_t flags, void *user_data);
extern void (*sym_drmModeAtomicSetCursor)(drmModeAtomicReqPtr req, int cursor);
extern int (*sym_drmModeAtomicMerge)(drmModeAtomicReqPtr base, drmModeAtomicReqPtr augment);
# endif
extern void *(*sym_drmModeGetEncoder)(int fd, uint32_t encoder_id);
extern void (*sym_drmModeFreeEncoder)(drmModeEncoderPtr ptr);
extern void *(*sym_drmModeGetCrtc)(int fd, uint32_t crtcId);