<div dir="ltr"><div>Both are<br><br></div>Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 25, 2016 at 3:38 PM, Kristian Høgsberg <span dir="ltr"><<a href="mailto:krh@bitplanet.net" target="_blank">krh@bitplanet.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">From: Kristian Høgsberg Kristensen <<a href="mailto:krh@bitplanet.net">krh@bitplanet.net</a>><br>
<br>
Signed-off-by: Kristian Høgsberg Kristensen <<a href="mailto:krh@bitplanet.net">krh@bitplanet.net</a>><br>
---<br>
 src/mesa/Makefile.sources  |   1 +<br>
 src/mesa/main/getstring.c  | 136 -------------------------------------<br>
 src/mesa/main/robustness.c | 165 +++++++++++++++++++++++++++++++++++++++++++++<br>
 3 files changed, 166 insertions(+), 136 deletions(-)<br>
 create mode 100644 src/mesa/main/robustness.c<br>
<br>
diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources<br>
index 840a68e..5f7f46d 100644<br>
--- a/src/mesa/Makefile.sources<br>
+++ b/src/mesa/Makefile.sources<br>
@@ -171,6 +171,7 @@ MAIN_FILES = \<br>
        main/remap.h \<br>
        main/renderbuffer.c \<br>
        main/renderbuffer.h \<br>
+       main/robustness.c \<br>
        main/samplerobj.c \<br>
        main/samplerobj.h \<br>
        main/scissor.c \<br>
diff --git a/src/mesa/main/getstring.c b/src/mesa/main/getstring.c<br>
index 1118a44..c39a076 100644<br>
--- a/src/mesa/main/getstring.c<br>
+++ b/src/mesa/main/getstring.c<br>
@@ -32,7 +32,6 @@<br>
 #include "extensions.h"<br>
 #include "mtypes.h"<br>
 #include "macros.h"<br>
