[mutter] cogl-context: Add a cogl_get_graphics_reset_status API



commit 0f2be43af479f5bae41b00fc857324b27550e410
Author: Rui Matos <tiagomatos gmail com>
Date:   Sun May 29 20:30:36 2016 +0200

    cogl-context: Add a cogl_get_graphics_reset_status API
    
    If the driver supports the GL_ARB_robustness extension we can expose
    the graphics reset status this way.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=739178

 cogl/cogl/cogl-context.c |   30 ++++++++++++++++++++++++++++++
 cogl/cogl/cogl-context.h |   42 ++++++++++++++++++++++++++++++++++++++++++
 cogl/cogl/cogl.symbols   |    1 +
 3 files changed, 73 insertions(+), 0 deletions(-)
---
diff --git a/cogl/cogl/cogl-context.c b/cogl/cogl/cogl-context.c
index a7eed29..4b1af61 100644
--- a/cogl/cogl/cogl-context.c
+++ b/cogl/cogl/cogl-context.c
@@ -76,6 +76,11 @@
 #define GL_NUM_EXTENSIONS 0x821D
 #endif
 
+/* This is a relatively new extension */
+#ifndef GL_PURGED_CONTEXT_RESET_NV
+#define GL_PURGED_CONTEXT_RESET_NV 0x92BB
+#endif
+
 static void _cogl_context_free (CoglContext *context);
 
 COGL_OBJECT_DEFINE (Context, context);
@@ -784,3 +789,28 @@ cogl_get_clock_time (CoglContext *context)
   else
     return 0;
 }
+
+CoglGraphicsResetStatus
+cogl_get_graphics_reset_status (CoglContext *context)
+{
+  if (!context->glGetGraphicsResetStatus)
+    return COGL_GRAPHICS_RESET_STATUS_NO_ERROR;
+
+  switch (context->glGetGraphicsResetStatus ())
+    {
+    case GL_GUILTY_CONTEXT_RESET_ARB:
+      return COGL_GRAPHICS_RESET_STATUS_GUILTY_CONTEXT_RESET;
+
+    case GL_INNOCENT_CONTEXT_RESET_ARB:
+      return COGL_GRAPHICS_RESET_STATUS_INNOCENT_CONTEXT_RESET;
+
+    case GL_UNKNOWN_CONTEXT_RESET_ARB:
+      return COGL_GRAPHICS_RESET_STATUS_UNKNOWN_CONTEXT_RESET;
+
+    case GL_PURGED_CONTEXT_RESET_NV:
+      return COGL_GRAPHICS_RESET_STATUS_PURGED_CONTEXT_RESET;
+
+    default:
+      return COGL_GRAPHICS_RESET_STATUS_NO_ERROR;
+    }
+}
diff --git a/cogl/cogl/cogl-context.h b/cogl/cogl/cogl-context.h
index 5294817..b0fdc27 100644
--- a/cogl/cogl/cogl-context.h
+++ b/cogl/cogl/cogl-context.h
@@ -373,6 +373,48 @@ cogl_foreach_feature (CoglContext *context,
 int64_t
 cogl_get_clock_time (CoglContext *context);
 
+/**
+ * CoglGraphicsResetStatus:
+ * @COGL_GRAPHICS_RESET_STATUS_NO_ERROR:
+ * @COGL_GRAPHICS_RESET_STATUS_GUILTY_CONTEXT_RESET:
+ * @COGL_GRAPHICS_RESET_STATUS_INNOCENT_CONTEXT_RESET:
+ * @COGL_GRAPHICS_RESET_STATUS_UNKNOWN_CONTEXT_RESET:
+ * @COGL_GRAPHICS_RESET_STATUS_PURGED_CONTEXT_RESET:
+ *
+ * All the error values that might be returned by
+ * cogl_get_graphics_reset_status(). Each value's meaning corresponds
+ * to the similarly named value defined in the ARB_robustness and
+ * NV_robustness_video_memory_purge extensions.
+ */
+typedef enum _CoglGraphicsResetStatus
+{
+  COGL_GRAPHICS_RESET_STATUS_NO_ERROR,
+  COGL_GRAPHICS_RESET_STATUS_GUILTY_CONTEXT_RESET,
+  COGL_GRAPHICS_RESET_STATUS_INNOCENT_CONTEXT_RESET,
+  COGL_GRAPHICS_RESET_STATUS_UNKNOWN_CONTEXT_RESET,
+  COGL_GRAPHICS_RESET_STATUS_PURGED_CONTEXT_RESET,
+} CoglGraphicsResetStatus;
+
+/**
+ * cogl_get_graphics_reset_status:
+ * @context: a #CoglContext pointer
+ *
+ * Returns the graphics reset status as reported by
+ * GetGraphicsResetStatusARB defined in the ARB_robustness extension.
+ *
+ * Note that Cogl doesn't normally enable the ARB_robustness
+ * extension in which case this will only ever return
+ * #COGL_GRAPHICS_RESET_STATUS_NO_ERROR.
+ *
+ * Applications must explicitly use a backend specific method to
+ * request that errors get reported such as X11's
+ * cogl_xlib_renderer_request_reset_on_video_memory_purge().
+ *
+ * Return value: a #CoglGraphicsResetStatus
+ */
+CoglGraphicsResetStatus
+cogl_get_graphics_reset_status (CoglContext *context);
+
 #endif /* COGL_ENABLE_EXPERIMENTAL_API */
 
 COGL_END_DECLS
diff --git a/cogl/cogl/cogl.symbols b/cogl/cogl/cogl.symbols
index cdac572..c1cd50e 100644
--- a/cogl/cogl/cogl.symbols
+++ b/cogl/cogl/cogl.symbols
@@ -330,6 +330,7 @@ cogl_get_clock_time
 cogl_get_depth_test_enabled
 cogl_get_draw_framebuffer
 cogl_get_features
+cogl_get_graphics_reset_status
 cogl_get_modelview_matrix
 cogl_get_option_group
 cogl_get_proc_address


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