ecore_drm2: Move atomic state into an output state struct
This should make it easier to share code paths between atomic and non atomic operations.
This commit is contained in:
parent
6482367aa2
commit
63dbf061a9
|
@ -321,16 +321,16 @@ _fb_atomic_flip_test(Ecore_Drm2_Output *output)
|
||||||
|
|
||||||
if (res)
|
if (res)
|
||||||
{
|
{
|
||||||
if (output->atomic_req)
|
if (output->prep.atomic_req)
|
||||||
{
|
{
|
||||||
/* clear any previous request */
|
/* clear any previous request */
|
||||||
sym_drmModeAtomicFree(output->atomic_req);
|
sym_drmModeAtomicFree(output->prep.atomic_req);
|
||||||
|
|
||||||
/* just use the new request */
|
/* just use the new request */
|
||||||
output->atomic_req = req;
|
output->prep.atomic_req = req;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
output->atomic_req = req;
|
output->prep.atomic_req = req;
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
|
@ -351,10 +351,11 @@ _fb_atomic_flip(Ecore_Drm2_Output *output)
|
||||||
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 (!output->atomic_req) return -1;
|
if (!output->prep.atomic_req) return -1;
|
||||||
|
|
||||||
res =
|
res =
|
||||||
sym_drmModeAtomicCommit(output->fd, output->atomic_req, flags, NULL);
|
sym_drmModeAtomicCommit(output->fd,
|
||||||
|
output->prep.atomic_req, flags, NULL);
|
||||||
if (res < 0)
|
if (res < 0)
|
||||||
{
|
{
|
||||||
ERR("Failed Atomic Commit: %m");
|
ERR("Failed Atomic Commit: %m");
|
||||||
|
|
|
@ -898,8 +898,8 @@ _output_destroy(Ecore_Drm2_Device *dev, Ecore_Drm2_Output *output)
|
||||||
#ifdef HAVE_ATOMIC_DRM
|
#ifdef HAVE_ATOMIC_DRM
|
||||||
if (_ecore_drm2_use_atomic)
|
if (_ecore_drm2_use_atomic)
|
||||||
{
|
{
|
||||||
if (output->atomic_req)
|
if (output->prep.atomic_req)
|
||||||
sym_drmModeAtomicFree(output->atomic_req);
|
sym_drmModeAtomicFree(output->prep.atomic_req);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -723,6 +723,19 @@ struct _Ecore_Drm2_Output_Mode
|
||||||
drmModeModeInfo info;
|
drmModeModeInfo info;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* A half step - we still keep an fb for the canvas
|
||||||
|
* and an atomic_req for all atomic state (including
|
||||||
|
* the canvas fb).
|
||||||
|
* The non atomic code only uses the canvas fb.
|
||||||
|
*/
|
||||||
|
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
|
struct _Ecore_Drm2_Output
|
||||||
{
|
{
|
||||||
Eina_Stringshare *name;
|
Eina_Stringshare *name;
|
||||||
|
@ -755,6 +768,10 @@ struct _Ecore_Drm2_Output
|
||||||
|
|
||||||
drmModeCrtcPtr ocrtc;
|
drmModeCrtcPtr ocrtc;
|
||||||
|
|
||||||
|
/* prep is for state we're preparing and have never
|
||||||
|
* attempted to commit */
|
||||||
|
Ecore_Drm2_Output_State prep;
|
||||||
|
|
||||||
Ecore_Drm2_Fb *current, *next, *pending;
|
Ecore_Drm2_Fb *current, *next, *pending;
|
||||||
|
|
||||||
Eina_Matrix4 matrix, inverse;
|
Eina_Matrix4 matrix, inverse;
|
||||||
|
@ -776,9 +793,6 @@ struct _Ecore_Drm2_Output
|
||||||
Eina_List *plane_states;
|
Eina_List *plane_states;
|
||||||
Eina_List *planes;
|
Eina_List *planes;
|
||||||
|
|
||||||
# ifdef HAVE_ATOMIC_DRM
|
|
||||||
drmModeAtomicReq *atomic_req;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
Eina_Bool connected : 1;
|
Eina_Bool connected : 1;
|
||||||
Eina_Bool primary : 1;
|
Eina_Bool primary : 1;
|
||||||
|
|
Loading…
Reference in New Issue