v2: pull in all.py change v3: [email protected]: expected range from 2 - 4 Use new concurrent for all.py
Signed-off-by: Ben Widawsky <[email protected]> --- tests/all.py | 1 + .../CMakeLists.gl.txt | 2 + .../pipeline_stats_vert_adj.c | 145 +++++++++++++++++++++ .../arb_pipeline_statistics_query/pipestat_help.c | 17 ++- .../arb_pipeline_statistics_query/pipestat_help.h | 2 + 5 files changed, 165 insertions(+), 2 deletions(-) create mode 100644 tests/spec/arb_pipeline_statistics_query/pipeline_stats_vert_adj.c diff --git a/tests/all.py b/tests/all.py index 10fbd4d..a19c905 100644 --- a/tests/all.py +++ b/tests/all.py @@ -3767,6 +3767,7 @@ add_concurrent_test(ext_polygon_offset_clamp, ['ext_polygon_offset_clamp-dlist'] arb_pipeline_statistics_query = {} spec['ARB_pipeline_statistics_query'] = arb_pipeline_statistics_query add_concurrent_test(arb_pipeline_statistics_query, ['arb_pipeline_statistics_query-vert']) +add_concurrent_test(arb_pipeline_statistics_query, ['arb_pipeline_statistics_query-vert_adj']) # group glslparsertest ------------------------------------------------------ glslparsertest = {} diff --git a/tests/spec/arb_pipeline_statistics_query/CMakeLists.gl.txt b/tests/spec/arb_pipeline_statistics_query/CMakeLists.gl.txt index d6c11b2..ec23c91 100644 --- a/tests/spec/arb_pipeline_statistics_query/CMakeLists.gl.txt +++ b/tests/spec/arb_pipeline_statistics_query/CMakeLists.gl.txt @@ -18,5 +18,7 @@ add_library (pipestat_help STATIC pipestat_help.c) piglit_add_executable (arb_pipeline_statistics_query-vert pipeline_stats_vert.c) target_link_libraries (arb_pipeline_statistics_query-vert pipestat_help) +piglit_add_executable (arb_pipeline_statistics_query-vert_adj pipeline_stats_vert_adj.c) +target_link_libraries (arb_pipeline_statistics_query-vert_adj pipestat_help) # vim: ft=cmake diff --git a/tests/spec/arb_pipeline_statistics_query/pipeline_stats_vert_adj.c b/tests/spec/arb_pipeline_statistics_query/pipeline_stats_vert_adj.c new file mode 100644 index 0000000..15b4375 --- /dev/null +++ b/tests/spec/arb_pipeline_statistics_query/pipeline_stats_vert_adj.c @@ -0,0 +1,145 @@ +/* + * Copyright © 2014 Intel Corporation + * + * 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 pipeline_stats_vert_adj.c + * + * This test verifies that the vertex shader related tokens of + * ARB_pipeline_statistics_query() work as expected. Much of this was derived + * from ignore-adjacent-vertices.c + * + * 10.11 + * In case of primitive types with adjacency information (see sections 10.1.11 + * through 10.1.14) only the vertices belonging to the main primitive are + * counted but not the adjacent vertices. In case of line loop primitives + * implementations are allowed to count the first vertex twice for the + * purposes of VERTICES_SUBMITTED_ARB queries. Additionally, vertices + * corresponding to incomplete primitives may or may not be counted. + * + * I read this as: the only definite thing we can test across implementation is + * discarding adjacent vertices. + */ + +#include "piglit-util-gl.h" +#include "pipestat_help.h" + +PIGLIT_GL_TEST_CONFIG_BEGIN +/* I believe the adjacency tokens require 3.2 GS */ + config.supports_gl_compat_version = 32; + config.supports_gl_core_version = 32; + config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGBA; +PIGLIT_GL_TEST_CONFIG_END + +static const char *vs_src = + "#version 130 \n" + " \n" + "in vec4 piglit_vertex; \n" + "void main() \n" + "{ \n" + " gl_Position = piglit_vertex;\n" + "} \n"; + +static const char *fs_src = + "#version 110 \n" + " \n" + "void main() \n" + "{ \n" + " gl_FragColor = vec4(0, 1, 0, 1); \n" + "} \n"; + +static struct query queries[] = { + { + .query = GL_PRIMITIVES_SUBMITTED_ARB, + .name = "GL_PRIMITIVES_SUBMITTED_ARB", + .min = 1}, /* Going to emit a line */ + { + .query = GL_VERTICES_SUBMITTED_ARB, + .name = "GL_VERTICES_SUBMITTED_ARB", + .min = 2, + .max = 4}, /*(26) Should VERTICES_SUBMITTED_ARB count adjacent + vertices in case of primitives with adjacency? */ + { + .query = GL_VERTEX_SHADER_INVOCATIONS_ARB, + .name = "GL_VERTEX_SHADER_INVOCATIONS_ARB", + .min = 2, + .max = 4} +}; + +static void +draw(void) +{ + /* 4 components, 2 verts for a line, and 1 vert for adjacency per vertex + * that makes up the line. The values really don't matter for this. + */ + static const float vertex_data[] = { + 0.0f, 0.0f, 0.0f, 1.0f, /* Adjacent vert */ + 0.2f, 0.5f, 0.0f, 1.0f, /* Vert 0 */ + 0.8f, 0.5f, 0.0f, 1.0f, /* Vert 1 */ + 1.0f, 0.0f, 0.0f, 1.0f /* Adjacent vert */ + }; + + glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_data), vertex_data, GL_STREAM_DRAW); + glDrawArrays(GL_LINES_ADJACENCY, 0, 4); +#ifdef DISPLAY + piglit_present_results(); +#endif +} + +enum piglit_result +piglit_display(void) +{ + return do_query_func(queries, ARRAY_SIZE(queries), draw); +} + +void +piglit_init(int argc, char *argv[]) +{ + GLuint prog, array, buf; + + glGenVertexArrays(1, &array); + glBindVertexArray(array); + glGenBuffers(1, &buf); + glBindBuffer(GL_ARRAY_BUFFER, buf); + + prog = piglit_build_simple_program(vs_src, fs_src); + + glVertexAttribPointer(0, /* index */ + 4, /* size */ + GL_FLOAT, /* type */ + GL_FALSE, /* normalized */ + 0, /* stride */ + NULL /* pointer */); + glEnableVertexAttribArray(0); + +#ifndef DISPLAY + glEnable(GL_RASTERIZER_DISCARD); +#endif + + do_query_init(queries, ARRAY_SIZE(queries)); + + if (!piglit_link_check_status(prog)) { + glDeleteProgram(prog); + piglit_report_result(PIGLIT_FAIL); + } + + glUseProgram(prog); +} diff --git a/tests/spec/arb_pipeline_statistics_query/pipestat_help.c b/tests/spec/arb_pipeline_statistics_query/pipestat_help.c index 2f1444a..99180cd 100644 --- a/tests/spec/arb_pipeline_statistics_query/pipestat_help.c +++ b/tests/spec/arb_pipeline_statistics_query/pipestat_help.c @@ -63,7 +63,8 @@ do_query_init(struct query *queries, const int count) } enum piglit_result -do_query(const struct query *queries, const int count) +do_query_func(const struct query *queries, const int count, + void (*draw)(void)) { const float green[] = {0, 1, 0, 0}; int i; @@ -75,7 +76,7 @@ do_query(const struct query *queries, const int count) for (i = 0; i < count; i++) begin_query(&queries[i]); - piglit_draw_rect(-1, -1, 2, 2); + draw(); for (i = 0; i < count; i++) end_query(&queries[i]); @@ -96,3 +97,15 @@ do_query(const struct query *queries, const int count) return PIGLIT_PASS; } + +static void +default_draw(void) +{ + piglit_draw_rect(-1, -1, 2, 2); +} + +enum piglit_result +do_query(const struct query *queries, const int count) +{ + return do_query_func(queries, count, default_draw); +} diff --git a/tests/spec/arb_pipeline_statistics_query/pipestat_help.h b/tests/spec/arb_pipeline_statistics_query/pipestat_help.h index ac5d13c..ddbc091 100644 --- a/tests/spec/arb_pipeline_statistics_query/pipestat_help.h +++ b/tests/spec/arb_pipeline_statistics_query/pipestat_help.h @@ -28,3 +28,5 @@ end_query(const struct query *q) void do_query_init(struct query *queries, const int count); enum piglit_result do_query(const struct query *queries, const int count); +enum piglit_result do_query_func(const struct query *queries, + const int count, void (*draw)(void)); -- 2.3.0 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
