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_drmModeObjectGetProperties)(int fd, uint32_t object_id, uint32_t object_type) = NULL;
void (*sym_drmModeFreeObjectProperties)(drmModeObjectPropertiesPtr ptr) = NULL; void (*sym_drmModeFreeObjectProperties)(drmModeObjectPropertiesPtr ptr) = NULL;
int (*sym_drmModeCreatePropertyBlob)(int fd, const void *data, size_t size, uint32_t *id) = 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_drmModeAtomicAlloc)(void) = NULL;
void (*sym_drmModeAtomicFree)(drmModeAtomicReqPtr req) = 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_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; int (*sym_drmModeAtomicCommit)(int fd, drmModeAtomicReqPtr req, uint32_t flags, void *user_data) = NULL;
void (*sym_drmModeAtomicSetCursor)(drmModeAtomicReqPtr req, int cursor) = NULL; void (*sym_drmModeAtomicSetCursor)(drmModeAtomicReqPtr req, int cursor) = NULL;
int (*sym_drmModeAtomicMerge)(drmModeAtomicReqPtr base, drmModeAtomicReqPtr augment); int (*sym_drmModeAtomicMerge)(drmModeAtomicReqPtr base, drmModeAtomicReqPtr augment);
# endif
void *(*sym_drmModeGetEncoder)(int fd, uint32_t encoder_id) = NULL; void *(*sym_drmModeGetEncoder)(int fd, uint32_t encoder_id) = NULL;
void (*sym_drmModeFreeEncoder)(drmModeEncoderPtr ptr) = NULL; void (*sym_drmModeFreeEncoder)(drmModeEncoderPtr ptr) = NULL;
void *(*sym_drmModeGetCrtc)(int fd, uint32_t crtcId) = 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, drmModeObjectGetProperties);
SYM(drm_lib, drmModeFreeObjectProperties); SYM(drm_lib, drmModeFreeObjectProperties);
SYM(drm_lib, drmModeCreatePropertyBlob); SYM(drm_lib, drmModeCreatePropertyBlob);
#ifdef HAVE_ATOMIC_DRM
SYM(drm_lib, drmModeAtomicAlloc); SYM(drm_lib, drmModeAtomicAlloc);
SYM(drm_lib, drmModeAtomicFree); SYM(drm_lib, drmModeAtomicFree);
SYM(drm_lib, drmModeAtomicAddProperty); SYM(drm_lib, drmModeAtomicAddProperty);
SYM(drm_lib, drmModeAtomicCommit); SYM(drm_lib, drmModeAtomicCommit);
SYM(drm_lib, drmModeAtomicSetCursor); SYM(drm_lib, drmModeAtomicSetCursor);
SYM(drm_lib, drmModeAtomicMerge); SYM(drm_lib, drmModeAtomicMerge);
#endif
SYM(drm_lib, drmModeGetEncoder); SYM(drm_lib, drmModeGetEncoder);
SYM(drm_lib, drmModeFreeEncoder); SYM(drm_lib, drmModeFreeEncoder);
SYM(drm_lib, drmModeGetCrtc); SYM(drm_lib, drmModeGetCrtc);

View File

