[mutter] cogl-context: Add a cogl_get_graphics_reset_status API
- From: Rui Matos <rtcm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] cogl-context: Add a cogl_get_graphics_reset_status API
- Date: Tue, 28 Jun 2016 17:54:44 +0000 (UTC)
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]