-#include "main/dispatch.h" /* for _gloffset_COUNT */<br>
<br>
 /**<br>
  * Return the string for a glGetString(GL_SHADING_LANGUAGE_VERSION) query.<br>
@@ -310,138 +309,3 @@ _mesa_GetError( void )<br>
    ctx->ErrorDebugCount = 0;<br>
    return e;<br>
 }<br>
-<br>
-static void GLAPIENTRY<br>
-_context_lost_GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize,<br>
-                        GLsizei *length, GLint *values)<br>
-{<br>
-   GET_CURRENT_CONTEXT(ctx);<br>
-   if (ctx)<br>
-      _mesa_error(ctx, GL_CONTEXT_LOST, "GetSynciv(invalid call)");<br>
-<br>
-   if (pname == GL_SYNC_STATUS && bufSize >= 1)<br>
-      *values = GL_SIGNALED;<br>
-}<br>
-<br>
-static void GLAPIENTRY<br>
-_context_lost_GetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)<br>
-{<br>
-   GET_CURRENT_CONTEXT(ctx);<br>
-   if (ctx)<br>
-      _mesa_error(ctx, GL_CONTEXT_LOST, "GetQueryObjectuiv(context lost)");<br>
-<br>
-   if (pname == GL_QUERY_RESULT_AVAILABLE)<br>
-      *params = GL_TRUE;<br>
-}<br>
-<br>
-static int<br>
-context_lost_nop_handler(void)<br>
-{<br>
-   GET_CURRENT_CONTEXT(ctx);<br>
-   if (ctx)<br>
-      _mesa_error(ctx, GL_CONTEXT_LOST, "context lost");<br>
-<br>
-   return 0;<br>
-}<br>
-<br>
-void<br>
-_mesa_set_context_lost_dispatch(struct gl_context *ctx)<br>
-{<br>
-   if (ctx->ContextLost == NULL) {<br>
-      int numEntries = MAX2(_glapi_get_dispatch_table_size(), _gloffset_COUNT);<br>
-<br>
-      ctx->ContextLost = malloc(numEntries * sizeof(_glapi_proc));<br>
-      if (!ctx->ContextLost)<br>
-         return;<br>
-<br>
-      _glapi_proc *entry = (_glapi_proc *) ctx->ContextLost;<br>
-      unsigned i;<br>
-      for (i = 0; i < numEntries; i++)<br>
-         entry[i] = (_glapi_proc) context_lost_nop_handler;<br>
-<br>
-      /* The ARB_robustness specification says:<br>
-       *<br>
-       *    "* GetError and GetGraphicsResetStatus behave normally following a<br>
-       *       graphics reset, so that the application can determine a reset<br>
-       *       has occurred, and when it is safe to destroy and recreate the<br>
-       *       context.<br>
-       *<br>
-       *     * Any commands which might cause a polling application to block<br>
-       *       indefinitely will generate a CONTEXT_LOST error, but will also<br>
-       *       return a value indicating completion to the application. Such<br>
-       *       commands include:<br>
-       *<br>
-       *        + GetSynciv with <pname> SYNC_STATUS ignores the other<br>
-       *          parameters and returns SIGNALED in <values>.<br>
-       *<br>
-       *        + GetQueryObjectuiv with <pname> QUERY_RESULT_AVAILABLE<br>
-       *          ignores the other parameters and returns TRUE in <params>."<br>
-       */<br>
-      SET_GetError(ctx->ContextLost, _mesa_GetError);<br>
-      SET_GetGraphicsResetStatusARB(ctx->ContextLost, _mesa_GetGraphicsResetStatusARB);<br>
-      SET_GetSynciv(ctx->ContextLost, _context_lost_GetSynciv);<br>
-      SET_GetQueryObjectuiv(ctx->ContextLost, _context_lost_GetQueryObjectuiv);<br>
-   }<br>
-<br>
-   ctx->CurrentDispatch = ctx->ContextLost;<br>
-   _glapi_set_dispatch(ctx->CurrentDispatch);<br>
-}<br>
-<br>
-/**<br>
- * Returns an error code specified by GL_ARB_robustness, or GL_NO_ERROR.<br>
- * \return current context status<br>
- */<br>
-GLenum GLAPIENTRY<br>
-_mesa_GetGraphicsResetStatusARB( void )<br>
-{<br>
-   GET_CURRENT_CONTEXT(ctx);<br>
-   GLenum status = GL_NO_ERROR;<br>
-<br>
-   /* The ARB_robustness specification says:<br>
-    *<br>
-    *     "If the reset notification behavior is NO_RESET_NOTIFICATION_ARB,<br>
-    *     then the implementation will never deliver notification of reset<br>
-    *     events, and GetGraphicsResetStatusARB will always return NO_ERROR."<br>
-    */<br>
-   if (ctx->Const.ResetStrategy == GL_NO_RESET_NOTIFICATION_ARB) {<br>
-      if (MESA_VERBOSE & VERBOSE_API)<br>
-         _mesa_debug(ctx,<br>
-                     "glGetGraphicsResetStatusARB always returns GL_NO_ERROR "<br>
-                     "because reset notifictation was not requested at context "<br>
-                     "creation.\n");<br>
-<br>
-      return GL_NO_ERROR;<br>
-   }<br>
-<br>
-   if (ctx->Driver.GetGraphicsResetStatus) {<br>
-      /* Query the reset status of this context from the driver core.<br>
-       */<br>
-      status = ctx->Driver.GetGraphicsResetStatus(ctx);<br>
-<br>
-      mtx_lock(&ctx->Shared->Mutex);<br>
-<br>
-      /* If this context has not been affected by a GPU reset, check to see if<br>
-       * some other context in the share group has been affected by a reset.<br>
-       * If another context saw a reset but this context did not, assume that<br>
-       * this context was not guilty.<br>
-       */<br>
-      if (status != GL_NO_ERROR) {<br>
-         ctx->Shared->ShareGroupReset = true;<br>
-      } else if (ctx->Shared->ShareGroupReset && !ctx->ShareGroupReset) {<br>
-         status = GL_INNOCENT_CONTEXT_RESET_ARB;<br>
-      }<br>
-<br>
-      ctx->ShareGroupReset = ctx->Shared->ShareGroupReset;<br>
-      mtx_unlock(&ctx->Shared->Mutex);<br>
-   }<br>
-<br>
-   if (status != GL_NO_ERROR)<br>
-      _mesa_set_context_lost_dispatch(ctx);<br>
-<br>
-   if (!ctx->Driver.GetGraphicsResetStatus && (MESA_VERBOSE & VERBOSE_API))<br>
-      _mesa_debug(ctx,<br>
-                  "glGetGraphicsResetStatusARB always returns GL_NO_ERROR "<br>
-                  "because the driver doesn't track reset status.\n");<br>
-<br>
-   return status;<br>
-}<br>
diff --git a/src/mesa/main/robustness.c b/src/mesa/main/robustness.c<br>
new file mode 100644<br>
index 0000000..f54d9f3<br>
--- /dev/null<br>
+++ b/src/mesa/main/robustness.c<br>
@@ -0,0 +1,165 @@<br>
+/*<br>
+ * Copyright © 2016 Intel Corporation<br>
+ *<br>
+ * Permission is hereby granted, free of charge, to any person obtaining a<br>
+ * copy of this software and associated documentation files (the "Software"),<br>
+ * to deal in the Software without restriction, including without limitation<br>
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,<br>
+ * and/or sell copies of the Software, and to permit persons to whom the<br>
+ * Software is furnished to do so, subject to the following conditions:<br>
+ *<br>
+ * The above copyright notice and this permission notice (including the next<br>
+ * paragraph) shall be included in all copies or substantial portions of the<br>
+ * Software.<br>
+ *<br>
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR<br>
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,<br>
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL<br>
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER<br>
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING<br>
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER<br>
+ * DEALINGS IN THE SOFTWARE.<br>
+ */<br>
+<br>
+#include <stdbool.h><br>
+#include "context.h"<br>
+#include "debug_output.h"<br>
+#include "get.h"<br>
+#include "mtypes.h"<br>
+#include "macros.h"<br>
+#include "main/dispatch.h" /* for _gloffset_COUNT */<br>
+<br>
+static void GLAPIENTRY<br>
+_context_lost_GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize,<br>
+                        GLsizei *length, GLint *values)<br>
+{<br>
+   GET_CURRENT_CONTEXT(ctx);<br>
+   if (ctx)<br>
+      _mesa_error(ctx, GL_CONTEXT_LOST, "GetSynciv(invalid call)");<br>
+<br>
+   if (pname == GL_SYNC_STATUS && bufSize >= 1)<br>
+      *values = GL_SIGNALED;<br>
+}<br>
+<br>
+static void GLAPIENTRY<br>
+_context_lost_GetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params)<br>
+{<br>
+   GET_CURRENT_CONTEXT(ctx);<br>
+   if (ctx)<br>
+      _mesa_error(ctx, GL_CONTEXT_LOST, "GetQueryObjectuiv(context lost)");<br>
+<br>
+   if (pname == GL_QUERY_RESULT_AVAILABLE)<br>
+      *params = GL_TRUE;<br>
+}<br>
+<br>
+static int<br>
+context_lost_nop_handler(void)<br>
+{<br>
+   GET_CURRENT_CONTEXT(ctx);<br>
+   if (ctx)<br>
+      _mesa_error(ctx, GL_CONTEXT_LOST, "context lost");<br>
+<br>
+   return 0;<br>
+}<br>
+<br>
+void<br>
+_mesa_set_context_lost_dispatch(struct gl_context *ctx)<br>
+{<br>
+   if (ctx->ContextLost == NULL) {<br>
+      int numEntries = MAX2(_glapi_get_dispatch_table_size(), _gloffset_COUNT);<br>
+<br>
+      ctx->ContextLost = malloc(numEntries * sizeof(_glapi_proc));<br>
+      if (!ctx->ContextLost)<br>
+         return;<br>
+<br>
+      _glapi_proc *entry = (_glapi_proc *) ctx->ContextLost;<br>
+      unsigned i;<br>
+      for (i = 0; i < numEntries; i++)<br>
+         entry[i] = (_glapi_proc) context_lost_nop_handler;<br>
+<br>
+      /* The ARB_robustness specification says:<br>
+       *<br>
+       *    "* GetError and GetGraphicsResetStatus behave normally following a<br>
+       *       graphics reset, so that the application can determine a reset<br>
+       *       has occurred, and when it is safe to destroy and recreate the<br>
+       *       context.<br>
+       *<br>
+       *     * Any commands which might cause a polling application to block<br>
+       *       indefinitely will generate a CONTEXT_LOST error, but will also<br>
+       *       return a value indicating completion to the application. Such<br>
+       *       commands include:<br>
+       *<br>
+       *        + GetSynciv with <pname> SYNC_STATUS ignores the other<br>
+       *          parameters and returns SIGNALED in <values>.<br>
+       *<br>
+       *        + GetQueryObjectuiv with <pname> QUERY_RESULT_AVAILABLE<br>
+       *          ignores the other parameters and returns TRUE in <params>."<br>
+       */<br>
+      SET_GetError(ctx->ContextLost, _mesa_GetError);<br>
+      SET_GetGraphicsResetStatusARB(ctx->ContextLost, _mesa_GetGraphicsResetStatusARB);<br>
+      SET_GetSynciv(ctx->ContextLost, _context_lost_GetSynciv);<br>
+      SET_GetQueryObjectuiv(ctx->ContextLost, _context_lost_GetQueryObjectuiv);<br>
+   }<br>
+<br>
+   ctx->CurrentDispatch = ctx->ContextLost;<br>
+   _glapi_set_dispatch(ctx->CurrentDispatch);<br>
+}<br>
+<br>
+/**<br>
+ * Returns an error code specified by GL_ARB_robustness, or GL_NO_ERROR.<br>
+ * \return current context status<br>
+ */<br>
+GLenum GLAPIENTRY<br>
+_mesa_GetGraphicsResetStatusARB( void )<br>
+{<br>
+   GET_CURRENT_CONTEXT(ctx);<br>
+   GLenum status = GL_NO_ERROR;<br>
+<br>
+   /* The ARB_robustness specification says:<br>
+    *<br>
+    *     "If the reset notification behavior is NO_RESET_NOTIFICATION_ARB,<br>
+    *     then the implementation will never deliver notification of reset<br>
+    *     events, and GetGraphicsResetStatusARB will always return NO_ERROR."<br>
+    */<br>
+   if (ctx->Const.ResetStrategy == GL_NO_RESET_NOTIFICATION_ARB) {<br>
+      if (MESA_VERBOSE & VERBOSE_API)<br>
+         _mesa_debug(ctx,<br>
+                     "glGetGraphicsResetStatusARB always returns GL_NO_ERROR "<br>
+                     "because reset notifictation was not requested at context "<br>
+                     "creation.\n");<br>
+<br>
+      return GL_NO_ERROR;<br>
+   }<br>
+<br>
+   if (ctx->Driver.GetGraphicsResetStatus) {<br>
+      /* Query the reset status of this context from the driver core.<br>
+       */<br>
+      status = ctx->Driver.GetGraphicsResetStatus(ctx);<br>
+<br>
+      mtx_lock(&ctx->Shared->Mutex);<br>
+<br>
+      /* If this context has not been affected by a GPU reset, check to see if<br>
+       * some other context in the share group has been affected by a reset.<br>
+       * If another context saw a reset but this context did not, assume that<br>
+       * this context was not guilty.<br>
+       */<br>
+      if (status != GL_NO_ERROR) {<br>
+         ctx->Shared->ShareGroupReset = true;<br>
+      } else if (ctx->Shared->ShareGroupReset && !ctx->ShareGroupReset) {<br>
+         status = GL_INNOCENT_CONTEXT_RESET_ARB;<br>
+      }<br>
+<br>
+      ctx->ShareGroupReset = ctx->Shared->ShareGroupReset;<br>
+      mtx_unlock(&ctx->Shared->Mutex);<br>
+   }<br>
+<br>
+   if (status != GL_NO_ERROR)<br>
+      _mesa_set_context_lost_dispatch(ctx);<br>
+<br>
+   if (!ctx->Driver.GetGraphicsResetStatus && (MESA_VERBOSE & VERBOSE_API))<br>
+      _mesa_debug(ctx,<br>
+                  "glGetGraphicsResetStatusARB always returns GL_NO_ERROR "<br>
+                  "because the driver doesn't track reset status.\n");<br>
+<br>
+   return status;<br>
+}<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.5.0<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>