diff options
Diffstat (limited to 'tests/spec/arb_query_buffer_object/qbo.c')
-rw-r--r-- | tests/spec/arb_query_buffer_object/qbo.c | 140 |
1 files changed, 12 insertions, 128 deletions
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 @@ -31,7 +31,7 @@ * - 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; @@ -48,7 +48,6 @@ 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; @@ -73,97 +72,10 @@ static const char * const sync_mode_names[] = { "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) { @@ -196,27 +108,15 @@ run_subtest(void) 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; @@ -302,21 +202,10 @@ piglit_display(void) }; 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; @@ -333,7 +222,7 @@ piglit_display(void) } 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)); } @@ -347,11 +236,13 @@ 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); @@ -362,12 +253,6 @@ piglit_init(int argc, char **argv) "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" @@ -416,7 +301,6 @@ piglit_init(int argc, char **argv) " }\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"); |