backends/native: Define all KMS properties in PropTable we actually use

Currently those properties are looked up manually or fixed values are
used when they should be looked up. The following commits will actually
make use of this.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2379>
This commit is contained in:
Sebastian Wick 2022-04-20 21:43:28 +02:00 committed by Marge Bot
parent 3b062842ed
commit 9519a84967
5 changed files with 287 additions and 3 deletions

View File

@ -31,9 +31,61 @@ typedef enum _MetaKmsConnectorProp
META_KMS_CONNECTOR_PROP_UNDERSCAN_VBORDER, META_KMS_CONNECTOR_PROP_UNDERSCAN_VBORDER,
META_KMS_CONNECTOR_PROP_PRIVACY_SCREEN_SW_STATE, META_KMS_CONNECTOR_PROP_PRIVACY_SCREEN_SW_STATE,
META_KMS_CONNECTOR_PROP_PRIVACY_SCREEN_HW_STATE, META_KMS_CONNECTOR_PROP_PRIVACY_SCREEN_HW_STATE,
META_KMS_CONNECTOR_PROP_EDID,
META_KMS_CONNECTOR_PROP_TILE,
META_KMS_CONNECTOR_PROP_SUGGESTED_X,
META_KMS_CONNECTOR_PROP_SUGGESTED_Y,
META_KMS_CONNECTOR_PROP_HOTPLUG_MODE_UPDATE,
META_KMS_CONNECTOR_PROP_SCALING_MODE,
META_KMS_CONNECTOR_PROP_PANEL_ORIENTATION,
META_KMS_CONNECTOR_PROP_NON_DESKTOP,
META_KMS_CONNECTOR_N_PROPS META_KMS_CONNECTOR_N_PROPS
} MetaKmsConnectorProp; } MetaKmsConnectorProp;
typedef enum _MetaKmsConnectorDpms
{
META_KMS_CONNECTOR_DPMS_ON = 0,
META_KMS_CONNECTOR_DPMS_STANDBY,
META_KMS_CONNECTOR_DPMS_SUSPEND,
META_KMS_CONNECTOR_DPMS_OFF,
META_KMS_CONNECTOR_DPMS_N_PROPS
} MetaKmsConnectorDpms;
typedef enum _MetaKmsConnectorUnderscan
{
META_KMS_CONNECTOR_UNDERSCAN_OFF = 0,
META_KMS_CONNECTOR_UNDERSCAN_ON,
META_KMS_CONNECTOR_UNDERSCAN_AUTO,
META_KMS_CONNECTOR_UNDERSCAN_N_PROPS
} MetaKmsConnectorUnderscan;
typedef enum _MetaKmsConnectorPrivacyScreen
{
META_KMS_CONNECTOR_PRIVACY_SCREEN_ENABLED = 0,
META_KMS_CONNECTOR_PRIVACY_SCREEN_DISABLED,
META_KMS_CONNECTOR_PRIVACY_SCREEN_ENABLED_LOCKED,
META_KMS_CONNECTOR_PRIVACY_SCREEN_DISABLED_LOCKED,
META_KMS_CONNECTOR_PRIVACY_SCREEN_N_PROPS,
} MetaKmsConnectorPrivacyScreen;
typedef enum _MetaKmsConnectorScalingMode
{
META_KMS_CONNECTOR_SCALING_MODE_NONE = 0,
META_KMS_CONNECTOR_SCALING_MODE_FULL,
META_KMS_CONNECTOR_SCALING_MODE_CENTER,
META_KMS_CONNECTOR_SCALING_MODE_FULL_ASPECT,
META_KMS_CONNECTOR_SCALING_MODE_N_PROPS,
} MetaKmsConnectorScalingMode;
typedef enum _MetaKmsConnectorPanelOrientation
{
META_KMS_CONNECTOR_PANEL_ORIENTATION_NORMAL = 0,
META_KMS_CONNECTOR_PANEL_ORIENTATION_UPSIDE_DOWN,
META_KMS_CONNECTOR_PANEL_ORIENTATION_LEFT_SIDE_UP,
META_KMS_CONNECTOR_PANEL_ORIENTATION_RIGHT_SIDE_UP,
META_KMS_CONNECTOR_PANEL_ORIENTATION_N_PROPS,
} MetaKmsConnectorPanelOrientation;
uint32_t meta_kms_connector_get_prop_id (MetaKmsConnector *connector, uint32_t meta_kms_connector_get_prop_id (MetaKmsConnector *connector,
MetaKmsConnectorProp prop); MetaKmsConnectorProp prop);

View File

