[Piglit] [PATCH] ext_disjoint_timer_query-simple: basic API test
Tapani Pälli
tapani.palli at intel.com
Wed Nov 22 12:13:17 UTC 2017
On 11/21/2017 10:42 PM, Eric Anholt wrote:
> Tapani Pälli <tapani.palli at intel.com> writes:
>
>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>> ---
>> tests/spec/CMakeLists.txt | 1 +
>> .../ext_disjoint_timer_query/CMakeLists.gles2.txt | 7 ++
>> tests/spec/ext_disjoint_timer_query/CMakeLists.txt | 1 +
>> tests/spec/ext_disjoint_timer_query/simple-query.c | 135 +++++++++++++++++++++
>
> Don't forget to update all.py, or nobody will run your new test :)
True, I always forget this, seems that I forgot it for
ext_occlusion_query_boolean too.
>> 4 files changed, 144 insertions(+)
>> create mode 100644 tests/spec/ext_disjoint_timer_query/CMakeLists.gles2.txt
>> create mode 100644 tests/spec/ext_disjoint_timer_query/CMakeLists.txt
>> create mode 100644 tests/spec/ext_disjoint_timer_query/simple-query.c
>>
>> diff --git a/tests/spec/CMakeLists.txt b/tests/spec/CMakeLists.txt
>> index 99fa95f5f..b53411954 100644
>> --- a/tests/spec/CMakeLists.txt
>> +++ b/tests/spec/CMakeLists.txt
>> @@ -169,3 +169,4 @@ add_subdirectory (intel_conservative_rasterization)
>> add_subdirectory (arb_post_depth_coverage)
>> add_subdirectory (arb_fragment_shader_interlock)
>> add_subdirectory (ext_occlusion_query_boolean)
>> +add_subdirectory (ext_disjoint_timer_query)
>> diff --git a/tests/spec/ext_disjoint_timer_query/CMakeLists.gles2.txt b/tests/spec/ext_disjoint_timer_query/CMakeLists.gles2.txt
>> new file mode 100644
>> index 000000000..b8a07153e
>> --- /dev/null
>> +++ b/tests/spec/ext_disjoint_timer_query/CMakeLists.gles2.txt
>> @@ -0,0 +1,7 @@
>> +link_libraries (
>> + piglitutil_${piglit_target_api}
>> +)
>> +
>> +piglit_add_executable (ext_disjoint_timer_query-simple simple-query.c)
>> +
>> +# vim: ft=cmake:
>> diff --git a/tests/spec/ext_disjoint_timer_query/CMakeLists.txt b/tests/spec/ext_disjoint_timer_query/CMakeLists.txt
>> new file mode 100644
>> index 000000000..144a306f4
>> --- /dev/null
>> +++ b/tests/spec/ext_disjoint_timer_query/CMakeLists.txt
>> @@ -0,0 +1 @@
>> +piglit_include_target_api()
>> diff --git a/tests/spec/ext_disjoint_timer_query/simple-query.c b/tests/spec/ext_disjoint_timer_query/simple-query.c
>> new file mode 100644
>> index 000000000..4f5e7392b
>> --- /dev/null
>> +++ b/tests/spec/ext_disjoint_timer_query/simple-query.c
>> @@ -0,0 +1,135 @@
>> +/*
>> + * Copyright © 2017 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
>> + * Tests GL_EXT_disjoint_timer_query extension. Test does not to cover
>> + * the whole API as that is tested throughly by existing query tests for
>> + * desktop GL. Main objective is to test that timer queries work on OpenGL
>> + * ES 2.0 and we can get GL_GPU_DISJOINT_EXT value from the driver.
>> + */
>> +
>> +#include "piglit-util-gl.h"
>> +
>> +PIGLIT_GL_TEST_CONFIG_BEGIN
>> + config.supports_gl_es_version = 20;
>> + config.window_visual = PIGLIT_GL_VISUAL_RGBA;
>> +PIGLIT_GL_TEST_CONFIG_END
>> +
>> +static const char vs_source[] =
>> + "attribute vec2 piglit_vertex;\n"
>> + "\n"
>> + "void main()\n"
>> + "{\n"
>> + " gl_Position = vec4(piglit_vertex, 0.0, 1.0);\n"
>> + "}\n";
>> +
>> +static const char fs_source[] =
>> + "void main()\n"
>> + "{\n"
>> + " gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);\n"
>> + "}\n";
>> +
>> +enum piglit_result
>> +piglit_display(void)
>> +{
>> + GLuint query;
>> + GLint current, disjoint;
>> + GLuint64 time = 0;
>> +
>> + glGenQueriesEXT(1, &query);
>> +
>> + if (!piglit_check_gl_error(GL_NO_ERROR))
>> + piglit_report_result(PIGLIT_FAIL);
>> +
>> + /* Clear disjoint error state. */
>> + glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint);
>> +
>> + if (!piglit_check_gl_error(GL_NO_ERROR))
>> + piglit_report_result(PIGLIT_FAIL);
>> +
>> + glBeginQueryEXT(GL_TIME_ELAPSED_EXT, query);
>> +
>> + if (!piglit_check_gl_error(GL_NO_ERROR))
>> + piglit_report_result(PIGLIT_FAIL);
>> +
>> + /* "The error INVALID_OPERATION is generated if QueryCounterEXT is
>> + * called on a query object that is already in use inside a
>> + * BeginQueryEXT/EndQueryEXT."
>> + */
>
> Some spaces instead of tabs here
will fix
>> + glQueryCounterEXT(query, GL_TIMESTAMP_EXT);
>> +
>> + if (!piglit_check_gl_error(GL_INVALID_OPERATION))
>> + piglit_report_result(PIGLIT_FAIL);
>> +
>> + if (!glIsQueryEXT(query))
>> + piglit_report_result(PIGLIT_FAIL);
>> +
>> + glGetQueryivEXT(GL_TIME_ELAPSED_EXT, GL_CURRENT_QUERY_EXT,
>> + ¤t);
>> +
>> + if (current != query)
>> + piglit_report_result(PIGLIT_FAIL);
>> +
>> + GLint prog = piglit_build_simple_program(vs_source, fs_source);
>> + glUseProgram(prog);
>> +
>> + piglit_draw_rect(-1, -1, 2, 2);
>> +
>> + glDeleteProgram(prog);
>> +
>> + glEndQueryEXT(GL_TIME_ELAPSED_EXT);
>> +
>> + if (!piglit_check_gl_error(GL_NO_ERROR))
>> + piglit_report_result(PIGLIT_FAIL);
>> +
>> + glGetQueryObjectui64vEXT(query, GL_QUERY_RESULT_EXT, &time);
>> +
>> + if (!piglit_check_gl_error(GL_NO_ERROR))
>> + piglit_report_result(PIGLIT_FAIL);
>> +
>> + /* Check if if disjoint operation occured. */
>> + glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint);
>> +
>> + if (!piglit_check_gl_error(GL_NO_ERROR))
>> + piglit_report_result(PIGLIT_FAIL);
>> +
>> + /* If no disjoint operation, then we should have a
>> + * 'sensible value' in time, expecting more than 0.
>> + */
>> + if (disjoint == 0 && time <= 0)
>> + piglit_report_result(PIGLIT_FAIL);
>> +
>> + glDeleteQueriesEXT(1, &query);
>> +
>> + if (!piglit_check_gl_error(GL_NO_ERROR))
>> + piglit_report_result(PIGLIT_FAIL);
>
> I'd drop all but the last of this piglit_check_gl_error(GL_NO_ERROR)
> check series.
>
OK, that is fine for me.
// Tapani
More information about the Piglit
mailing list