ecore-drm2: Add structures for Atomic Modesetting support
This commit is contained in:
parent
275e42275f
commit
e90eab4940
|
@ -31,7 +31,7 @@
|
||||||
/* define necessary vars/macros for ecore_drm2 log domain */
|
/* define necessary vars/macros for ecore_drm2 log domain */
|
||||||
extern int _ecore_drm2_log_dom;
|
extern int _ecore_drm2_log_dom;
|
||||||
|
|
||||||
/* define externval variable for atomic */
|
/* define external variable for atomic usage */
|
||||||
extern Eina_Bool _ecore_drm2_atomic_use;
|
extern Eina_Bool _ecore_drm2_atomic_use;
|
||||||
|
|
||||||
# ifdef ECORE_DRM2_DEFAULT_LOG_COLOR
|
# ifdef ECORE_DRM2_DEFAULT_LOG_COLOR
|
||||||
|
@ -64,12 +64,105 @@ extern Eina_Bool _ecore_drm2_atomic_use;
|
||||||
# endif
|
# endif
|
||||||
# define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_drm2_log_dom, __VA_ARGS__)
|
# define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_drm2_log_dom, __VA_ARGS__)
|
||||||
|
|
||||||
/* internal structures */
|
/* internal structures (not exposed) */
|
||||||
|
typedef struct _Ecore_Drm2_Atomic_Blob
|
||||||
|
{
|
||||||
|
uint32_t id, value;
|
||||||
|
size_t len;
|
||||||
|
void *data;
|
||||||
|
} Ecore_Drm2_Atomic_Blob;
|
||||||
|
|
||||||
|
typedef struct _Ecore_Drm2_Atomic_Property
|
||||||
|
{
|
||||||
|
uint32_t id;
|
||||||
|
uint64_t value;
|
||||||
|
} Ecore_Drm2_Atomic_Property;
|
||||||
|
|
||||||
|
typedef struct _Ecore_Drm2_Connector_State
|
||||||
|
{
|
||||||
|
uint32_t obj_id;
|
||||||
|
Ecore_Drm2_Atomic_Property crtc;
|
||||||
|
Ecore_Drm2_Atomic_Property dpms;
|
||||||
|
Ecore_Drm2_Atomic_Property aspect;
|
||||||
|
Ecore_Drm2_Atomic_Property scaling;
|
||||||
|
Ecore_Drm2_Atomic_Blob edid;
|
||||||
|
|
||||||
|
/* TODO ?? */
|
||||||
|
/* Ecore_Drm2_Atomic_Property link-status; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property non-desktop; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property TILE; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property underscan; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property underscan hborder; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property underscan vborder; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property max bpc; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property HDR_OUTPUT_METADATA; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property vrr_capable; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property Content Protection; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property HDCP Content Type; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property subconnector; */
|
||||||
|
|
||||||
|
} Ecore_Drm2_Connector_State;
|
||||||
|
|
||||||
|
typedef struct _Ecore_Drm2_Crtc_State
|
||||||
|
{
|
||||||
|
uint32_t obj_id;
|
||||||
|
int index;
|
||||||
|
Ecore_Drm2_Atomic_Property active;
|
||||||
|
Ecore_Drm2_Atomic_Blob mode;
|
||||||
|
|
||||||
|
/* TODO ?? */
|
||||||
|
/* Ecore_Drm2_Atomic_Property background; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property OUT_FENCE_PTR; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property VRR_ENABLED; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property DEGAMMA_LUT; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property DEGAMMA_LUT_SIZE; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property CTM; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property GAMMA_LUT; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property GAMMA_LUT_SIZE; */
|
||||||
|
} Ecore_Drm2_Crtc_State;
|
||||||
|
|
||||||
|
typedef struct _Ecore_Drm2_Plane_State
|
||||||
|
{
|
||||||
|
uint32_t obj_id, mask;
|
||||||
|
Ecore_Drm2_Atomic_Property type;
|
||||||
|
Ecore_Drm2_Atomic_Property cid, fid;
|
||||||
|
Ecore_Drm2_Atomic_Property sx, sy, sw, sh;
|
||||||
|
Ecore_Drm2_Atomic_Property cx, cy, cw, ch;
|
||||||
|
Ecore_Drm2_Atomic_Property rotation;
|
||||||
|
|
||||||
|
/* NB: these are not part of an atomic state, but we store these here
|
||||||
|
* so that we do not have to refetch properties when iterating planes */
|
||||||
|
uint32_t rotation_map[6];
|
||||||
|
uint32_t supported_rotations;
|
||||||
|
|
||||||
|
uint32_t num_formats;
|
||||||
|
uint32_t *formats;
|
||||||
|
|
||||||
|
Eina_Bool in_use;
|
||||||
|
|
||||||
|
/* TODO ?? */
|
||||||
|
/* Ecore_Drm2_Atomic_Property IN_FENCE_FD; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property IN_FORMATS; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property COLOR_ENCODING; */
|
||||||
|
/* Ecore_Drm2_Atomic_Property COLOR_RANGE; */
|
||||||
|
} Ecore_Drm2_Plane_State;
|
||||||
|
|
||||||
|
typedef struct _Ecore_Drm2_Atomic_State
|
||||||
|
{
|
||||||
|
int crtcs, conns, planes;
|
||||||
|
Ecore_Drm2_Crtc_State *crtc_states;
|
||||||
|
Ecore_Drm2_Connector_State *conn_states;
|
||||||
|
Ecore_Drm2_Plane_State *plane_states;
|
||||||
|
} Ecore_Drm2_Atomic_State;
|
||||||
|
|
||||||
|
/* opaque API structures */
|
||||||
struct _Ecore_Drm2_Device
|
struct _Ecore_Drm2_Device
|
||||||
{
|
{
|
||||||
Elput_Manager *em;
|
Elput_Manager *em;
|
||||||
|
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
|
Ecore_Drm2_Atomic_State *atomic_state;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Ecore_Drm2_Output
|
struct _Ecore_Drm2_Output
|
||||||
|
@ -77,9 +170,24 @@ struct _Ecore_Drm2_Output
|
||||||
Eina_Stringshare *name, *make, *model, *serial;
|
Eina_Stringshare *name, *make, *model, *serial;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* internal function prototypes */
|
||||||
|
Eina_Bool _ecore_drm2_atomic_state_fill(Ecore_Drm2_Atomic_State *state, int fd);
|
||||||
|
|
||||||
/* external drm function prototypes (for dlopen) */
|
/* external drm function prototypes (for dlopen) */
|
||||||
extern void *(*sym_drmModeGetResources)(int fd);
|
extern void *(*sym_drmModeGetResources)(int fd);
|
||||||
extern void (*sym_drmModeFreeResources)(drmModeResPtr ptr);
|
extern void (*sym_drmModeFreeResources)(drmModeResPtr ptr);
|
||||||
extern int (*sym_drmSetClientCap)(int fd, uint64_t capability, uint64_t value);
|
extern int (*sym_drmSetClientCap)(int fd, uint64_t capability, uint64_t value);
|
||||||
|
extern void *(*sym_drmModeGetProperty)(int fd, uint32_t propertyId);
|
||||||
|
extern void (*sym_drmModeFreeProperty)(drmModePropertyPtr ptr);
|
||||||
|
extern void *(*sym_drmModeGetPropertyBlob)(int fd, uint32_t blob_id);
|
||||||
|
extern void (*sym_drmModeFreePropertyBlob)(drmModePropertyBlobPtr ptr);
|
||||||
|
extern int (*sym_drmModeCreatePropertyBlob)(int fd, const void *data, size_t size, uint32_t *id);
|
||||||
|
extern int (*sym_drmModeDestroyPropertyBlob)(int fd, uint32_t id);
|
||||||
|
extern void *(*sym_drmModeObjectGetProperties)(int fd, uint32_t object_id, uint32_t object_type);
|
||||||
|
extern void (*sym_drmModeFreeObjectProperties)(drmModeObjectPropertiesPtr ptr);
|
||||||
|
extern void *(*sym_drmModeGetPlaneResources)(int fd);
|
||||||
|
extern void (*sym_drmModeFreePlaneResources)(drmModePlaneResPtr ptr);
|
||||||
|
extern void *(*sym_drmModeGetPlane)(int fd, uint32_t plane_id);
|
||||||
|
extern void (*sym_drmModeFreePlane)(drmModePlanePtr ptr);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue