[Piglit] [PATCH 1/2] arb_query_buffer_object: extract some common code for running queries
Nicolai Hähnle
nhaehnle at gmail.com
Mon Sep 18 14:49:19 UTC 2017
From: Nicolai Hähnle <nicolai.haehnle at amd.com>
---
.../spec/arb_query_buffer_object/CMakeLists.gl.txt | 2 +-
tests/spec/arb_query_buffer_object/common.c | 169 +++++++++++++++++++++
tests/spec/arb_query_buffer_object/common.h | 58 +++++++
tests/spec/arb_query_buffer_object/qbo.c | 140 ++---------------
4 files changed, 240 insertions(+), 129 deletions(-)
create mode 100644 tests/spec/arb_query_buffer_object/common.c
create mode 100644 tests/spec/arb_query_buffer_object/common.h
diff --git a/tests/spec/arb_query_buffer_object/CMakeLists.gl.txt b/tests/spec/arb_query_buffer_object/CMakeLists.gl.txt
index 9a3d202c0..30a545546 100644
--- a/tests/spec/arb_query_buffer_object/CMakeLists.gl.txt
+++ b/tests/spec/arb_query_buffer_object/CMakeLists.gl.txt
@@ -1,13 +1,13 @@
include_directories(
${GLEXT_INCLUDE_DIR}
${OPENGL_INCLUDE_PATH}
)
link_libraries(
piglitutil_${piglit_target_api}
${OPENGL_gl_LIBRARY}
)
-piglit_add_executable(arb_query_buffer_object-qbo qbo.c)
+piglit_add_executable(arb_query_buffer_object-qbo qbo.c common.c)
# vim: ft=cmake:
diff --git a/tests/spec/arb_query_buffer_object/common.c b/tests/spec/arb_query_buffer_object/common.c
new file mode 100644
index 000000000..cd6bd4787
--- /dev/null
+++ b/tests/spec/arb_query_buffer_object/common.c
@@ -0,0 +1,169 @@
+/*
+ * Copyright © 2015 Glenn Kennard
+ * Copyright (c) 2017 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ */
+
+#include "common.h"
+
+static int prog;
+
+/* Note: meaningful test cases (with non-zero values) for the following are
+ * missing:
+ * - GL_COMPUTE_SHADER_INVOCATIONS_ARB
+ * - GL_GEOMETRY_SHADER_INVOCATIONS
+ * - GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB
+ * - GL_TESS_CONTROL_SHADER_PATCHES_ARB
+ * - GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB
+ * - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
+ */
+const struct query_type_desc query_types[] = {
+ { GL_ANY_SAMPLES_PASSED, { "GL_ARB_occlusion_query2", NULL } },
+ { GL_ANY_SAMPLES_PASSED_CONSERVATIVE, { "GL_ARB_ES3_compatibility", NULL } },
+ { GL_CLIPPING_INPUT_PRIMITIVES_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
+ { GL_CLIPPING_OUTPUT_PRIMITIVES_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
+ { GL_COMPUTE_SHADER_INVOCATIONS_ARB, { "GL_ARB_pipeline_statistics_query", "GL_ARB_compute_shader" } },
+ { GL_FRAGMENT_SHADER_INVOCATIONS_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
+ { GL_GEOMETRY_SHADER_INVOCATIONS, { "GL_ARB_pipeline_statistics_query", NULL } },
+ { GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
+ { GL_PRIMITIVES_GENERATED, { NULL, } },
+ { GL_PRIMITIVES_SUBMITTED_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
+ { GL_SAMPLES_PASSED_ARB, { NULL, } },
+ { GL_TESS_CONTROL_SHADER_PATCHES_ARB, { "GL_ARB_pipeline_statistics_query", "GL_ARB_tessellation_shader" } },
+ { GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB, { "GL_ARB_pipeline_statistics_query", "GL_ARB_tessellation_shader" } },
+ { GL_TIMESTAMP, { "GL_ARB_timer_query", NULL } },
+ { GL_TIME_ELAPSED, { "GL_ARB_timer_query", NULL } },
+ { GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, { NULL, } },
+ { GL_VERTEX_SHADER_INVOCATIONS_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
+ { GL_VERTICES_SUBMITTED_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
+};
+
+unsigned
+num_query_types() {
+ return ARRAY_SIZE(query_types);
+}
+
+void
+get_query_values(const struct query_type_desc *desc, bool *exact, uint32_t *expected)
+{
+ *exact = true;
+
+ switch (desc->type) {
+ case GL_ANY_SAMPLES_PASSED:
+ case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
+ *expected = 1;
+ break;
+ case GL_CLIPPING_INPUT_PRIMITIVES_ARB:
+ case GL_CLIPPING_OUTPUT_PRIMITIVES_ARB:
+ *exact = false;
+ *expected = 1;
+ break;
+ case GL_FRAGMENT_SHADER_INVOCATIONS_ARB:
+ *exact = false;
+ *expected = 1;
+ break;
+ case GL_PRIMITIVES_GENERATED:
+ case GL_PRIMITIVES_SUBMITTED_ARB:
+ *exact = false;
+ *expected = 1;
+ break;
+ case GL_SAMPLES_PASSED_ARB:
+ *expected = piglit_width * piglit_height;
+ break;
+ case GL_TIMESTAMP:
+ case GL_TIME_ELAPSED:
+ *exact = false;
+ *expected = 1;
+ break;
+ case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
+ *expected = 0;
+ break;
+ case GL_VERTEX_SHADER_INVOCATIONS_ARB:
+ case GL_VERTICES_SUBMITTED_ARB:
+ *exact = false;
+ *expected = 1;
+ break;
+ case GL_COMPUTE_SHADER_INVOCATIONS_ARB:
+ case GL_GEOMETRY_SHADER_INVOCATIONS:
+ case GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB:
+ case GL_TESS_CONTROL_SHADER_PATCHES_ARB:
+ case GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB:
+ *expected = 0;
+ break;
+ default:
+ abort();
+ }
+}
+
+bool
+is_query_supported(const struct query_type_desc *desc)
+{
+ for (unsigned i = 0; i < ARRAY_SIZE(desc->extensions); ++i) {
+ if (!desc->extensions[i])
+ break;
+
+ if (!piglit_is_extension_supported(desc->extensions[i]))
+ return false;
+ }
+
+ return true;
+}
+
+void
+run_query(unsigned query, const struct query_type_desc *desc)
+{
+ GLenum query_type = desc->type;
+
+ glClearColor(0.5, 0.5, 0.5, 1.0);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ /* Enable query, draw something that should pass */
+ glEnable(GL_DEPTH_TEST);
+ glUseProgram(prog);
+ if (query_type != GL_TIMESTAMP)
+ glBeginQuery(query_type, query);
+ piglit_draw_rect_z(0.5, -1, -1, 2, 2);
+ if (query_type != GL_TIMESTAMP)
+ glEndQuery(query_type);
+ else
+ glQueryCounter(query, query_type);
+}
+
+void
+query_common_init()
+{
+ static const char vsCode[] =
+ "#version 150\n"
+ "in vec4 pos_in;\n"
+ "void main() {\n"
+ " gl_Position = pos_in;\n"
+ "}\n";
+
+ static const char fsCode[] =
+ "#version 150\n"
+ "out vec4 color;\n"
+ "void main() {\n"
+ " color = vec4(0.0, 0.0, 1.0, 1.0);\n"
+ "}\n";
+
+ prog = piglit_build_simple_program(vsCode, fsCode);
+}
diff --git a/tests/spec/arb_query_buffer_object/common.h b/tests/spec/arb_query_buffer_object/common.h
new file mode 100644
index 000000000..89dc8b494
--- /dev/null
+++ b/tests/spec/arb_query_buffer_object/common.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright © 2015 Glenn Kennard
+ * Copyright (c) 2017 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ */
+
+/**
+ * \file common.h
+ * Common tools for generating queries.
+ */
+
+#ifndef ARB_QUERY_BUFFER_OBJECT_COMMON_H
+#define ARB_QUERY_BUFFER_OBJECT_COMMON_H
+
+#include "piglit-util-gl.h"
+
+struct query_type_desc {
+ GLenum type;
+ const char *extensions[2];
+};
+
+extern const struct query_type_desc query_types[];
+
+unsigned num_query_types();
+
+void
+get_query_values(const struct query_type_desc *desc, bool *exact, uint32_t *expected);
+
+bool
+is_query_supported(const struct query_type_desc *desc);
+
+void
+run_query(unsigned query, const struct query_type_desc *desc);
+
+void
+query_common_init();
+
+
+#endif /* ARB_QUERY_BUFFER_OBJECT_COMMON_H */
diff --git a/tests/spec/arb_query_buffer_object/qbo.c b/tests/spec/arb_query_buffer_object/qbo.c
index 44c24826f..3ba11ee26 100644
--- a/tests/spec/arb_query_buffer_object/qbo.c
+++ b/tests/spec/arb_query_buffer_object/qbo.c
@@ -24,38 +24,37 @@
*/
/**
* \file qbo.c
* Tests ARB_query_buffer_object
* - synchronous wait for result
* - asynchrounous result, default value is left intact if result unavailable
* - asynchrounous result, retrieve result to client memory before & after
*/
-#include "piglit-util-gl.h"
+#include "common.h"
PIGLIT_GL_TEST_CONFIG_BEGIN
config.supports_gl_compat_version = 32;
config.supports_gl_core_version = 32;
config.window_visual = PIGLIT_GL_VISUAL_RGBA | PIGLIT_GL_VISUAL_DOUBLE |
PIGLIT_GL_VISUAL_DEPTH;
PIGLIT_GL_TEST_CONFIG_END
#define BUFFER_OFFSET(i) ((void *)((char *)NULL + i))
static const float green[] = {0, 1, 0, 1};
static unsigned query;
static unsigned qbo;
-static int prog;
static int qbo_prog;
static int sync_mode_loc;
static int expect_exact_loc;
static int is_64bit_loc;
static int expected_loc;
static int expected_hi_loc;
enum sync_mode {
QBO_SYNC,
QBO_SYNC_CPU_READ_AFTER_CACHE_TEST,
@@ -66,111 +65,24 @@ enum sync_mode {
};
static const char * const sync_mode_names[] = {
"SYNC",
"SYNC_CPU_READ_AFTER_CACHE_TEST",
"ASYNC",
"ASYNC_CPU_READ_BEFORE",
"ASYNC_CPU_READ_AFTER",
};
-static GLenum query_type;
+static const struct query_type_desc *query_desc;
static enum sync_mode sync_mode;
static GLenum result_type;
-struct query_type_desc {
- GLenum type;
- const char *extensions[2];
-};
-
-/* Note: meaningful test cases (with non-zero values) for the following are
- * missing:
- * - GL_COMPUTE_SHADER_INVOCATIONS_ARB
- * - GL_GEOMETRY_SHADER_INVOCATIONS
- * - GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB
- * - GL_TESS_CONTROL_SHADER_PATCHES_ARB
- * - GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB
- * - GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
- */
-static const struct query_type_desc query_types[] = {
- { GL_ANY_SAMPLES_PASSED, { "GL_ARB_occlusion_query2", NULL } },
- { GL_ANY_SAMPLES_PASSED_CONSERVATIVE, { "GL_ARB_ES3_compatibility", NULL } },
- { GL_CLIPPING_INPUT_PRIMITIVES_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
- { GL_CLIPPING_OUTPUT_PRIMITIVES_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
- { GL_COMPUTE_SHADER_INVOCATIONS_ARB, { "GL_ARB_pipeline_statistics_query", "GL_ARB_compute_shader" } },
- { GL_FRAGMENT_SHADER_INVOCATIONS_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
- { GL_GEOMETRY_SHADER_INVOCATIONS, { "GL_ARB_pipeline_statistics_query", NULL } },
- { GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
- { GL_PRIMITIVES_GENERATED, { NULL, } },
- { GL_PRIMITIVES_SUBMITTED_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
- { GL_SAMPLES_PASSED_ARB, { NULL, } },
- { GL_TESS_CONTROL_SHADER_PATCHES_ARB, { "GL_ARB_pipeline_statistics_query", "GL_ARB_tessellation_shader" } },
- { GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB, { "GL_ARB_pipeline_statistics_query", "GL_ARB_tessellation_shader" } },
- { GL_TIMESTAMP, { "GL_ARB_timer_query", NULL } },
- { GL_TIME_ELAPSED, { "GL_ARB_timer_query", NULL } },
- { GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN, { NULL, } },
- { GL_VERTEX_SHADER_INVOCATIONS_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
- { GL_VERTICES_SUBMITTED_ARB, { "GL_ARB_pipeline_statistics_query", NULL } },
-};
-
-static void
-get_query_values(GLenum query_type, bool *exact, uint32_t *expected)
-{
- *exact = true;
-
- switch (query_type) {
- case GL_ANY_SAMPLES_PASSED:
- case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
- *expected = 1;
- break;
- case GL_CLIPPING_INPUT_PRIMITIVES_ARB:
- case GL_CLIPPING_OUTPUT_PRIMITIVES_ARB:
- *exact = false;
- *expected = 1;
- break;
- case GL_FRAGMENT_SHADER_INVOCATIONS_ARB:
- *exact = false;
- *expected = 1;
- break;
- case GL_PRIMITIVES_GENERATED:
- case GL_PRIMITIVES_SUBMITTED_ARB:
- *exact = false;
- *expected = 1;
- break;
- case GL_SAMPLES_PASSED_ARB:
- *expected = piglit_width * piglit_height;
- break;
- case GL_TIMESTAMP:
- case GL_TIME_ELAPSED:
- *exact = false;
- *expected = 1;
- break;
- case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
- *expected = 0;
- break;
- case GL_VERTEX_SHADER_INVOCATIONS_ARB:
- case GL_VERTICES_SUBMITTED_ARB:
- *exact = false;
- *expected = 1;
- break;
- case GL_COMPUTE_SHADER_INVOCATIONS_ARB:
- case GL_GEOMETRY_SHADER_INVOCATIONS:
- case GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB:
- case GL_TESS_CONTROL_SHADER_PATCHES_ARB:
- case GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB:
- *expected = 0;
- break;
- default:
- abort();
- }
-}
-
static enum piglit_result
cpu_gather_query(bool exact, uint32_t expected, uint64_t *cpu_result)
{
*cpu_result = 0;
glBindBuffer(GL_QUERY_BUFFER, 0);
if (result_type == GL_INT)
glGetQueryObjectiv(query, GL_QUERY_RESULT, (GLint*)cpu_result);
else if (result_type == GL_UNSIGNED_INT)
@@ -189,41 +101,29 @@ run_subtest(void)
{
bool exact;
uint32_t expected;
uint64_t cpu_result;
bool have_cpu_result = false;
uint32_t default_value[4] = { 0xccccccccu, 0xccccccccu, 0xccccccccu, 0xccccccccu };
bool is_sync =
sync_mode == QBO_SYNC ||
sync_mode == QBO_SYNC_CPU_READ_AFTER_CACHE_TEST;
- get_query_values(query_type, &exact, &expected);
+ get_query_values(query_desc, &exact, &expected);
- glClearColor(0.5, 0.5, 0.5, 1.0);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ glGenQueries(1, &query);
+ run_query(query, query_desc);
/* Load default value into buffer */
glBindBuffer(GL_QUERY_BUFFER, qbo);
glBufferData(GL_QUERY_BUFFER, 16, default_value, GL_DYNAMIC_COPY);
- /* Enable query, draw something that should pass */
- glEnable(GL_DEPTH_TEST);
- glUseProgram(prog);
- glGenQueries(1, &query);
- if (query_type != GL_TIMESTAMP)
- glBeginQuery(query_type, query);
- piglit_draw_rect_z(0.5, -1, -1, 2, 2);
- if (query_type != GL_TIMESTAMP)
- glEndQuery(query_type);
- else
- glQueryCounter(query, query_type);
-
if (sync_mode == QBO_ASYNC_CPU_READ_BEFORE) {
if (cpu_gather_query(exact, expected, &cpu_result))
return PIGLIT_FAIL;
have_cpu_result = true;
}
glBindBuffer(GL_QUERY_BUFFER, qbo);
if (is_sync) {
/* Special mode to test against a possible cache invalidation
* in case the wait-for-result is handled at a different place
@@ -295,86 +195,71 @@ run_subtest(void)
enum piglit_result
piglit_display(void)
{
static const GLenum result_types[] = {
GL_INT,
GL_UNSIGNED_INT,
GL_UNSIGNED_INT64_ARB
};
enum piglit_result r = PIGLIT_PASS;
- for (unsigned qnum = 0; qnum < ARRAY_SIZE(query_types); qnum++) {
- const struct query_type_desc *desc = &query_types[qnum];
- bool supported = true;
-
- query_type = desc->type;
+ for (unsigned qnum = 0; qnum < num_query_types(); qnum++) {
+ query_desc = &query_types[qnum];
- for (unsigned i = 0; i < ARRAY_SIZE(desc->extensions); ++i) {
- if (!desc->extensions[i])
- break;
-
- if (!piglit_is_extension_supported(desc->extensions[i])) {
- supported = false;
- break;
- }
- }
+ bool supported = is_query_supported(query_desc);
for (sync_mode = QBO_SYNC;
sync_mode < NUM_QBO_SYNC_MODES;
sync_mode++) {
for (unsigned ridx = 0; ridx < ARRAY_SIZE(result_types); ++ridx) {
enum piglit_result subtest_result = PIGLIT_SKIP;
result_type = result_types[ridx];
if (supported) {
subtest_result = run_subtest();
if (subtest_result != PIGLIT_PASS)
r = subtest_result;
}
piglit_report_subtest_result(subtest_result, "query-%s-%s-%s",
- piglit_get_gl_enum_name(query_type),
+ piglit_get_gl_enum_name(query_desc->type),
sync_mode_names[sync_mode],
piglit_get_gl_enum_name(result_type));
}
}
}
return r;
}
void
piglit_init(int argc, char **argv)
{
char *vsCode;
- char *fsCode, *qboFsCode;
+ char *qboFsCode;
piglit_require_extension("GL_ARB_query_buffer_object");
piglit_require_extension("GL_ARB_uniform_buffer_object");
+ query_common_init();
+
glGenBuffers(1, &qbo);
glBindBuffer(GL_QUERY_BUFFER, qbo);
glBufferData(GL_QUERY_BUFFER, 4, NULL, GL_DYNAMIC_COPY);
vsCode =
"#version 150\n"
"in vec4 pos_in;\n"
"void main() {\n"
" gl_Position = pos_in;\n"
"}\n";
- fsCode =
- "#version 150\n"
- "out vec4 color;\n"
- "void main() {\n"
- " color = vec4(0.0, 0.0, 1.0, 1.0);\n"
- "}\n";
qboFsCode =
"#version 150\n"
"#extension GL_ARB_uniform_buffer_object : require\n"
"uniform query {\n"
" uint result;\n"
" uint result_hi;\n"
" uint available;\n"
" uint available_hi;\n"
"};\n"
"uniform bool sync_mode;\n"
@@ -409,18 +294,17 @@ piglit_init(int argc, char **argv)
" if (result_ok) {\n"
" color = vec4(0.0, 1.0, 0.0, 1.0);\n"
" } else if (ready) {\n"
" color = vec4(1.0, 0.0, 0.0, 1.0);\n"
" } else {\n"
" color = vec4(1.0, 0.5, 0.0, 1.0);\n"
" }\n"
" }\n"
"}\n";
- prog = piglit_build_simple_program(vsCode, fsCode);
qbo_prog = piglit_build_simple_program(vsCode, qboFsCode);
sync_mode_loc = glGetUniformLocation(qbo_prog, "sync_mode");
expect_exact_loc = glGetUniformLocation(qbo_prog, "expect_exact");
is_64bit_loc = glGetUniformLocation(qbo_prog, "is_64bit");
expected_loc = glGetUniformLocation(qbo_prog, "expected");
expected_hi_loc = glGetUniformLocation(qbo_prog, "expected_hi");
}
--
2.11.0
More information about the Piglit
mailing list