mirror of
https://github.com/brl/mutter.git
synced 2025-02-16 13:24:09 +00:00
kms/impl-device: Make the actual implementation handle the drm event
The way drm events are handled depends on whether we're using atomic or not. Lets move the handling to the implementation, so that later the atomic backend can handle the event they it need to. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1488>
This commit is contained in:
parent
b693e58c53
commit
c0e9a6fe15
@ -1072,6 +1072,31 @@ process_plane_assignments (MetaKmsImplDevice *impl_device,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
page_flip_handler (int fd,
|
||||
unsigned int sequence,
|
||||
unsigned int tv_sec,
|
||||
unsigned int tv_usec,
|
||||
void *user_data)
|
||||
{
|
||||
MetaKmsPageFlipData *page_flip_data = user_data;
|
||||
MetaKmsImplDevice *impl_device;
|
||||
|
||||
meta_kms_page_flip_data_set_timings_in_impl (page_flip_data,
|
||||
sequence, tv_sec, tv_usec);
|
||||
|
||||
impl_device = meta_kms_page_flip_data_get_impl_device (page_flip_data);
|
||||
meta_kms_impl_device_handle_page_flip_callback (impl_device, page_flip_data);
|
||||
}
|
||||
|
||||
static void
|
||||
meta_kms_impl_device_simple_setup_drm_event_context (MetaKmsImplDevice *impl,
|
||||
drmEventContext *drm_event_context)
|
||||
{
|
||||
drm_event_context->version = 2;
|
||||
drm_event_context->page_flip_handler = page_flip_handler;
|
||||
}
|
||||
|
||||
static MetaKmsFeedback *
|
||||
meta_kms_impl_device_simple_process_update (MetaKmsImplDevice *impl_device,
|
||||
MetaKmsUpdate *update)
|
||||
@ -1249,6 +1274,8 @@ meta_kms_impl_device_simple_class_init (MetaKmsImplDeviceSimpleClass *klass)
|
||||
|
||||
object_class->finalize = meta_kms_impl_device_simple_finalize;
|
||||
|
||||
impl_device_class->setup_drm_event_context =
|
||||
meta_kms_impl_device_simple_setup_drm_event_context;
|
||||
impl_device_class->process_update =
|
||||
meta_kms_impl_device_simple_process_update;
|
||||
impl_device_class->handle_page_flip_callback =
|
||||
|
@ -84,10 +84,6 @@ G_DEFINE_TYPE_WITH_CODE (MetaKmsImplDevice, meta_kms_impl_device,
|
||||
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
|
||||
initable_iface_init))
|
||||
|
||||
static void
|
||||
meta_kms_impl_device_handle_page_flip_callback (MetaKmsImplDevice *impl_device,
|
||||
MetaKmsPageFlipData *page_flip_data);
|
||||
|
||||
MetaKmsDevice *
|
||||
meta_kms_impl_device_get_device (MetaKmsImplDevice *impl_device)
|
||||
{
|
||||
@ -169,37 +165,20 @@ meta_kms_impl_device_get_path (MetaKmsImplDevice *impl_device)
|
||||
return priv->path;
|
||||
}
|
||||
|
||||
static void
|
||||
page_flip_handler (int fd,
|
||||
unsigned int sequence,
|
||||
unsigned int sec,
|
||||
unsigned int usec,
|
||||
void *user_data)
|
||||
{
|
||||
MetaKmsPageFlipData *page_flip_data = user_data;
|
||||
MetaKmsImplDevice *impl_device;
|
||||
|
||||
meta_kms_page_flip_data_set_timings_in_impl (page_flip_data,
|
||||
sequence, sec, usec);
|
||||
|
||||
impl_device = meta_kms_page_flip_data_get_impl_device (page_flip_data);
|
||||
meta_kms_impl_device_handle_page_flip_callback (impl_device, page_flip_data);
|
||||
}
|
||||
|
||||
gboolean
|
||||
meta_kms_impl_device_dispatch (MetaKmsImplDevice *impl_device,
|
||||
GError **error)
|
||||
{
|
||||
MetaKmsImplDevicePrivate *priv =
|
||||
meta_kms_impl_device_get_instance_private (impl_device);
|
||||
MetaKmsImplDeviceClass *klass = META_KMS_IMPL_DEVICE_GET_CLASS (impl_device);
|
||||
|
||||
drmEventContext drm_event_context;
|
||||
|
||||
meta_assert_in_kms_impl (meta_kms_impl_get_kms (priv->impl));
|
||||
|
||||
drm_event_context = (drmEventContext) { 0 };
|
||||
drm_event_context.version = 2;
|
||||
drm_event_context.page_flip_handler = page_flip_handler;
|
||||
klass->setup_drm_event_context (impl_device, &drm_event_context);
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
@ -652,7 +631,7 @@ meta_kms_impl_device_process_update (MetaKmsImplDevice *impl_device,
|
||||
return klass->process_update (impl_device, update);
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
meta_kms_impl_device_handle_page_flip_callback (MetaKmsImplDevice *impl_device,
|
||||
MetaKmsPageFlipData *page_flip_data)
|
||||
{
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
#include <glib-object.h>
|
||||
#include <stdint.h>
|
||||
#include <xf86drm.h>
|
||||
#include <xf86drmMode.h>
|
||||
|
||||
#include "backends/native/meta-kms-device.h"
|
||||
@ -60,6 +61,8 @@ struct _MetaKmsImplDeviceClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
void (* setup_drm_event_context) (MetaKmsImplDevice *impl,
|
||||
drmEventContext *drm_event_context);
|
||||
MetaKmsFeedback * (* process_update) (MetaKmsImplDevice *impl,
|
||||
MetaKmsUpdate *update);
|
||||
void (* handle_page_flip_callback) (MetaKmsImplDevice *impl,
|
||||
@ -114,9 +117,19 @@ void meta_kms_impl_device_init_prop_table (MetaKmsImplDevice *impl_device,
|
||||
int n_props,
|
||||
gpointer user_data);
|
||||
|
||||
void meta_kms_impl_device_reload_prop_values (MetaKmsImplDevice *impl_device,
|
||||
uint32_t *drm_props,
|
||||
uint64_t *drm_prop_values,
|
||||
int n_drm_props,
|
||||
gpointer user_data,
|
||||
...);
|
||||
|
||||
MetaKmsFeedback * meta_kms_impl_device_process_update (MetaKmsImplDevice *impl_device,
|
||||
MetaKmsUpdate *update);
|
||||
|
||||
void meta_kms_impl_device_handle_page_flip_callback (MetaKmsImplDevice *impl_device,
|
||||
MetaKmsPageFlipData *page_flip_data);
|
||||
|
||||
void meta_kms_impl_device_discard_pending_page_flips (MetaKmsImplDevice *impl_device);
|
||||
|
||||
int meta_kms_impl_device_close (MetaKmsImplDevice *impl_device);
|
||||
|
Loading…
x
Reference in New Issue
Block a user