This is an automated email from the git hooks/post-receive script.
git pushed a commit to branch devs/devilhorns/apos
in repository efl.
View the commit online.
commit 6050fae6b0079662873bbc824b662ac54af053b1
Author: Christopher Michael <devilho...@comcast.net>
AuthorDate: Wed Mar 8 10:26:01 2023 -0500
ecore_drm2: Add enums for state changes
This patch adds some enums so we can more easily track what has
changed in each objects state. This will allow us to selectively apply
Only what has been changed in each object
---
src/lib/ecore_drm2/ecore_drm2_connectors.c | 5 +++
src/lib/ecore_drm2/ecore_drm2_crtcs.c | 5 +++
src/lib/ecore_drm2/ecore_drm2_displays.c | 13 +++++++
src/lib/ecore_drm2/ecore_drm2_planes.c | 5 +++
src/lib/ecore_drm2/ecore_drm2_private.h | 55 +++++++++++++++++++++++-------
5 files changed, 71 insertions(+), 12 deletions(-)
diff --git a/src/lib/ecore_drm2/ecore_drm2_connectors.c b/src/lib/ecore_drm2/ecore_drm2_connectors.c
index 2f46d37655..88c846e157 100644
--- a/src/lib/ecore_drm2/ecore_drm2_connectors.c
+++ b/src/lib/ecore_drm2/ecore_drm2_connectors.c
@@ -130,6 +130,11 @@ cont:
sym_drmModeFreeObjectProperties(oprops);
+ /* duplicate current state into pending so we can handle changes */
+ conn->state.pending = calloc(1, sizeof(Ecore_Drm2_Connector_State));
+ if (conn->state.pending)
+ memcpy(conn->state.pending, conn->state.current, sizeof(Ecore_Drm2_Connector_State));
+
/* send message to thread for debug printing connector state */
_ecore_drm2_connector_state_thread_send(ECORE_DRM2_THREAD_CODE_DEBUG);
}
diff --git a/src/lib/ecore_drm2/ecore_drm2_crtcs.c b/src/lib/ecore_drm2/ecore_drm2_crtcs.c
index 71285fca3e..ecf0604691 100644
--- a/src/lib/ecore_drm2/ecore_drm2_crtcs.c
+++ b/src/lib/ecore_drm2/ecore_drm2_crtcs.c
@@ -115,6 +115,11 @@ cont:
sym_drmModeFreeObjectProperties(oprops);
+ /* duplicate current state into pending so we can handle changes */
+ crtc->state.pending = calloc(1, sizeof(Ecore_Drm2_Crtc_State));
+ if (crtc->state.pending)
+ memcpy(crtc->state.pending, crtc->state.current, sizeof(Ecore_Drm2_Crtc_State));
+
/* send message to thread for debug printing crtc state */
_ecore_drm2_crtc_state_thread_send(ECORE_DRM2_THREAD_CODE_DEBUG);
}
diff --git a/src/lib/ecore_drm2/ecore_drm2_displays.c b/src/lib/ecore_drm2/ecore_drm2_displays.c
index 0a2cb287aa..0f44feaa14 100644
--- a/src/lib/ecore_drm2/ecore_drm2_displays.c
+++ b/src/lib/ecore_drm2/ecore_drm2_displays.c
@@ -459,6 +459,11 @@ _ecore_drm2_display_state_fill(Ecore_Drm2_Display *disp)
/* get connected state */
disp->connected = (disp->conn->drmConn->connection == DRM_MODE_CONNECTED);
+ /* duplicate current state into pending so we can handle changes */
+ disp->state.pending = calloc(1, sizeof(Ecore_Drm2_Display_State));
+ if (disp->state.pending)
+ memcpy(disp->state.pending, disp->state.current, sizeof(Ecore_Drm2_Display_State));
+
/* send message to thread for debug printing display state */
_ecore_drm2_display_state_thread_send(ECORE_DRM2_THREAD_CODE_DEBUG);
}
@@ -751,7 +756,11 @@ ecore_drm2_display_primary_set(Ecore_Drm2_Display *disp, Eina_Bool primary)
{
EINA_SAFETY_ON_NULL_RETURN(disp);
if (disp->state.current->primary == primary) return;
+
/* TODO, FIXME */
+
+ disp->state.pending->primary = primary;
+ disp->state.pending->changes |= ECORE_DRM2_DISPLAY_STATE_PRIMARY;
}
EAPI const Eina_List *
@@ -809,5 +818,9 @@ ecore_drm2_display_rotation_set(Ecore_Drm2_Display *disp, uint64_t rotation)
if (disp->state.current->rotation == rotation) return EINA_TRUE;
/* TODO, FIXME */
+
+ disp->state.pending->rotation = rotation;
+ disp->state.pending->changes |= ECORE_DRM2_DISPLAY_STATE_ROTATION;
+
return EINA_FALSE;
}
diff --git a/src/lib/ecore_drm2/ecore_drm2_planes.c b/src/lib/ecore_drm2/ecore_drm2_planes.c
index 20989f0414..018cc51863 100644
--- a/src/lib/ecore_drm2/ecore_drm2_planes.c
+++ b/src/lib/ecore_drm2/ecore_drm2_planes.c
@@ -203,6 +203,11 @@ _ecore_drm2_plane_state_fill(Ecore_Drm2_Plane *plane)
sym_drmModeFreeObjectProperties(oprops);
+ /* duplicate current state into pending so we can handle changes */
+ plane->state.pending = calloc(1, sizeof(Ecore_Drm2_Plane_State));
+ if (plane->state.pending)
+ memcpy(plane->state.pending, plane->state.current, sizeof(Ecore_Drm2_Plane_State));
+
/* send message to thread for debug printing plane state */
_ecore_drm2_plane_state_thread_send(ECORE_DRM2_THREAD_CODE_DEBUG);
}
diff --git a/src/lib/ecore_drm2/ecore_drm2_private.h b/src/lib/ecore_drm2/ecore_drm2_private.h
index ea1e5d6d5b..78d645b35a 100644
--- a/src/lib/ecore_drm2/ecore_drm2_private.h
+++ b/src/lib/ecore_drm2/ecore_drm2_private.h
@@ -61,12 +61,7 @@ extern int _ecore_drm2_log_dom;
# endif
# define CRIT(...) EINA_LOG_DOM_CRIT(_ecore_drm2_log_dom, __VA_ARGS__)
-typedef enum _Ecore_Drm2_Thread_Op_Code
-{
- ECORE_DRM2_THREAD_CODE_FILL,
- ECORE_DRM2_THREAD_CODE_DEBUG
-} Ecore_Drm2_Thread_Op_Code;
-
+/* internal structures & enums (not exposed) */
typedef enum _Ecore_Drm2_Backlight_Type
{
ECORE_DRM2_BACKLIGHT_RAW,
@@ -74,7 +69,43 @@ typedef enum _Ecore_Drm2_Backlight_Type
ECORE_DRM2_BACKLIGHT_FIRMWARE
} Ecore_Drm2_Backlight_Type;
-/* internal structures (not exposed) */
+typedef enum _Ecore_Drm2_Thread_Op_Code
+{
+ ECORE_DRM2_THREAD_CODE_FILL,
+ ECORE_DRM2_THREAD_CODE_DEBUG
+} Ecore_Drm2_Thread_Op_Code;
+
+typedef enum _Ecore_Drm2_Connector_State_Changes
+{
+ ECORE_DRM2_CONNECTOR_STATE_CRTC = (1 << 0),
+ ECORE_DRM2_CONNECTOR_STATE_DPMS = (1 << 1),
+ ECORE_DRM2_CONNECTOR_STATE_ASPECT = (1 << 2),
+ ECORE_DRM2_CONNECTOR_STATE_SCALING = (1 << 3),
+} Ecore_Drm2_Connector_State_Changes;
+
+typedef enum _Ecore_Drm2_Crtc_State_Changes
+{
+ ECORE_DRM2_CRTC_STATE_ACTIVE = (1 << 0),
+ ECORE_DRM2_CRTC_STATE_MODE = (1 << 1),
+} Ecore_Drm2_Crtc_State_Changes;
+
+typedef enum _Ecore_Drm2_Plane_State_Changes
+{
+ ECORE_DRM2_PLANE_STATE_CID = (1 << 0),
+ ECORE_DRM2_PLANE_STATE_FID = (1 << 1),
+ ECORE_DRM2_PLANE_STATE_ROTATION = (1 << 2),
+} Ecore_Drm2_Plane_State_Changes;
+
+typedef enum _Ecore_Drm2_Display_State_Changes
+{
+ ECORE_DRM2_DISPLAY_STATE_GAMMA = (1 << 0),
+ ECORE_DRM2_DISPLAY_STATE_ROTATION = (1 << 1),
+ ECORE_DRM2_DISPLAY_STATE_BACKLIGHT = (1 << 2),
+ ECORE_DRM2_DISPLAY_STATE_MODE = (1 << 3),
+ ECORE_DRM2_DISPLAY_STATE_PRIMARY = (1 << 4),
+ ECORE_DRM2_DISPLAY_STATE_ENABLED = (1 << 5),
+} Ecore_Drm2_Display_State_Changes;
+
typedef struct _Ecore_Drm2_Atomic_Blob
{
uint32_t id, value;
@@ -96,7 +127,7 @@ typedef struct _Ecore_Drm2_Atomic_Range
typedef struct _Ecore_Drm2_Connector_State
{
- uint32_t obj_id;
+ uint32_t obj_id, changes;
Ecore_Drm2_Atomic_Property crtc;
Ecore_Drm2_Atomic_Property dpms;
Ecore_Drm2_Atomic_Property aspect;
@@ -121,7 +152,7 @@ typedef struct _Ecore_Drm2_Connector_State
typedef struct _Ecore_Drm2_Crtc_State
{
- uint32_t obj_id;
+ uint32_t obj_id, changes;
/* int index; */
Ecore_Drm2_Atomic_Property active;
Ecore_Drm2_Atomic_Blob mode;
@@ -139,9 +170,8 @@ typedef struct _Ecore_Drm2_Crtc_State
typedef struct _Ecore_Drm2_Plane_State
{
- uint32_t obj_id, mask;
- uint32_t num_formats;
- uint32_t *formats;
+ uint32_t obj_id, mask, changes;
+ uint32_t num_formats, *formats;
Ecore_Drm2_Atomic_Property type;
Ecore_Drm2_Atomic_Property cid, fid;
@@ -167,6 +197,7 @@ typedef struct _Ecore_Drm2_Plane_State
typedef struct _Ecore_Drm2_Display_State
{
+ uint32_t changes;
uint16_t gamma;
uint64_t rotation;
double backlight;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.