kms/plane: Parse IN_FORMATS via prop table parse vfunc
With the aim at always using the property table to fetch and parse property metadata, move IN_FORMATS handling to the property table, using the newly introduced parse vfunc. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1488>
This commit is contained in:
parent
1b3e8b4a27
commit
2b7b4576fb
@ -29,6 +29,7 @@
|
||||
typedef enum _MetaKmsPlaneProp
|
||||
{
|
||||
META_KMS_PLANE_PROP_TYPE = 0,
|
||||
META_KMS_PLANE_PROP_IN_FORMATS,
|
||||
META_KMS_PLANE_PROP_SRC_X,
|
||||
META_KMS_PLANE_PROP_SRC_Y,
|
||||
META_KMS_PLANE_PROP_SRC_W,
|
||||
|
@ -252,10 +252,14 @@ free_modifier_array (GArray *array)
|
||||
}
|
||||
|
||||
static void
|
||||
parse_formats (MetaKmsPlane *plane,
|
||||
MetaKmsImplDevice *impl_device,
|
||||
uint32_t blob_id)
|
||||
parse_formats (MetaKmsImplDevice *impl_device,
|
||||
MetaKmsProp *prop,
|
||||
drmModePropertyPtr drm_prop,
|
||||
uint64_t drm_prop_value,
|
||||
gpointer user_data)
|
||||
{
|
||||
MetaKmsPlane *plane = user_data;
|
||||
uint64_t blob_id;
|
||||
int fd;
|
||||
drmModePropertyBlobPtr blob;
|
||||
struct drm_format_modifier_blob *blob_fmt;
|
||||
@ -265,6 +269,7 @@ parse_formats (MetaKmsPlane *plane,
|
||||
|
||||
g_return_if_fail (g_hash_table_size (plane->formats_modifiers) == 0);
|
||||
|
||||
blob_id = drm_prop_value;
|
||||
if (blob_id == 0)
|
||||
return;
|
||||
|
||||
@ -349,25 +354,11 @@ static const uint32_t drm_default_formats[] =
|
||||
};
|
||||
|
||||
static void
|
||||
init_formats (MetaKmsPlane *plane,
|
||||
MetaKmsImplDevice *impl_device,
|
||||
drmModePlane *drm_plane,
|
||||
drmModeObjectProperties *drm_plane_props)
|
||||
init_legacy_formats (MetaKmsPlane *plane,
|
||||
MetaKmsImplDevice *impl_device,
|
||||
drmModePlane *drm_plane,
|
||||
drmModeObjectProperties *drm_plane_props)
|
||||
{
|
||||
drmModePropertyPtr prop;
|
||||
int idx;
|
||||
|
||||
prop = meta_kms_impl_device_find_property (impl_device, drm_plane_props,
|
||||
"IN_FORMATS", &idx);
|
||||
if (prop)
|
||||
{
|
||||
uint32_t blob_id;
|
||||
|
||||
blob_id = drm_plane_props->prop_values[idx];
|
||||
parse_formats (plane, impl_device, blob_id);
|
||||
drmModeFreeProperty (prop);
|
||||
}
|
||||
|
||||
if (g_hash_table_size (plane->formats_modifiers) == 0)
|
||||
{
|
||||
set_formats_from_array (plane,
|
||||
@ -399,6 +390,12 @@ init_properties (MetaKmsPlane *plane,
|
||||
.name = "type",
|
||||
.type = DRM_MODE_PROP_ENUM,
|
||||
},
|
||||
[META_KMS_PLANE_PROP_IN_FORMATS] =
|
||||
{
|
||||
.name = "IN_FORMATS",
|
||||
.type = DRM_MODE_PROP_BLOB,
|
||||
.parse = parse_formats,
|
||||
},
|
||||
[META_KMS_PLANE_PROP_SRC_X] =
|
||||
{
|
||||
.name = "SRC_X",
|
||||
@ -458,7 +455,7 @@ init_properties (MetaKmsPlane *plane,
|
||||
drm_plane_props->count_props,
|
||||
plane->prop_table.props,
|
||||
META_KMS_PLANE_N_PROPS,
|
||||
NULL);
|
||||
plane);
|
||||
}
|
||||
|
||||
MetaKmsPlane *
|
||||
@ -476,9 +473,9 @@ meta_kms_plane_new (MetaKmsPlaneType type,
|
||||
plane->device = meta_kms_impl_device_get_device (impl_device);
|
||||
|
||||
init_rotations (plane, impl_device, drm_plane_props);
|
||||
init_formats (plane, impl_device, drm_plane, drm_plane_props);
|
||||
|
||||
init_properties (plane, impl_device, drm_plane, drm_plane_props);
|
||||
init_legacy_formats (plane, impl_device, drm_plane, drm_plane_props);
|
||||
|
||||
return plane;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user