mirror of
https://github.com/brl/mutter.git
synced 2024-11-21 23:50:41 -05:00
crtc/native: Add API to check whether the CRTC supports hardware cursors
On a KMS backed CRTC, hardware cursor are supported when there are cursor planes to assign them to. Note that when using legacy mode setting, fake cursor planes are added when adequate. On virtual CRTCs, used with virtual monitors, the equivalent of hardware cursor are always supported, as they are sent using embedded PipeWire stream metadata. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1991>
This commit is contained in:
parent
2c70120555
commit
e82685d049
@ -94,6 +94,16 @@ meta_crtc_kms_is_transform_handled (MetaCrtcNative *crtc_native,
|
|||||||
return is_transform_handled (crtc_kms, transform);
|
return is_transform_handled (crtc_kms, transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_crtc_kms_is_hw_cursor_supported (MetaCrtcNative *crtc_native)
|
||||||
|
{
|
||||||
|
MetaCrtcKms *crtc_kms = META_CRTC_KMS (crtc_native);
|
||||||
|
MetaKmsCrtc *kms_crtc = meta_crtc_kms_get_kms_crtc (crtc_kms);
|
||||||
|
MetaKmsDevice *kms_device = meta_kms_crtc_get_device (kms_crtc);
|
||||||
|
|
||||||
|
return !!meta_kms_device_get_cursor_plane_for (kms_device, kms_crtc);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
meta_crtc_kms_apply_transform (MetaCrtcKms *crtc_kms,
|
meta_crtc_kms_apply_transform (MetaCrtcKms *crtc_kms,
|
||||||
MetaKmsPlaneAssignment *kms_plane_assignment)
|
MetaKmsPlaneAssignment *kms_plane_assignment)
|
||||||
@ -385,4 +395,5 @@ meta_crtc_kms_class_init (MetaCrtcKmsClass *klass)
|
|||||||
object_class->dispose = meta_crtc_kms_dispose;
|
object_class->dispose = meta_crtc_kms_dispose;
|
||||||
|
|
||||||
crtc_native_class->is_transform_handled = meta_crtc_kms_is_transform_handled;
|
crtc_native_class->is_transform_handled = meta_crtc_kms_is_transform_handled;
|
||||||
|
crtc_native_class->is_hw_cursor_supported = meta_crtc_kms_is_hw_cursor_supported;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,14 @@ meta_crtc_native_is_transform_handled (MetaCrtcNative *crtc_native,
|
|||||||
return klass->is_transform_handled (crtc_native, transform);
|
return klass->is_transform_handled (crtc_native, transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_crtc_native_is_hw_cursor_supported (MetaCrtcNative *crtc_native)
|
||||||
|
{
|
||||||
|
MetaCrtcNativeClass *klass = META_CRTC_NATIVE_GET_CLASS (crtc_native);
|
||||||
|
|
||||||
|
return klass->is_hw_cursor_supported (crtc_native);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_crtc_native_init (MetaCrtcNative *crtc_native)
|
meta_crtc_native_init (MetaCrtcNative *crtc_native)
|
||||||
{
|
{
|
||||||
|
@ -33,9 +33,12 @@ struct _MetaCrtcNativeClass
|
|||||||
|
|
||||||
gboolean (* is_transform_handled) (MetaCrtcNative *crtc_native,
|
gboolean (* is_transform_handled) (MetaCrtcNative *crtc_native,
|
||||||
MetaMonitorTransform monitor_transform);
|
MetaMonitorTransform monitor_transform);
|
||||||
|
gboolean (* is_hw_cursor_supported) (MetaCrtcNative *crtc_native);
|
||||||
};
|
};
|
||||||
|
|
||||||
gboolean meta_crtc_native_is_transform_handled (MetaCrtcNative *crtc_native,
|
gboolean meta_crtc_native_is_transform_handled (MetaCrtcNative *crtc_native,
|
||||||
MetaMonitorTransform transform);
|
MetaMonitorTransform transform);
|
||||||
|
|
||||||
|
gboolean meta_crtc_native_is_hw_cursor_supported (MetaCrtcNative *crtc_native);
|
||||||
|
|
||||||
#endif /* META_CRTC_NATIVE_H */
|
#endif /* META_CRTC_NATIVE_H */
|
||||||
|
@ -45,6 +45,12 @@ meta_crtc_virtual_is_transform_handled (MetaCrtcNative *crtc_native,
|
|||||||
return transform == META_MONITOR_TRANSFORM_NORMAL;
|
return transform == META_MONITOR_TRANSFORM_NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
meta_crtc_virtual_is_hw_cursor_supported (MetaCrtcNative *crtc_native)
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
meta_crtc_virtual_init (MetaCrtcVirtual *crtc_virtual)
|
meta_crtc_virtual_init (MetaCrtcVirtual *crtc_virtual)
|
||||||
{
|
{
|
||||||
@ -57,4 +63,6 @@ meta_crtc_virtual_class_init (MetaCrtcVirtualClass *klass)
|
|||||||
|
|
||||||
crtc_native_class->is_transform_handled =
|
crtc_native_class->is_transform_handled =
|
||||||
meta_crtc_virtual_is_transform_handled;
|
meta_crtc_virtual_is_transform_handled;
|
||||||
|
crtc_native_class->is_hw_cursor_supported =
|
||||||
|
meta_crtc_virtual_is_hw_cursor_supported;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user