@ -4,9 +4,7 @@
# define DRM_CAP_DUMB_PREFER_SHADOW 0x4 # define DRM_CAP_DUMB_PREFER_SHADOW 0x4
#endif #endif
#ifdef HAVE_ATOMIC_DRM #include <sys/utsname.h>
# include <sys/utsname.h>
#endif
Eina_Bool _ecore_drm2_use_atomic = EINA_TRUE; Eina_Bool _ecore_drm2_use_atomic = EINA_TRUE;
@ -143,7 +141,6 @@ out:
return ret; return ret;
} }
#ifdef HAVE_ATOMIC_DRM
# if 0 # if 0
static Eina_Bool static Eina_Bool
_drm2_atomic_usable(int fd) _drm2_atomic_usable(int fd)
@ -187,7 +184,6 @@ _drm2_atomic_usable(int fd)
return ret; return ret;
} }
# endif # endif
#endif
static void static void
_drm2_atomic_state_crtc_fill(Ecore_Drm2_Crtc_State *cstate, int fd) _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 Path: %s", device->path);
DBG("Device Fd: %d", device->fd); DBG("Device Fd: %d", device->fd);
#ifdef HAVE_ATOMIC_DRM
# if 0 # if 0
/* check that this system can do atomic */ /* check that this system can do atomic */
_ecore_drm2_use_atomic = _drm2_atomic_usable(device->fd); _ecore_drm2_use_atomic = _drm2_atomic_usable(device->fd);
# endif # endif
if (getenv("ECORE_DRM2_ATOMIC_DISABLE")) if (getenv("ECORE_DRM2_ATOMIC_DISABLE"))
_ecore_drm2_use_atomic = EINA_FALSE; _ecore_drm2_use_atomic = EINA_FALSE;
if (_ecore_drm2_use_atomic) if (_ecore_drm2_use_atomic)
#endif
{ {
if (sym_drmSetClientCap(device->fd, if (sym_drmSetClientCap(device->fd,
DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1) < 0) 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); if (output->release_cb) output->release_cb(output->release_data, s->fb);
_ecore_drm2_fb_deref(s->fb); _ecore_drm2_fb_deref(s->fb);
s->fb = NULL; s->fb = NULL;
#ifdef HAVE_ATOMIC_DRM if (_ecore_drm2_use_atomic)
if (s->atomic_req) {
sym_drmModeAtomicFree(s->atomic_req); if (s->atomic_req)
s->atomic_req = NULL; sym_drmModeAtomicFree(s->atomic_req);
#endif s->atomic_req = NULL;
}
} }
EAPI Eina_Bool EAPI Eina_Bool
@ -268,21 +269,22 @@ ecore_drm2_fb_flip_complete(Ecore_Drm2_Output *output)
output->current.fb = output->pending.fb; output->current.fb = output->pending.fb;
output->pending.fb = NULL; output->pending.fb = NULL;
#ifdef HAVE_ATOMIC_DRM if (_ecore_drm2_use_atomic)
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; Eina_List *l, *ll;
output->planes = eina_list_remove_list(output->planes, l); Ecore_Drm2_Plane *plane;
free(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) EINA_LIST_FREE(output->fbs, fb)
_ecore_drm2_fb_deref(fb); _ecore_drm2_fb_deref(fb);
output->fbs = NULL; output->fbs = NULL;
@ -293,7 +295,6 @@ ecore_drm2_fb_flip_complete(Ecore_Drm2_Output *output)
Eina_Bool Eina_Bool
_fb_atomic_flip_test(Ecore_Drm2_Output *output) _fb_atomic_flip_test(Ecore_Drm2_Output *output)
{ {
#ifdef HAVE_ATOMIC_DRM
int ret = 0; int ret = 0;
Eina_List *l; Eina_List *l;
Ecore_Drm2_Crtc_State *cstate; 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 | uint32_t flags = DRM_MODE_ATOMIC_NONBLOCK | DRM_MODE_ATOMIC_ALLOW_MODESET |
DRM_MODE_ATOMIC_TEST_ONLY; DRM_MODE_ATOMIC_TEST_ONLY;
if (!_ecore_drm2_use_atomic) return EINA_FALSE;
req = sym_drmModeAtomicAlloc(); req = sym_drmModeAtomicAlloc();
if (!req) return EINA_FALSE; if (!req) return EINA_FALSE;
@ -401,7 +404,6 @@ _fb_atomic_flip_test(Ecore_Drm2_Output *output)
err: err:
DBG("Failed Atomic Test: %m"); DBG("Failed Atomic Test: %m");
sym_drmModeAtomicFree(req); sym_drmModeAtomicFree(req);
#endif
return EINA_FALSE; return EINA_FALSE;
} }
@ -409,12 +411,13 @@ err:
static int static int
_fb_atomic_flip(Ecore_Drm2_Output *output) _fb_atomic_flip(Ecore_Drm2_Output *output)
{ {
#ifdef HAVE_ATOMIC_DRM
int res = 0; int res = 0;
uint32_t flags = uint32_t flags =
DRM_MODE_ATOMIC_NONBLOCK | DRM_MODE_PAGE_FLIP_EVENT | DRM_MODE_ATOMIC_NONBLOCK | DRM_MODE_PAGE_FLIP_EVENT |
DRM_MODE_ATOMIC_ALLOW_MODESET; DRM_MODE_ATOMIC_ALLOW_MODESET;
if (!_ecore_drm2_use_atomic) return -1;
/* If we have no req yet, we're flipping to current state. /* If we have no req yet, we're flipping to current state.
* rebuild the current state in the prep state */ * rebuild the current state in the prep state */
if (!output->prep.atomic_req) _fb_atomic_flip_test(output); if (!output->prep.atomic_req) _fb_atomic_flip_test(output);
@ -433,9 +436,6 @@ _fb_atomic_flip(Ecore_Drm2_Output *output)
} }
return 0; return 0;
#endif
return -1;
} }
static int 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->pending.fb = output->prep.fb;
output->prep.fb = NULL; output->prep.fb = NULL;
#ifdef HAVE_ATOMIC_DRM
output->pending.atomic_req = output->prep.atomic_req; if (_ecore_drm2_use_atomic)
output->prep.atomic_req = NULL; {
#endif output->pending.atomic_req = output->prep.atomic_req;
output->prep.atomic_req = NULL;
}
return 0; return 0;
} }

