[mutter] clutter/x11: Add API to request video memory purges to be reported



commit 3691eb6d7027988fdc19560115ac7b51c6166e01
Author: Rui Matos <tiagomatos gmail com>
Date:   Tue Jun 21 17:40:15 2016 +0200

    clutter/x11: Add API to request video memory purges to be reported
    
    https://bugzilla.gnome.org/show_bug.cgi?id=739178

 clutter/clutter/x11/clutter-backend-x11.c |   28 +++++++++++++++++++++++++++-
 clutter/clutter/x11/clutter-x11.h         |    3 +++
 2 files changed, 30 insertions(+), 1 deletions(-)
---
diff --git a/clutter/clutter/x11/clutter-backend-x11.c b/clutter/clutter/x11/clutter-backend-x11.c
index 9bb9c7b..281473e 100644
--- a/clutter/clutter/x11/clutter-backend-x11.c
+++ b/clutter/clutter/x11/clutter-backend-x11.c
@@ -109,6 +109,7 @@ static const gchar *atom_names[] = {
 #define N_ATOM_NAMES G_N_ELEMENTS (atom_names)
 
 /* various flags corresponding to pre init setup calls */
+static gboolean _want_reset_on_video_memory_purge = FALSE;
 static gboolean _no_xevent_retrieval = FALSE;
 static gboolean clutter_enable_xinput = TRUE;
 static gboolean clutter_enable_argb = FALSE;
@@ -681,7 +682,8 @@ clutter_backend_x11_get_renderer (ClutterBackend  *backend,
 
   /* set the display object we're using */
   cogl_xlib_renderer_set_foreign_display (renderer, xdisplay);
-
+  cogl_xlib_renderer_request_reset_on_video_memory_purge (renderer,
+                                                          _want_reset_on_video_memory_purge);
   return renderer;
 }
 
@@ -1028,6 +1030,30 @@ clutter_x11_has_event_retrieval (void)
 }
 
 /**
+ * clutter_x11_request_reset_on_video_memory_purge:
+ *
+ * If the GL driver supports the NV_robustness_video_memory_purge
+ * extension, this call lets applications request that it gets
+ * initialized, thus allowing cogl_get_graphics_reset_status() to
+ * report memory purged errors if they happen. Checking for the
+ * graphics reset status is the application's responsibility.
+ *
+ * This function can only be called before calling clutter_init().
+ */
+void
+clutter_x11_request_reset_on_video_memory_purge (void)
+{
+  if (_clutter_context_is_initialized ())
+    {
+      g_warning ("%s() can only be used before calling clutter_init()",
+                 G_STRFUNC);
+      return;
+    }
+
+  _want_reset_on_video_memory_purge = TRUE;
+}
+
+/**
  * clutter_x11_get_default_screen:
  *
  * Gets the number of the default X Screen object.
diff --git a/clutter/clutter/x11/clutter-x11.h b/clutter/clutter/x11/clutter-x11.h
index e3204f3..bba7ec2 100644
--- a/clutter/clutter/x11/clutter-x11.h
+++ b/clutter/clutter/x11/clutter-x11.h
@@ -161,6 +161,9 @@ gint clutter_x11_event_get_key_group (const ClutterEvent *event);
 CLUTTER_AVAILABLE_IN_ALL
 guint clutter_x11_event_sequence_get_touch_detail (const ClutterEventSequence *sequence);
 
+CLUTTER_AVAILABLE_IN_ALL
+void clutter_x11_request_reset_on_video_memory_purge (void);
+
 G_END_DECLS
 
 #endif /* __CLUTTER_X11_H__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]