[Piglit] [PATCH 1/6] Simple framework for GLSL linker tests
Ian Romanick
idr at freedesktop.org
Mon Oct 31 12:54:15 PDT 2011
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.
More information about the Piglit
mailing list