View File

@ -193,7 +193,6 @@ _output_edid_parse(Ecore_Drm2_Output *output, const uint8_t *data, size_t len)
return 0; return 0;
} }
//#ifdef HAVE_ATOMIC_DRM
static void static void
_output_edid_atomic_find(Ecore_Drm2_Output *output) _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); eina_stringshare_replace(&output->serial, output->edid.serial);
} }
} }
//#endif
static void static void
_output_edid_find(Ecore_Drm2_Output *output, const drmModeConnector *conn) _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); eina_matrix4_inverse(&output->inverse, &output->matrix);
} }
//#ifdef HAVE_ATOMIC_DRM
static Ecore_Drm2_Crtc_State * static Ecore_Drm2_Crtc_State *
_atomic_state_crtc_duplicate(Ecore_Drm2_Crtc_State *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; return states;
} }
//#endif
static Eina_Bool static Eina_Bool
_output_create(Ecore_Drm2_Device *dev, const drmModeRes *res, const drmModeConnector *conn, int x, int y, int *w, Eina_Bool cloned) _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); _output_modes_create(dev, output, conn);
#ifdef HAVE_ATOMIC_DRM
if (_ecore_drm2_use_atomic) if (_ecore_drm2_use_atomic)
_output_edid_atomic_find(output); _output_edid_atomic_find(output);
else else
#endif
_output_edid_find(output, conn); _output_edid_find(output, conn);
if (output->connected) output->enabled = EINA_TRUE; 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 *plane;
Ecore_Drm2_Plane_State *pstate; Ecore_Drm2_Plane_State *pstate;
#ifdef HAVE_ATOMIC_DRM
if (_ecore_drm2_use_atomic) if (_ecore_drm2_use_atomic)
{ {
if (output->prep.atomic_req) if (output->prep.atomic_req)
sym_drmModeAtomicFree(output->prep.atomic_req); sym_drmModeAtomicFree(output->prep.atomic_req);
} }
#endif
if (_ecore_drm2_use_atomic) 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); EINA_SAFETY_ON_NULL_RETURN_VAL(output, NULL);
#ifdef HAVE_ATOMIC_DRM
if (_ecore_drm2_use_atomic) if (_ecore_drm2_use_atomic)
blob = output->conn_state->edid.data; blob = output->conn_state->edid.data;
else else
#endif
{ {
EINA_SAFETY_ON_NULL_RETURN_VAL(output->edid.blob, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(output->edid.blob, NULL);
blob = output->edid.blob; 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; if (flags) *flags = mode->flags;
} }
#ifdef HAVE_ATOMIC_DRM
static Eina_Bool static Eina_Bool
_output_mode_atomic_set(Ecore_Drm2_Output *output, Ecore_Drm2_Output_Mode *mode) _output_mode_atomic_set(Ecore_Drm2_Output *output, Ecore_Drm2_Output_Mode *mode)
{ {
@ -1337,7 +1326,6 @@ err:
sym_drmModeAtomicFree(req); sym_drmModeAtomicFree(req);
return ret; return ret;
} }
#endif
EAPI Eina_Bool EAPI Eina_Bool
ecore_drm2_output_mode_set(Ecore_Drm2_Output *output, Ecore_Drm2_Output_Mode *mode, int x, int y) 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->y = y;
output->current_mode = mode; output->current_mode = mode;
#ifdef HAVE_ATOMIC_DRM
if (_ecore_drm2_use_atomic) if (_ecore_drm2_use_atomic)
ret = _output_mode_atomic_set(output, mode); ret = _output_mode_atomic_set(output, mode);
else else
#endif
{ {
if (mode) 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); EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE);
#ifdef HAVE_ATOMIC_DRM
if (_ecore_drm2_use_atomic) if (_ecore_drm2_use_atomic)
{ {
Eina_List *l; Eina_List *l;
@ -1596,7 +1581,6 @@ ecore_drm2_output_rotation_set(Ecore_Drm2_Output *output, int rotation)
err: err:
sym_drmModeAtomicFree(req); sym_drmModeAtomicFree(req);
} }
#endif
return ret; return ret;
} }

