diff --git a/clutter/clutter/x11/clutter-backend-x11.c b/clutter/clutter/x11/clutter-backend-x11.c index 9bb9c7bc2..281473e0c 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; } @@ -1027,6 +1029,30 @@ clutter_x11_has_event_retrieval (void) return !_no_xevent_retrieval; } +/** + * 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: * diff --git a/clutter/clutter/x11/clutter-x11.h b/clutter/clutter/x11/clutter-x11.h index e3204f393..bba7ec29d 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__ */