ecore_drm2: Add field to store drm property flags

This will allow us to test if a property is immutable so we do not try
to set a property value on something that cannot be changed. For
example, some drivers have an immutable zpos on planes so we cannot
change those.
This commit is contained in:
Christopher Michael 2022-12-03 07:57:57 -05:00
parent 4504e1d5ee
commit 01c6609a82
4 changed files with 19 additions and 1 deletions

View File

@ -74,11 +74,13 @@ _ecore_drm2_connector_state_fill(Ecore_Drm2_Connector *conn)
if (!strcmp(prop->name, "CRTC_ID"))
{
cstate->crtc.id = prop->prop_id;
cstate->crtc.flags = prop->flags;
cstate->crtc.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "DPMS"))
{
cstate->dpms.id = prop->prop_id;
cstate->dpms.flags = prop->flags;
cstate->dpms.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "EDID"))
@ -112,11 +114,13 @@ _ecore_drm2_connector_state_fill(Ecore_Drm2_Connector *conn)
else if (!strcmp(prop->name, "aspect ratio"))
{
cstate->aspect.id = prop->prop_id;
cstate->aspect.flags = prop->flags;
cstate->aspect.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "scaling mode"))
{
cstate->scaling.id = prop->prop_id;
cstate->scaling.flags = prop->flags;
cstate->scaling.value = oprops->prop_values[i];
}

View File

@ -98,12 +98,14 @@ _ecore_drm2_crtc_state_fill(Ecore_Drm2_Crtc *crtc)
else if (!strcmp(prop->name, "ACTIVE"))
{
cstate->active.id = prop->prop_id;
cstate->active.flags = prop->flags;
cstate->active.value = oprops->prop_values[i];
}
/* TODO: We don't actually use this value yet */
/* else if (!strcmp(prop->name, "BACKGROUND_COLOR")) */
/* { */
/* cstate->background.id = prop->prop_id; */
/* cstate->background.flags = prop->flags; */
/* cstate->background.value = oprops->prop_values[i]; */
/* } */

View File

@ -85,56 +85,67 @@ _ecore_drm2_plane_state_fill(Ecore_Drm2_Plane *plane)
if (!strcmp(prop->name, "CRTC_ID"))
{
pstate->cid.id = prop->prop_id;
pstate->cid.flags = prop->flags;
pstate->cid.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "FB_ID"))
{
pstate->fid.id = prop->prop_id;
pstate->fid.flags = prop->flags;
pstate->fid.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "CRTC_X"))
{
pstate->cx.id = prop->prop_id;
pstate->cx.flags = prop->flags;
pstate->cx.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "CRTC_Y"))
{
pstate->cy.id = prop->prop_id;
pstate->cy.flags = prop->flags;
pstate->cy.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "CRTC_W"))
{
pstate->cw.id = prop->prop_id;
pstate->cw.flags = prop->flags;
pstate->cw.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "CRTC_H"))
{
pstate->ch.id = prop->prop_id;
pstate->ch.flags = prop->flags;
pstate->ch.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "SRC_X"))
{
pstate->sx.id = prop->prop_id;
pstate->sx.flags = prop->flags;
pstate->sx.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "SRC_Y"))
{
pstate->sy.id = prop->prop_id;
pstate->sy.flags = prop->flags;
pstate->sy.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "SRC_W"))
{
pstate->sw.id = prop->prop_id;
pstate->sw.flags = prop->flags;
pstate->sw.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "SRC_H"))
{
pstate->sh.id = prop->prop_id;
pstate->sh.flags = prop->flags;
pstate->sh.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "type"))
{
pstate->type.id = prop->prop_id;
pstate->type.flags = prop->flags;
pstate->type.value = oprops->prop_values[i];
}
else if (!strcmp(prop->name, "rotation"))
@ -142,6 +153,7 @@ _ecore_drm2_plane_state_fill(Ecore_Drm2_Plane *plane)
int k = 0;
pstate->rotation.id = prop->prop_id;
pstate->rotation.flags = prop->flags;
pstate->rotation.value = oprops->prop_values[i];
for (k = 0; k < prop->count_enums; k++)

View File

@ -84,7 +84,7 @@ typedef struct _Ecore_Drm2_Atomic_Blob
typedef struct _Ecore_Drm2_Atomic_Property
{
uint32_t id;
uint32_t id, flags;
uint64_t value;
} Ecore_Drm2_Atomic_Property;