View File

@ -192,9 +192,7 @@ struct _Ecore_Drm2_Output_Mode
typedef struct _Ecore_Drm2_Output_State typedef struct _Ecore_Drm2_Output_State
{ {
Ecore_Drm2_Fb *fb; Ecore_Drm2_Fb *fb;
# ifdef HAVE_ATOMIC_DRM
drmModeAtomicReq *atomic_req; drmModeAtomicReq *atomic_req;
# endif
} Ecore_Drm2_Output_State; } Ecore_Drm2_Output_State;
struct _Ecore_Drm2_Output 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_drmModeObjectGetProperties)(int fd, uint32_t object_id, uint32_t object_type);
extern void (*sym_drmModeFreeObjectProperties)(drmModeObjectPropertiesPtr ptr); extern void (*sym_drmModeFreeObjectProperties)(drmModeObjectPropertiesPtr ptr);
extern int (*sym_drmModeCreatePropertyBlob)(int fd, const void *data, size_t size, uint32_t *id); 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_drmModeAtomicAlloc)(void);
extern void (*sym_drmModeAtomicFree)(drmModeAtomicReqPtr req); 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_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 int (*sym_drmModeAtomicCommit)(int fd, drmModeAtomicReqPtr req, uint32_t flags, void *user_data);
extern void (*sym_drmModeAtomicSetCursor)(drmModeAtomicReqPtr req, int cursor); extern void (*sym_drmModeAtomicSetCursor)(drmModeAtomicReqPtr req, int cursor);
extern int (*sym_drmModeAtomicMerge)(drmModeAtomicReqPtr base, drmModeAtomicReqPtr augment); extern int (*sym_drmModeAtomicMerge)(drmModeAtomicReqPtr base, drmModeAtomicReqPtr augment);
# endif
extern void *(*sym_drmModeGetEncoder)(int fd, uint32_t encoder_id); extern void *(*sym_drmModeGetEncoder)(int fd, uint32_t encoder_id);
extern void (*sym_drmModeFreeEncoder)(drmModeEncoderPtr ptr); extern void (*sym_drmModeFreeEncoder)(drmModeEncoderPtr ptr);
extern void *(*sym_drmModeGetCrtc)(int fd, uint32_t crtcId); extern void *(*sym_drmModeGetCrtc)(int fd, uint32_t crtcId);