[Piglit] [PATCH 1/6] Simple framework for GLSL linker tests

Chad Versace chad at chad-versace.us
Mon Oct 31 13:17:00 PDT 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 10/31/2011 12:54 PM, Ian Romanick wrote:
> On 10/31/2011 11:49 AM, Chad Versace wrote:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> On 10/28/2011 03:26 PM, Ian Romanick wrote:
>>> From: Ian Romanick<ian.d.romanick at intel.com>
>>>
>>> Signed-off-by: Ian Romanick<ian.d.romanick at intel.com>
>>> ---
>>>   tests/shaders/CMakeLists.gl.txt |    1 +
>>>   tests/shaders/glsl-link-test.c  |  126 +++++++++++++++++++++++++++++++++++++++
>>>   2 files changed, 127 insertions(+), 0 deletions(-)
>>>   create mode 100644 tests/shaders/glsl-link-test.c
>>>
>>> diff --git a/tests/shaders/CMakeLists.gl.txt b/tests/shaders/CMakeLists.gl.txt
>>> index 3dce256..1bf73e8 100644
>>> --- a/tests/shaders/CMakeLists.gl.txt
>>> +++ b/tests/shaders/CMakeLists.gl.txt
>>> @@ -126,6 +126,7 @@ add_executable (glsl-link-initializer-06 glsl-link-initializer-06.c)
>>>   add_executable (glsl-link-invariant-01 glsl-link-invariant-01.c)
>>>   add_executable (glsl-link-centroid-01 glsl-link-centroid-01.c)
>>>   add_executable (glsl-link-struct-array glsl-link-struct-array.c)
>>> +add_executable (glsl-link-test glsl-link-test.c)
>>>   add_executable (gpu_shader4_attribs gpu_shader4_attribs.c)
>>>   add_executable (vp-address-01 vp-address-01.c)
>>>   add_executable (vp-address-02 vp-address-02.c)
>>> diff --git a/tests/shaders/glsl-link-test.c b/tests/shaders/glsl-link-test.c
>>> new file mode 100644
>>> index 0000000..7e252df
>>> --- /dev/null
>>> +++ b/tests/shaders/glsl-link-test.c
>>> @@ -0,0 +1,126 @@
>>> +/*
>>> + * Copyright © 2011 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 glsl-link-test.c
>>> + * Try to link a set of shaders, check if the result matches the expectation
>>> + *
>>> + * \author Ian Romanick
>>> + */
>>> +
>>> +#include "piglit-util.h"
>>> +
>>> +int piglit_width = 100, piglit_height = 100;
>>> +int piglit_window_mode = GLUT_RGB | GLUT_DOUBLE;
>>> +
>>> +enum piglit_result
>>> +piglit_display(void)
>>> +{
>>> +    return PIGLIT_FAIL;
>>> +}
>>> +
>>> +void piglit_init(int argc, char **argv)
>>> +{
>>> +    GLint program;
>>> +    bool expect;
>>> +    bool result;
>>> +    unsigned i;
>>> +    const char *invalid_file = NULL;
>>> +
>>> +    if (!GLEW_VERSION_2_0) {
>>> +        printf("Requires OpenGL 2.0\n");
>>> +        piglit_report_result(PIGLIT_SKIP);
>>> +    }
>>> +
>>> +    piglit_require_GLSL();
>>> +    program = piglit_CreateProgram();
>>> +
>>> +    for (i = 1; i<  argc; i++) {
>>> +        size_t len;
>>> +        GLint shader;
>>> +        GLenum target;
>>> +
>>> +        if (strcmp(argv[i], "pass") == 0) {
>>> +            expect = true;
>>> +            break;
>>> +        }
>>> +
>>> +        if (strcmp(argv[i], "fail") == 0) {
>>> +            expect = false;
>>> +            break;
>>> +        }
>>
>> There is undefined behavior here. If one forgets to give "pass" or "fail" on
>> the command line, then 'expect' is undefined. In that case, the test should
>> fail with in informative message.
> 
> That should get caught by the 'if (i == argc)' check after the loop.
> 
>> Also, it should be an error if a user accidentally gives more than one
>> expected result, like this.
>>     glsl-link-test pass a.vert b.vert c.vert fail
> 
> I can do that.

Oops. I failed to see the 'if (i == argc)' check. I don't see any problems now,
so this is
Reviewed-by: Chad Versace <chad at chad-versace.us>

- -- 
Chad Versace
chad at chad-versace.us
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQIcBAEBAgAGBQJOrwI7AAoJEAIvNt057x8ilKIP/3qc4IeD/eW41oxor+5a6pil
siE4Pt0BRWHPqzuqjQlWkuK5b2HrHAnJSc8iqxZD+lORJjiGQErGNtwbJc5aHJIo
ElUWYirQA0qZcSAuKMVcAvELlJAC0LIUNvLip9DiG2wKnURiax9PEA4KaLQin6cP
YEwP84BW8tZviUmQnjvOb7yPVfMFclZLuVmqNX9Reki8P3InPB97MBEVir4uUCEb
15NGbrAmN7oEztkf5s8yFtfVX3hOUJdgHwEfOxYP/mPhDmiTHirkOAP9kaxRD/s4
Gb5iJ/H1CkaI5gvPYhZYGZvDFiCqqWFTyf39HESaYXHHaXS6kYqEZC/88EZf0DhE
KfJtoBin2BjuUxszHb8nD63AkmMYrfE/a+Rk3gJGdf6LXVYPZJfjYq4lBQqD939c
W1eEilcNobRTiluH0Y+v6FvHBTAJAiCMKjVRFG005y9/PvwuLxAcckmlilthnKHy
Kl3LfNp6GIRiUVEc0Tr9vjIfvqhIFIJ3lCoS7touBCr49j/h7mRMo8q7uWRxxWDC
ayMaiH6LHT0NNSpt6mpJZ6gbC8FfWutlyPNddmBY+cIzbZhPHM/I47/JqSwAABoS
6P2W7WCASGd4yldiQv8/to//ovPDTBgitqdPe5Zjg3ibE1UPJ1oEd9dPwVqUkvE3
UVwzn5oQYkparXR7lGBz
=m3pz
-----END PGP SIGNATURE-----


More information about the Piglit mailing list