mirror of
https://github.com/brl/mutter.git
synced 2025-02-24 08:54:08 +00:00
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
|
typedef enum _MetaKmsPlaneProp
|
||||||
{
|
{
|
||||||
META_KMS_PLANE_PROP_TYPE = 0,
|
META_KMS_PLANE_PROP_TYPE = 0,
|
||||||
|
META_KMS_PLANE_PROP_IN_FORMATS,
|
||||||
META_KMS_PLANE_PROP_SRC_X,
|
META_KMS_PLANE_PROP_SRC_X,
|
||||||
META_KMS_PLANE_PROP_SRC_Y,
|
META_KMS_PLANE_PROP_SRC_Y,
|
||||||
META_KMS_PLANE_PROP_SRC_W,
|
META_KMS_PLANE_PROP_SRC_W,
|
||||||
|
@ -252,10 +252,14 @@ free_modifier_array (GArray *array)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
parse_formats (MetaKmsPlane *plane,
|
parse_formats (MetaKmsImplDevice *impl_device,
|
||||||
MetaKmsImplDevice *impl_device,
|
MetaKmsProp *prop,
|
||||||
uint32_t blob_id)
|
drmModePropertyPtr drm_prop,
|
||||||
|
uint64_t drm_prop_value,
|
||||||
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
|
MetaKmsPlane *plane = user_data;
|
||||||
|
uint64_t blob_id;
|
||||||
int fd;
|
int fd;
|
||||||
drmModePropertyBlobPtr blob;
|
drmModePropertyBlobPtr blob;
|
||||||
struct drm_format_modifier_blob *blob_fmt;
|
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);
|
g_return_if_fail (g_hash_table_size (plane->formats_modifiers) == 0);
|
||||||
|
|
||||||
|
blob_id = drm_prop_value;
|
||||||
if (blob_id == 0)
|
if (blob_id == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -349,25 +354,11 @@ static const uint32_t drm_default_formats[] =
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_formats (MetaKmsPlane *plane,
|
init_legacy_formats (MetaKmsPlane *plane,
|
||||||
MetaKmsImplDevice *impl_device,
|
MetaKmsImplDevice *impl_device,
|
||||||
drmModePlane *drm_plane,
|
drmModePlane *drm_plane,
|
||||||
drmModeObjectProperties *drm_plane_props)
|
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)
|
if (g_hash_table_size (plane->formats_modifiers) == 0)
|
||||||
{
|
{
|
||||||
set_formats_from_array (plane,
|
set_formats_from_array (plane,
|
||||||
@ -399,6 +390,12 @@ init_properties (MetaKmsPlane *plane,
|
|||||||
.name = "type",
|
.name = "type",
|
||||||
.type = DRM_MODE_PROP_ENUM,
|
.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] =
|
[META_KMS_PLANE_PROP_SRC_X] =
|
||||||
{
|
{
|
||||||
.name = "SRC_X",
|
.name = "SRC_X",
|
||||||
@ -458,7 +455,7 @@ init_properties (MetaKmsPlane *plane,
|
|||||||
drm_plane_props->count_props,
|
drm_plane_props->count_props,
|
||||||
plane->prop_table.props,
|
plane->prop_table.props,
|
||||||
META_KMS_PLANE_N_PROPS,
|
META_KMS_PLANE_N_PROPS,
|
||||||
NULL);
|
plane);
|
||||||
}
|
}
|
||||||
|
|
||||||
MetaKmsPlane *
|
MetaKmsPlane *
|
||||||
@ -476,9 +473,9 @@ meta_kms_plane_new (MetaKmsPlaneType type,
|
|||||||
plane->device = meta_kms_impl_device_get_device (impl_device);
|
plane->device = meta_kms_impl_device_get_device (impl_device);
|
||||||
|
|
||||||
init_rotations (plane, impl_device, drm_plane_props);
|
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_properties (plane, impl_device, drm_plane, drm_plane_props);
|
||||||
|
init_legacy_formats (plane, impl_device, drm_plane, drm_plane_props);
|
||||||
|
|
||||||
return plane;
|
return plane;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user