@ -34,6 +34,12 @@
typedef struct _MetaKmsConnectorPropTable typedef struct _MetaKmsConnectorPropTable
{ {
MetaKmsProp props[META_KMS_CONNECTOR_N_PROPS]; MetaKmsProp props[META_KMS_CONNECTOR_N_PROPS];
MetaKmsEnum dpms_enum[META_KMS_CONNECTOR_DPMS_N_PROPS];
MetaKmsEnum underscan_enum[META_KMS_CONNECTOR_UNDERSCAN_N_PROPS];
MetaKmsEnum privacy_screen_sw_enum[META_KMS_CONNECTOR_PRIVACY_SCREEN_N_PROPS];
MetaKmsEnum privacy_screen_hw_enum[META_KMS_CONNECTOR_PRIVACY_SCREEN_N_PROPS];
MetaKmsEnum scaling_mode_enum[META_KMS_CONNECTOR_SCALING_MODE_N_PROPS];
MetaKmsEnum panel_orientation_enum[META_KMS_CONNECTOR_PANEL_ORIENTATION_N_PROPS];
} MetaKmsConnectorPropTable; } MetaKmsConnectorPropTable;
struct _MetaKmsConnector struct _MetaKmsConnector
@ -853,11 +859,15 @@ init_properties (MetaKmsConnector *connector,
{ {
.name = "DPMS", .name = "DPMS",
.type = DRM_MODE_PROP_ENUM, .type = DRM_MODE_PROP_ENUM,
.enum_values = prop_table->dpms_enum,
.num_enum_values = META_KMS_CONNECTOR_DPMS_N_PROPS,
}, },
[META_KMS_CONNECTOR_PROP_UNDERSCAN] = [META_KMS_CONNECTOR_PROP_UNDERSCAN] =
{ {
.name = "underscan", .name = "underscan",
.type = DRM_MODE_PROP_ENUM, .type = DRM_MODE_PROP_ENUM,
.enum_values = prop_table->underscan_enum,
.num_enum_values = META_KMS_CONNECTOR_UNDERSCAN_N_PROPS,
}, },
[META_KMS_CONNECTOR_PROP_UNDERSCAN_HBORDER] = [META_KMS_CONNECTOR_PROP_UNDERSCAN_HBORDER] =
{ {
@ -873,11 +883,163 @@ init_properties (MetaKmsConnector *connector,
{ {
.name = "privacy-screen sw-state", .name = "privacy-screen sw-state",
.type = DRM_MODE_PROP_ENUM, .type = DRM_MODE_PROP_ENUM,
.enum_values = prop_table->privacy_screen_sw_enum,
.num_enum_values = META_KMS_CONNECTOR_PRIVACY_SCREEN_N_PROPS,
}, },
[META_KMS_CONNECTOR_PROP_PRIVACY_SCREEN_HW_STATE] = [META_KMS_CONNECTOR_PROP_PRIVACY_SCREEN_HW_STATE] =
{ {
.name = "privacy-screen hw-state", .name = "privacy-screen hw-state",
.type = DRM_MODE_PROP_ENUM, .type = DRM_MODE_PROP_ENUM,
.enum_values = prop_table->privacy_screen_hw_enum,
.num_enum_values = META_KMS_CONNECTOR_PRIVACY_SCREEN_N_PROPS,
},
[META_KMS_CONNECTOR_PROP_EDID] =
{
.name = "EDID",
.type = DRM_MODE_PROP_BLOB,
},
[META_KMS_CONNECTOR_PROP_TILE] =
{
.name = "TILE",
.type = DRM_MODE_PROP_BLOB,
},
[META_KMS_CONNECTOR_PROP_SUGGESTED_X] =
{
.name = "suggested X",
.type = DRM_MODE_PROP_RANGE,
},
[META_KMS_CONNECTOR_PROP_SUGGESTED_Y] =
{
.name = "suggested Y",
.type = DRM_MODE_PROP_RANGE,
},
[META_KMS_CONNECTOR_PROP_HOTPLUG_MODE_UPDATE] =
{
.name = "hotplug_mode_update",
.type = DRM_MODE_PROP_RANGE,
},
[META_KMS_CONNECTOR_PROP_SCALING_MODE] =
{
.name = "scaling mode",
.type = DRM_MODE_PROP_ENUM,
.enum_values = prop_table->scaling_mode_enum,
.num_enum_values = META_KMS_CONNECTOR_SCALING_MODE_N_PROPS,
},
[META_KMS_CONNECTOR_PROP_PANEL_ORIENTATION] =
{
.name = "panel orientation",
.type = DRM_MODE_PROP_ENUM,
.enum_values = prop_table->panel_orientation_enum,
.num_enum_values = META_KMS_CONNECTOR_PANEL_ORIENTATION_N_PROPS,
},
[META_KMS_CONNECTOR_PROP_NON_DESKTOP] =
{
.name = "non-desktop",
.type = DRM_MODE_PROP_RANGE,
},
},
.dpms_enum = {
[META_KMS_CONNECTOR_DPMS_ON] =
{
.name = "On",
},
[META_KMS_CONNECTOR_DPMS_STANDBY] =
{
.name = "Standby",
},
[META_KMS_CONNECTOR_DPMS_SUSPEND] =
{
.name = "Suspend",
},
[META_KMS_CONNECTOR_DPMS_OFF] =
{
.name = "Off",
},
},
.underscan_enum = {
[META_KMS_CONNECTOR_UNDERSCAN_OFF] =
{
.name = "off",
},
[META_KMS_CONNECTOR_UNDERSCAN_ON] =
{
.name = "on",
},
[META_KMS_CONNECTOR_UNDERSCAN_AUTO] =
{
.name = "auto",
},
},
.privacy_screen_sw_enum = {
[META_KMS_CONNECTOR_PRIVACY_SCREEN_ENABLED] =
{
.name = "Enabled",
},
[META_KMS_CONNECTOR_PRIVACY_SCREEN_DISABLED] =
{
.name = "Disabled",
},
[META_KMS_CONNECTOR_PRIVACY_SCREEN_ENABLED_LOCKED] =
{
.name = "Enabled-locked",
},
[META_KMS_CONNECTOR_PRIVACY_SCREEN_DISABLED_LOCKED] =
{
.name = "Disabled-locked",
},
},
.privacy_screen_hw_enum = {
[META_KMS_CONNECTOR_PRIVACY_SCREEN_ENABLED] =
{
.name = "Enabled",
},
[META_KMS_CONNECTOR_PRIVACY_SCREEN_DISABLED] =
{
.name = "Disabled",
},
[META_KMS_CONNECTOR_PRIVACY_SCREEN_ENABLED_LOCKED] =
{
.name = "Enabled-locked",
},
[META_KMS_CONNECTOR_PRIVACY_SCREEN_DISABLED_LOCKED] =
{
.name = "Disabled-locked",
},
},
.scaling_mode_enum = {
[META_KMS_CONNECTOR_SCALING_MODE_NONE] =
{
.name = "None",
},
[META_KMS_CONNECTOR_SCALING_MODE_FULL] =
{
.name = "Full",
},
[META_KMS_CONNECTOR_SCALING_MODE_CENTER] =
{
.name = "Center",
},
[META_KMS_CONNECTOR_SCALING_MODE_FULL_ASPECT] =
{
.name = "Full aspect",
},
},
.panel_orientation_enum = {
[META_KMS_CONNECTOR_PANEL_ORIENTATION_NORMAL] =
{
.name = "Normal",
},
[META_KMS_CONNECTOR_PANEL_ORIENTATION_UPSIDE_DOWN] =
{
.name = "Upside Down",
},
[META_KMS_CONNECTOR_PANEL_ORIENTATION_LEFT_SIDE_UP] =
{
.name = "Left Side Up",
},
[META_KMS_CONNECTOR_PANEL_ORIENTATION_RIGHT_SIDE_UP] =
{
.name = "Right Side Up",
}, },
} }
}; };

View File

@ -43,6 +43,15 @@ typedef struct _MetaKmsDeviceCaps
gboolean addfb2_modifiers; gboolean addfb2_modifiers;
} MetaKmsDeviceCaps; } MetaKmsDeviceCaps;
typedef struct _MetaKmsEnum
{
const char *name;
gboolean valid;
uint64_t value;
uint64_t bitmask;
} MetaKmsEnum;
typedef struct _MetaKmsProp MetaKmsProp; typedef struct _MetaKmsProp MetaKmsProp;
struct _MetaKmsProp struct _MetaKmsProp
@ -50,13 +59,18 @@ struct _MetaKmsProp
const char *name; const char *name;
uint32_t type; uint32_t type;
MetaKmsPropType internal_type; MetaKmsPropType internal_type;
unsigned int num_enum_values;
MetaKmsEnum *enum_values;
uint32_t prop_id;
uint64_t value;
void (* parse) (MetaKmsImplDevice *impl_device, void (* parse) (MetaKmsImplDevice *impl_device,
MetaKmsProp *prop, MetaKmsProp *prop,
drmModePropertyPtr drm_prop, drmModePropertyPtr drm_prop,
uint64_t value, uint64_t value,
gpointer user_data); gpointer user_data);
uint32_t prop_id;
}; };
#define META_TYPE_KMS_IMPL_DEVICE (meta_kms_impl_device_get_type ()) #define META_TYPE_KMS_IMPL_DEVICE (meta_kms_impl_device_get_type ())

