[Piglit] [PATCH 4/4] program_interface_query: add tests for getprogramresourcename
Martin Peres
martin.peres at linux.intel.com
Thu Mar 26 01:58:45 PDT 2015
On 26/03/15 10:45, Tapani Pälli wrote:
> Hi;
>
> starting with the shortest .. :)
>
> I have one addition to the test, after linking try out giving NULL for
> the name field:
>
> glGetProgramResourceName(prog, GL_UNIFORM, pos, 0, &length, NULL);
This is not really in the spec, hence why I did not add it. Pointers
should always be valid.
Anyway, better catch a bad implementation so I added it:
diff --git
a/tests/spec/arb_program_interface_query/getprogramresourcename.c
b/tests/spec/arb_program_interface_query/getprogramresourcename.c
index 9db705e..7dc3195 100755
--- a/tests/spec/arb_program_interface_query/getprogramresourcename.c
+++ b/tests/spec/arb_program_interface_query/getprogramresourcename.c
@@ -155,6 +155,12 @@ piglit_display(void)
piglit_report_subtest_result(local ? PIGLIT_PASS : PIGLIT_FAIL,
"size == 0");
+ glGetProgramResourceName(prog, GL_UNIFORM, pos, 0, &length, NULL);
+ local = piglit_check_gl_error(GL_NO_ERROR);
+ pass = pass && local;
+ piglit_report_subtest_result(local ? PIGLIT_PASS : PIGLIT_FAIL,
+ "NULL name");
+
if
(piglit_is_extension_supported("GL_ARB_shader_atomic_counters")) {
glGetProgramResourceName(prog, GL_ATOMIC_COUNTER_BUFFER, 0,
100, &length, name);
>
>
> With this addition;
> Reviewed-by: Tapani Pälli <tapani.palli at intel.com>
Added too, thanks.
>
>
> On 03/25/2015 06:01 PM, Martin Peres wrote:
>> Tests the error paths of GetProgramResourceName
>>
>> Signed-off-by: Martin Peres <martin.peres at linux.intel.com>
>> ---
>> tests/all.py | 1 +
>> .../arb_program_interface_query/CMakeLists.gl.txt | 1 +
>> .../getprogramresourcename.c | 177
>> +++++++++++++++++++++
>> 3 files changed, 179 insertions(+)
>> create mode 100755
>> tests/spec/arb_program_interface_query/getprogramresourcename.c
>>
>> diff --git a/tests/all.py b/tests/all.py
>> index 170d5b8..d0b4b09 100755
>> --- a/tests/all.py
>> +++ b/tests/all.py
>> @@ -2276,6 +2276,7 @@ with profile.group_manager(
>> g(['arb_program_interface_query-resource-query'],
>> run_concurrent=False)
>> g(['arb_program_interface_query-getprograminterfaceiv'],
>> run_concurrent=False)
>> g(['arb_program_interface_query-getprogramresourceindex'],
>> run_concurrent=False)
>> + g(['arb_program_interface_query-getprogramresourcename'],
>> run_concurrent=False)
>>
>> # Group ARB_explicit_uniform_location
>> with profile.group_manager(
>> diff --git a/tests/spec/arb_program_interface_query/CMakeLists.gl.txt
>> b/tests/spec/arb_program_interface_query/CMakeLists.gl.txt
>> index 8b3bbd9..2508342 100755
>> --- a/tests/spec/arb_program_interface_query/CMakeLists.gl.txt
>> +++ b/tests/spec/arb_program_interface_query/CMakeLists.gl.txt
>> @@ -13,3 +13,4 @@ piglit_add_executable
>> (arb_program_interface_query-resource-location resource-lo
>> piglit_add_executable (arb_program_interface_query-resource-query
>> resource-query.c)
>> piglit_add_executable
>> (arb_program_interface_query-getprograminterfaceiv
>> getprograminterfaceiv.c)
>> piglit_add_executable
>> (arb_program_interface_query-getprogramresourceindex
>> getprogramresourceindex.c)
>> +piglit_add_executable
>> (arb_program_interface_query-getprogramresourcename
>> getprogramresourcename.c)
>> diff --git
>> a/tests/spec/arb_program_interface_query/getprogramresourcename.c
>> b/tests/spec/arb_program_interface_query/getprogramresourcename.c
>> new file mode 100755
>> index 0000000..9db705e
>> --- /dev/null
>> +++ b/tests/spec/arb_program_interface_query/getprogramresourcename.c
>> @@ -0,0 +1,177 @@
>> +/*
>> + * Copyright © 2015 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 getprogramresourcename.c
>> + *
>> + * Tests the error cases of the GetProgramResourceName interface.
>> The real
>> + * functional test is resource-query.
>> + *
>> + * From the GL_ARB_program_interface_query spec:
>> + * "The command
>> + *
>> + * void GetProgramResourceName(uint program, enum
>> programInterface,
>> + * uint index, sizei bufSize, sizei
>> *length,
>> + * char *name);
>> + *
>> + * returns the name string assigned to the single active
>> resource with an
>> + * index of <index> in the interface <programInterface> of
>> program object
>> + * <program>. The error INVALID_VALUE is generated if <index>
>> is greater
>> + * than or equal to the number of entries in the active
>> resource list for
>> + * <programInterface>. The error INVALID_ENUM is generated if
>> + * <programInterface> is ATOMIC_COUNTER_BUFFER, since active
>> atomic counter
>> + * buffer resources are not assigned name strings.
>> + *
>> + * The name string assigned to the active resource identified
>> by <index> is
>> + * returned as a null-terminated string in <name>. The actual
>> number of
>> + * characters written into <name>, excluding the null
>> terminator, is
>> + * returned in <length>. If <length> is NULL, no length is
>> returned. The
>> + * maximum number of characters that may be written into
>> <name>, including
>> + * the null terminator, is specified by <bufSize>. If the
>> length of the
>> + * name string (including the null terminator) is greater than
>> <bufSize>,
>> + * the first <bufSize>-1 characters of the name string will be
>> written to
>> + * <name>, followed by a null terminator. If <bufSize> is
>> zero, no error
>> + * will be generated but no characters will be written to
>> <name>. The
>> + * length of the longest name string for <programInterface>,
>> including a
>> + * null terminator, can be queried by calling
>> GetProgramInterfaceiv with a
>> + * <pname> of MAX_NAME_LENGTH.
>> + *
>> + * [...]
>> + *
>> + * An INVALID_VALUE error is generated by GetProgramInterfaceiv,
>> + * GetProgramResourceIndex, GetProgramResourceName,
>> GetProgramResourceiv,
>> + * GetProgramResourceLocation, and
>> GetProgramResourceLocationIndex if
>> + * <program> is not the name of either a shader or program object.
>> + *
>> + * An INVALID_OPERATION error is generated by
>> GetProgramInterfaceiv,
>> + * GetProgramResourceIndex, GetProgramResourceName,
>> GetProgramResourceiv,
>> + * GetProgramResourceLocation, and
>> GetProgramResourceLocationIndex if
>> + * <program> is the name of a shader object.
>> + *
>> + * [...]
>> + *
>> + * INVALID_VALUE is generated by GetProgramResourceName if
>> <index> is
>> + * greater than or equal to the number of entries in the active
>> resource
>> + * list for <programInterface>.
>> + *
>> + * INVALID_ENUM is generated by GetProgramResourceName if
>> + * <programInterface> is ATOMIC_COUNTER_BUFFER."
>> + */
>> +
>> +#include "piglit-util-gl.h"
>> +#include "common.h"
>> +
>> +PIGLIT_GL_TEST_CONFIG_BEGIN
>> +
>> + config.supports_gl_core_version = 32;
>> +
>> +PIGLIT_GL_TEST_CONFIG_END
>> +
>> +void
>> +piglit_init(int argc, char **argv)
>> +{
>> + piglit_require_extension("GL_ARB_program_interface_query");
>> +}
>> +
>> +enum piglit_result
>> +piglit_display(void)
>> +{
>> + GLsizei length;
>> + bool pass = true, local;
>> + GLuint shader, prog;
>> + GLchar name[100];
>> + GLint pos;
>> +
>> + /* test using an unexisting program ID */
>> + glGetProgramResourceName(1337, GL_UNIFORM, 0, 100, &length, name);
>> + local = piglit_check_gl_error(GL_INVALID_VALUE);
>> + pass = pass && local;
>> + piglit_report_subtest_result(local ? PIGLIT_PASS : PIGLIT_FAIL,
>> + "Invalid program (undefined ID)");
>> +
>> + /* test using a shader ID */
>> + shader = piglit_compile_shader_text(GL_VERTEX_SHADER, vs_empty);
>> + glGetProgramResourceName(shader, GL_UNIFORM, 0, 100, &length,
>> name);
>> + local = piglit_check_gl_error(GL_INVALID_OPERATION);
>> + pass = pass && local;
>> + piglit_report_subtest_result(local ? PIGLIT_PASS : PIGLIT_FAIL,
>> + "Invalid program (call on shader)");
>> +
>> + prog = piglit_build_simple_program(vs_array, NULL);
>> + if (!piglit_link_check_status(prog)) {
>> + glDeleteProgram(prog);
>> + return PIGLIT_FAIL;
>> + }
>> +
>> + glGetProgramResourceName(prog, GL_TRUE, 0, 100, &length, name);
>> + local = piglit_check_gl_error(GL_INVALID_ENUM);
>> + pass = pass && local;
>> + piglit_report_subtest_result(local ? PIGLIT_PASS : PIGLIT_FAIL,
>> + "invalid programInterface");
>> +
>> + glGetProgramResourceName(prog, GL_UNIFORM, -1, 100, &length, name);
>> + local = piglit_check_gl_error(GL_INVALID_VALUE);
>> + pass = pass && local;
>> + piglit_report_subtest_result(local ? PIGLIT_PASS : PIGLIT_FAIL,
>> + "idx < 0");
>> +
>> + glGetProgramResourceName(prog, GL_UNIFORM, 1337, 100, &length,
>> name);
>> + local = piglit_check_gl_error(GL_INVALID_VALUE);
>> + pass = pass && local;
>> + piglit_report_subtest_result(local ? PIGLIT_PASS : PIGLIT_FAIL,
>> + "idx > #entries");
>> +
>> + pos = glGetProgramResourceIndex(prog, GL_UNIFORM, "sa[0].world");
>> +
>> + glGetProgramResourceName(prog, GL_UNIFORM, pos, -1, &length, name);
>> + local = piglit_check_gl_error(GL_INVALID_VALUE);
>> + pass = pass && local;
>> + piglit_report_subtest_result(local ? PIGLIT_PASS : PIGLIT_FAIL,
>> + "size < 0");
>> +
>> + glGetProgramResourceName(prog, GL_UNIFORM, pos, 0, &length, name);
>> + local = piglit_check_gl_error(GL_NO_ERROR);
>> + pass = pass && local;
>> + piglit_report_subtest_result(local ? PIGLIT_PASS : PIGLIT_FAIL,
>> + "size == 0");
>> +
>> + if
>> (piglit_is_extension_supported("GL_ARB_shader_atomic_counters")) {
>> + glGetProgramResourceName(prog, GL_ATOMIC_COUNTER_BUFFER, 0,
>> + 100, &length, name);
>> + local = piglit_check_gl_error(GL_INVALID_ENUM);
>> + pass = pass && local;
>> + piglit_report_subtest_result(local ? PIGLIT_PASS : PIGLIT_FAIL,
>> + "GL_ATOMIC_COUNTER_BUFFER");
>> + } else {
>> + piglit_report_subtest_result(PIGLIT_SKIP,
>> + "GL_ATOMIC_COUNTER_BUFFER");
>> + }
>> +
>> + glGetProgramResourceName(prog, GL_UNIFORM, pos, 0, NULL, name);
>> + local = piglit_check_gl_error(GL_NO_ERROR);
>> + pass = pass && local;
>> + piglit_report_subtest_result(local ? PIGLIT_PASS : PIGLIT_FAIL,
>> + "length == NULL");
>> +
>> + return pass ? PIGLIT_PASS : PIGLIT_FAIL;
>> +}
>>
More information about the Piglit
mailing list