[Piglit] [PATCH] egl_khr_create_context: Don't expect GL_CONTEXT_FLAGS query to work when it cannot
Ian Romanick
idr at freedesktop.org
Fri May 26 04:38:35 UTC 2017
From: Ian Romanick <ian.d.romanick at intel.com>
The GL_KHR_spec is quite clear that you cannot examine the state of the
GL_CONTEXT_FLAG_DEBUG_BIT in OpenGL ES < 3.2 contexts because you cannot
glGetIntegerv(GL_CONTEXT_FLAGS). This is also true, though not stated
in the extension spec, on desktop OpenGL < 3.0.
This should fix this test on any drivers that only support desktop
OpenGL < 3.0 or OpenGL ES < 3.2. Tested on Intel BDW (OpenGL ES 3.1).
Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
---
.../spec/egl_khr_create_context/valid-flag-debug.c | 62 +++++++++++++++++++---
1 file changed, 54 insertions(+), 8 deletions(-)
diff --git a/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c b/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c
index 31f7398..000a7fe 100644
--- a/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c
+++ b/tests/egl/spec/egl_khr_create_context/valid-flag-debug.c
@@ -69,6 +69,7 @@ try_debug_flag(EGLenum context_api, EGLenum context_bit)
EGLint attribs[64];
int i = 0;
+ GLboolean debug_output;
if (!EGL_KHR_create_context_setup(context_bit))
piglit_report_result(PIGLIT_SKIP);
@@ -158,19 +159,64 @@ try_debug_flag(EGLenum context_api, EGLenum context_bit)
break;
}
- glGetIntegerv(GL_CONTEXT_FLAGS, &actual_flags);
+ /* The "Interactions with OpenGL ES" section of the GL_KHR_debug spec
+ * says:
+ *
+ * In OpenGL ES versions prior to and including ES 3.1 there is no
+ * CONTEXT_FLAGS state and therefore the CONTEXT_FLAG_DEBUG_BIT
+ * cannot be queried. GLES contexts must act as if this state
+ * existed as described in this specification even if the state
+ * itself is not visible to applications. For example, DEBUG_OUTPUT
+ * must still be enabled by default if the context was created with
+ * debug enabled.
+ *
+ * Nothing is explicitly said about versions of desktop OpenGL before
+ * 3.0 which also lack the ability to query GL_CONTEXT_FLAGS. We will
+ * assume that the behavior should be the same. It is likely that
+ * Mesa is the only existent such implementation.
+ */
+ if ((context_bit == EGL_OPENGL_BIT && piglit_get_gl_version() < 30) ||
+ (context_bit != EGL_OPENGL_BIT && piglit_get_gl_version() < 32)) {
+ glGetIntegerv(GL_CONTEXT_FLAGS, &actual_flags);
+
+ if (!piglit_check_gl_error(GL_INVALID_ENUM)) {
+ fprintf(stderr,
+ "glGetIntegerv(GL_CONTEXT_FLAGS) should not "
+ "be possible in this context\n");
+ piglit_report_result(PIGLIT_FAIL);
+ }
+ } else {
+ glGetIntegerv(GL_CONTEXT_FLAGS, &actual_flags);
+
+ if (!piglit_check_gl_error(GL_NO_ERROR)) {
+ fprintf(stderr,
+ "glGetIntegerv(GL_CONTEXT_FLAGS) failed\n");
+ piglit_report_result(PIGLIT_FAIL);
+ }
+
+ /* Verify that this is actually a debug context. */
+ if (!(actual_flags & GL_CONTEXT_FLAG_DEBUG_BIT)) {
+ fprintf(stderr,
+ "GL_CONTEXT_FLAGS=0x%x does not contain "
+ "GL_CONTEXT_FLAG_DEBUG_BIT=0x%x\n",
+ actual_flags, GL_CONTEXT_FLAG_DEBUG_BIT);
+ piglit_report_result(PIGLIT_FAIL);
+ }
+ }
+
+ /* Since we may not have been able to query GL_CONTEXT_FLAGS above,
+ * query GL_DEBUG_OUTPUT just so that we can check something.
+ */
+ debug_output = glIsEnabled(GL_DEBUG_OUTPUT);
if (!piglit_check_gl_error(GL_NO_ERROR)) {
- fprintf(stderr, "glGetIntegerv(GL_CONTEXT_FLAGS) failed\n");
+ fprintf(stderr, "glIsEnabled(GL_DEBUG_OUTPUT) failed\n");
piglit_report_result(PIGLIT_FAIL);
}
- /* Verify that this is actually a debug context. */
- if (!(actual_flags & GL_CONTEXT_FLAG_DEBUG_BIT)) {
- fprintf(stderr,
- "GL_CONTEXT_FLAGS=0x%x does not contain "
- "GL_CONTEXT_FLAG_DEBUG_BIT=0x%x\n",
- actual_flags, GL_CONTEXT_FLAG_DEBUG_BIT);
+ if (!debug_output) {
+ fprintf(stderr, "GL_DEBUG_OUTPUT should be enabled by "
+ "default, but it was not.\n");
piglit_report_result(PIGLIT_FAIL);
}
--
2.7.4
More information about the Piglit
mailing list