View File

@ -45,6 +45,27 @@ typedef enum _MetaKmsPlaneProp
META_KMS_PLANE_N_PROPS META_KMS_PLANE_N_PROPS
} MetaKmsPlaneProp; } MetaKmsPlaneProp;
typedef enum _MetaKmsPlaneRotationBit
{
META_KMS_PLANE_ROTATION_BIT_ROTATE_0 = 0,
META_KMS_PLANE_ROTATION_BIT_ROTATE_90,
META_KMS_PLANE_ROTATION_BIT_ROTATE_180,
META_KMS_PLANE_ROTATION_BIT_ROTATE_270,
META_KMS_PLANE_ROTATION_BIT_REFLECT_X,
META_KMS_PLANE_ROTATION_BIT_REFLECT_Y,
META_KMS_PLANE_ROTATION_BIT_N_PROPS,
} MetaKmsPlaneRotationBit;
typedef enum _MetaKmsPlaneRotation
{
META_KMS_PLANE_ROTATION_ROTATE_0 = (1 << 0),
META_KMS_PLANE_ROTATION_ROTATE_90 = (1 << 1),
META_KMS_PLANE_ROTATION_ROTATE_180 = (1 << 2),
META_KMS_PLANE_ROTATION_ROTATE_270 = (1 << 3),
META_KMS_PLANE_ROTATION_REFLECT_X = (1 << 4),
META_KMS_PLANE_ROTATION_REFLECT_Y = (1 << 5),
} MetaKmsPlaneRotation;
MetaKmsPlane * meta_kms_plane_new (MetaKmsPlaneType type, MetaKmsPlane * meta_kms_plane_new (MetaKmsPlaneType type,
MetaKmsImplDevice *impl_device, MetaKmsImplDevice *impl_device,
drmModePlane *drm_plane, drmModePlane *drm_plane,

View File

@ -33,6 +33,7 @@
typedef struct _MetaKmsPlanePropTable typedef struct _MetaKmsPlanePropTable
{ {
MetaKmsProp props[META_KMS_PLANE_N_PROPS]; MetaKmsProp props[META_KMS_PLANE_N_PROPS];
MetaKmsEnum rotation_bitmask[META_KMS_PLANE_ROTATION_BIT_N_PROPS];
} MetaKmsPlanePropTable; } MetaKmsPlanePropTable;
struct _MetaKmsPlane struct _MetaKmsPlane
@ -384,6 +385,8 @@ init_properties (MetaKmsPlane *plane,
{ {
.name = "rotation", .name = "rotation",
.type = DRM_MODE_PROP_BITMASK, .type = DRM_MODE_PROP_BITMASK,
.enum_values = prop_table->rotation_bitmask,
.num_enum_values = META_KMS_PLANE_ROTATION_BIT_N_PROPS,
.parse = parse_rotations, .parse = parse_rotations,
}, },
[META_KMS_PLANE_PROP_IN_FORMATS] = [META_KMS_PLANE_PROP_IN_FORMATS] =
@ -451,7 +454,39 @@ init_properties (MetaKmsPlane *plane,
.name = "FB_DAMAGE_CLIPS", .name = "FB_DAMAGE_CLIPS",
.type = DRM_MODE_PROP_BLOB, .type = DRM_MODE_PROP_BLOB,
}, },
} },
.rotation_bitmask = {
[META_KMS_PLANE_ROTATION_BIT_ROTATE_0] =
{
.name = "rotate-0",
.bitmask = META_KMS_PLANE_ROTATION_ROTATE_0,
},
[META_KMS_PLANE_ROTATION_BIT_ROTATE_90] =
{
.name = "rotate-90",
.bitmask = META_KMS_PLANE_ROTATION_ROTATE_90,
},
[META_KMS_PLANE_ROTATION_BIT_ROTATE_180] =
{
.name = "rotate-180",
.bitmask = META_KMS_PLANE_ROTATION_ROTATE_180,
},
[META_KMS_PLANE_ROTATION_BIT_ROTATE_270] =
{
.name = "rotate-270",
.bitmask = META_KMS_PLANE_ROTATION_ROTATE_270,
},
[META_KMS_PLANE_ROTATION_BIT_REFLECT_X] =
{
.name = "reflect-x",
.bitmask = META_KMS_PLANE_ROTATION_REFLECT_X,
},
[META_KMS_PLANE_ROTATION_BIT_REFLECT_Y] =
{
.name = "reflect-y",
.bitmask = META_KMS_PLANE_ROTATION_REFLECT_Y,
},
},
}; };
meta_kms_impl_device_init_prop_table (impl_device, meta_kms_impl_device_init_prop_table (impl_device,