[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