[Mesa-dev] [PATCH] arb_occlusion_query2: expect an error when target mismatch in glBeginQuery()
Eduardo Lima Mitev
elima at igalia.com
Mon Feb 9 23:48:51 PST 2015
>From the OpenGL ES 3.0.0 spec, section "2.13. ASYNCHRONOUS QUERIES",
page 82:
"BeginQuery generates an INVALID_OPERATION error if any of the
following conditions hold: [...]; id is the name of an existing
query object whose type does not match target; [...]
OpenGL 3.3 spec has similar wording at section "2.14. ASYNCHRONOUS
QUERIES", page 94.
Hence, trying to call BeginQuery on a query object which has already
been bound to a different target should return GL_INVALID_OPERATION.
---
tests/spec/arb_occlusion_query2/api.c | 49 +++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/tests/spec/arb_occlusion_query2/api.c b/tests/spec/arb_occlusion_query2/api.c
index f4d46e3..6d48b96 100644
--- a/tests/spec/arb_occlusion_query2/api.c
+++ b/tests/spec/arb_occlusion_query2/api.c
@@ -59,6 +59,10 @@ test_error_begin_while_other_active(void)
glEndQuery(GL_SAMPLES_PASSED);
piglit_reset_gl_error();
+ glDeleteQueries(2, oq);
+
+ glGenQueries(2, oq);
+
glBeginQuery(GL_ANY_SAMPLES_PASSED, oq[0]);
if (!piglit_check_gl_error(0))
pass = false;
@@ -102,6 +106,43 @@ test_counter_bits(void)
}
static bool
+test_error_begin_wrong_target(void)
+{
+ bool pass = true;
+ GLuint oq;
+
+ glGenQueries(1, &oq);
+
+ glBeginQuery(GL_SAMPLES_PASSED, oq);
+ if (!piglit_check_gl_error(0))
+ pass = false;
+ glEndQuery(GL_SAMPLES_PASSED);
+
+ /* From the OpenGL ES 3.0.0 spec, section "2.13. ASYNCHRONOUS QUERIES",
+ * page 82:
+ *
+ * "BeginQuery generates an INVALID_OPERATION error if any of the
+ * following conditions hold: [...]; id is the name of an existing
+ * query object whose type does not match target; [...]
+ *
+ * OpenGL 3.3 spec has similar wording at section "2.14. ASYNCHRONOUS
+ * QUERIES", page 94.
+ *
+ * Hence, trying to call BeginQuery on a query object which has already
+ * been bound to a different target should return GL_INVALID_OPERATION.
+ */
+ glBeginQuery(GL_ANY_SAMPLES_PASSED, oq);
+ if (!piglit_check_gl_error(GL_INVALID_OPERATION))
+ pass = false;
+ glEndQuery(GL_ANY_SAMPLES_PASSED);
+ piglit_reset_gl_error();
+
+ glDeleteQueries(1, &oq);
+
+ return pass;
+}
+
+static bool
test_error_end_wrong_target(void)
{
bool pass = true;
@@ -124,6 +165,10 @@ test_error_end_wrong_target(void)
glEndQuery(GL_SAMPLES_PASSED);
piglit_reset_gl_error();
+ glDeleteQueries(1, &oq);
+
+ glGenQueries(1, &oq);
+
glBeginQuery(GL_ANY_SAMPLES_PASSED, oq);
if (!piglit_check_gl_error(0))
pass = false;
@@ -191,6 +236,9 @@ test_current_query(void)
pass = false;
}
glEndQuery(GL_ANY_SAMPLES_PASSED);
+ glDeleteQueries(1, &oq);
+
+ glGenQueries(1, &oq);
/* Test the result for GL_SAMPLES_PASSED active */
glBeginQuery(GL_SAMPLES_PASSED, oq);
@@ -226,6 +274,7 @@ piglit_display(void)
pass = test_counter_bits() && pass;
pass = test_current_query() && pass;
+ pass = test_error_begin_wrong_target() && pass;
pass = test_error_end_wrong_target() && pass;
pass = test_error_begin_while_other_active() && pass;
--
2.1.3
More information about the mesa-dev
mailing list