[Piglit] [PATCH] glsl: fix link empty program tests

Tapani Pälli tapani.palli at intel.com
Mon Jan 25 04:28:42 PST 2016



On 01/25/2016 02:25 PM, Tapani Pälli wrote:
>
>
> On 01/25/2016 01:43 PM, Timothy Arceri wrote:
>> Also move them out of the shaders folder.
>>
>>  From Section 7.3 (PROGRAM OBJECTS) of the OpenGL 4.5 spec:
>>
>>     "Linking can fail for a variety of reasons as specified in the
>>     OpenGL Shading Language Specification, as well as any of the
>>     following reasons:
>>
>>      - No shader objects are attached to program."
>
>
> Note that this is only in core spec, compatibility spec does not mention
> this restriction. I'm not sure what's the reason for this difference.

Answering to myself, I think it's is explained here:
https://cvs.khronos.org/bugzilla/show_bug.cgi?id=12215

>
>> ---
>>   tests/shaders/CMakeLists.gl.txt             |   2 -
>>   tests/shaders/glsl-link-empty-prog-01.c     |  53 -------------
>>   tests/shaders/glsl-link-empty-prog-02.c     | 115
>> ----------------------------
>>   tests/spec/gl-2.0/CMakeLists.gl.txt         |   2 +
>>   tests/spec/gl-2.0/glsl-link-empty-prog-01.c |  53 +++++++++++++
>>   tests/spec/gl-2.0/glsl-link-empty-prog-02.c | 115
>> ++++++++++++++++++++++++++++
>>   6 files changed, 170 insertions(+), 170 deletions(-)
>>   delete mode 100644 tests/shaders/glsl-link-empty-prog-01.c
>>   delete mode 100644 tests/shaders/glsl-link-empty-prog-02.c
>>   create mode 100644 tests/spec/gl-2.0/glsl-link-empty-prog-01.c
>>   create mode 100644 tests/spec/gl-2.0/glsl-link-empty-prog-02.c
>>
>> diff --git a/tests/shaders/CMakeLists.gl.txt
>> b/tests/shaders/CMakeLists.gl.txt
>> index abbe14c..42c6fae 100644
>> --- a/tests/shaders/CMakeLists.gl.txt
>> +++ b/tests/shaders/CMakeLists.gl.txt
>> @@ -111,8 +111,6 @@ piglit_add_executable (glsl-vs-user-varying-ff
>> glsl-vs-user-varying-ff.c)
>>   piglit_add_executable (glsl-light-model glsl-light-model.c)
>>   piglit_add_executable (glsl-link-bug30552 glsl-link-bug30552.c)
>>   piglit_add_executable (glsl-link-bug38015 glsl-link-bug38015.c)
>> -piglit_add_executable (glsl-link-empty-prog-01
>> glsl-link-empty-prog-01.c)
>> -piglit_add_executable (glsl-link-empty-prog-02
>> glsl-link-empty-prog-02.c)
>>   piglit_add_executable (glsl-link-initializer-03
>> glsl-link-initializer-03.c)
>>   piglit_add_executable (glsl-link-test glsl-link-test.c)
>>   piglit_add_executable (gpu_shader4_attribs gpu_shader4_attribs.c)
>> diff --git a/tests/shaders/glsl-link-empty-prog-01.c
>> b/tests/shaders/glsl-link-empty-prog-01.c
>> deleted file mode 100644
>> index 88c24d7..0000000
>> --- a/tests/shaders/glsl-link-empty-prog-01.c
>> +++ /dev/null
>> @@ -1,53 +0,0 @@
>> -/*
>> - * Copyright © 2010 Török Edwin
>> - *
>> - * 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.
>> - */
>> -
>> -#include "piglit-util-gl.h"
>> -
>> -PIGLIT_GL_TEST_CONFIG_BEGIN
>> -
>> -    config.supports_gl_compat_version = 10;
>> -
>> -    config.window_visual = PIGLIT_GL_VISUAL_RGB |
>> PIGLIT_GL_VISUAL_DOUBLE;
>> -
>> -PIGLIT_GL_TEST_CONFIG_END
>> -
>> -enum piglit_result piglit_display(void)
>> -{
>> -    GLint objID = glCreateProgram();
>> -    /* check that it doesn't crash when linking empty shader */
>> -    glLinkProgram(objID);
>> -    glValidateProgram(objID);
>> -    if (!piglit_link_check_status(objID))
>> -    piglit_report_result(PIGLIT_FAIL);
>> -    glUseProgram(objID);
>> -    glUseProgram(0);
>> -    glDeleteProgram(objID);
>> -    piglit_report_result(PIGLIT_PASS);
>> -    return PIGLIT_PASS;
>> -}
>> -
>> -void
>> -piglit_init(int argc, char **argv)
>> -{
>> -    piglit_require_gl_version(20);
>> -}
>> diff --git a/tests/shaders/glsl-link-empty-prog-02.c
>> b/tests/shaders/glsl-link-empty-prog-02.c
>> deleted file mode 100644
>> index c684047..0000000
>> --- a/tests/shaders/glsl-link-empty-prog-02.c
>> +++ /dev/null
>> @@ -1,115 +0,0 @@
>> -/*
>> - * Copyright © 2010 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-empty-prog-02.c
>> - *
>> - * Verify behavior when a program object with no shaders attached is
>> used.
>> - * Neither the OpenGL spec nor the GLSL spec are explicit about what
>> happens
>> - * in this case.  However, the correct behavior can be infered from a
>> few bits
>> - * in the spec.  Section 2.15 of the GL 2.1 spec says:
>> - *
>> - *     "When the program object currently in use includes a vertex
>> shader, its
>> - *     vertex shader is considered active and is used to process
>> vertices. If
>> - *     the program object has no vertex shader, or no program object is
>> - *     currently in use, the fixed-function method for processing
>> vertices is
>> - *     used instead."
>> - *
>> - * Section 3.11 of the OpenGL 2.1 spec says:
>> - *
>> - *     "When the program object currently in use includes a fragment
>> shader,
>> - *     its fragment shader is considered active, and is used to process
>> - *     fragments. If the program object has no fragment shader, or no
>> program
>> - *     object is currently in use, the fixed-function fragment
>> processing
>> - *     operations described in previous sections are used."
>> - *
>> - * If there is no vertex shader in the program, fixed-function vertex
>> state is
>> - * used.  If there is no fragment shader in the program, fixed-function
>> - * fragment state is used.  If there is no vertex shader and no fragment
>> - * shader in the program, fixed-function vertex and fragment state
>> are used.
>> - *
>> - * This test configures some simple fixed-function vertex and
>> fragment state.
>> - * It verifies that this state is used when an "empty" program is
>> active.
>> - *
>> - * \author Ian Romanick <ian.d.romanick at intel.com>
>> - */
>> -
>> -#include "piglit-util-gl.h"
>> -
>> -PIGLIT_GL_TEST_CONFIG_BEGIN
>> -
>> -    config.supports_gl_compat_version = 10;
>> -
>> -    config.window_visual = PIGLIT_GL_VISUAL_RGB |
>> PIGLIT_GL_VISUAL_DOUBLE;
>> -
>> -PIGLIT_GL_TEST_CONFIG_END
>> -
>> -static GLuint prog = 0;
>> -static GLuint tex = 0;
>> -
>> -static const float black[4] = { 0.0, 0.0, 0.0, 1.0 };
>> -static const float white[4] = { 1.0, 1.0, 1.0, 1.0 };
>> -static const float green[4] = { 0.0, 1.0, 0.0, 1.0 };
>> -
>> -enum piglit_result
>> -piglit_display(void)
>> -{
>> -    GLboolean pass = GL_TRUE;
>> -
>> -    glColor4fv(green);
>> -    piglit_draw_rect_tex(0.0, 0.0,
>> -                 (float) piglit_width, (float) piglit_height,
>> -                 0.0, 0.0, 1.0, 1.0);
>> -
>> -    pass &= piglit_probe_pixel_rgb(0, 0, black);
>> -    pass &= piglit_probe_pixel_rgb(piglit_width - 1, 0, green);
>> -    pass &= piglit_probe_pixel_rgb(0, piglit_height - 1, green);
>> -    pass &= piglit_probe_pixel_rgb(piglit_width - 1, piglit_height - 1,
>> -                       black);
>> -
>> -    piglit_present_results();
>> -
>> -    return pass ? PIGLIT_PASS : PIGLIT_FAIL;
>> -}
>> -
>> -void
>> -piglit_init(int argc, char **argv)
>> -{
>> -    piglit_require_gl_version(20);
>> -
>> -    prog = glCreateProgram();
>> -
>> -    glLinkProgram(prog);
>> -    if (!piglit_link_check_status(prog))
>> -        piglit_report_result(PIGLIT_FAIL);
>> -
>> -    glUseProgram(prog);
>> -
>> -    glGenTextures(1, &tex);
>> -    glBindTexture(GL_TEXTURE_2D, tex);
>> -    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
>> -    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
>> -    glEnable(GL_TEXTURE_2D);
>> -    piglit_checkerboard_texture(tex, 0, 16, 16, 2, 2, black, white);
>> -
>> -    piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
>> -}
>> diff --git a/tests/spec/gl-2.0/CMakeLists.gl.txt
>> b/tests/spec/gl-2.0/CMakeLists.gl.txt
>> index 20b315a..f847df4 100644
>> --- a/tests/spec/gl-2.0/CMakeLists.gl.txt
>> +++ b/tests/spec/gl-2.0/CMakeLists.gl.txt
>> @@ -13,6 +13,8 @@ piglit_add_executable (vertex-program-two-side
>> vertex-program-two-side.c)
>>   piglit_add_executable (gl-2.0-edgeflag edgeflag.c)
>>   piglit_add_executable (gl-2.0-edgeflag-immediate edgeflag-immediate.c)
>>   piglit_add_executable (gl-2.0-large-point-fs large-point-fs.c)
>> +piglit_add_executable (gl-2.0-link-empty-prog-01
>> glsl-link-empty-prog-01.c)
>> +piglit_add_executable (gl-2.0-link-empty-prog-02
>> glsl-link-empty-prog-02.c)
>>   piglit_add_executable (gl-2.0-two-sided-stencil two-sided-stencil.c)
>>   piglit_add_executable (gl-2.0-vertexattribpointer
>> vertexattribpointer.c)
>>   piglit_add_executable (gl-2.0-vertex-const-attr vertex-const-attr.c)
>> diff --git a/tests/spec/gl-2.0/glsl-link-empty-prog-01.c
>> b/tests/spec/gl-2.0/glsl-link-empty-prog-01.c
>> new file mode 100644
>> index 0000000..ec3c688
>> --- /dev/null
>> +++ b/tests/spec/gl-2.0/glsl-link-empty-prog-01.c
>> @@ -0,0 +1,53 @@
>> +/*
>> + * Copyright © 2010 Török Edwin
>> + *
>> + * 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.
>> + */
>> +
>> +#include "piglit-util-gl.h"
>> +
>> +PIGLIT_GL_TEST_CONFIG_BEGIN
>> +
>> +    config.supports_gl_compat_version = 10;
>> +
>> +    config.window_visual = PIGLIT_GL_VISUAL_RGB |
>> PIGLIT_GL_VISUAL_DOUBLE;
>> +
>> +PIGLIT_GL_TEST_CONFIG_END
>> +
>> +enum piglit_result piglit_display(void)
>> +{
>> +    GLint objID = glCreateProgram();
>> +    /* check that it doesn't crash when linking empty shader */
>> +    glLinkProgram(objID);
>> +    if (piglit_link_check_status(objID))
>> +    piglit_report_result(PIGLIT_FAIL);
>> +    glValidateProgram(objID);
>> +    glUseProgram(objID);
>> +    glUseProgram(0);
>> +    glDeleteProgram(objID);
>> +    piglit_report_result(PIGLIT_PASS);
>> +    return PIGLIT_PASS;
>> +}
>> +
>> +void
>> +piglit_init(int argc, char **argv)
>> +{
>> +    piglit_require_gl_version(20);
>> +}
>> diff --git a/tests/spec/gl-2.0/glsl-link-empty-prog-02.c
>> b/tests/spec/gl-2.0/glsl-link-empty-prog-02.c
>> new file mode 100644
>> index 0000000..62c46fb
>> --- /dev/null
>> +++ b/tests/spec/gl-2.0/glsl-link-empty-prog-02.c
>> @@ -0,0 +1,115 @@
>> +/*
>> + * Copyright © 2010 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-empty-prog-02.c
>> + *
>> + * Verify behavior when a program object with no shaders attached is
>> used.
>> + * Neither the OpenGL spec nor the GLSL spec are explicit about what
>> happens
>> + * in this case.  However, the correct behavior can be infered from a
>> few bits
>> + * in the spec.  Section 2.15 of the GL 2.1 spec says:
>> + *
>> + *     "When the program object currently in use includes a vertex
>> shader, its
>> + *     vertex shader is considered active and is used to process
>> vertices. If
>> + *     the program object has no vertex shader, or no program object is
>> + *     currently in use, the fixed-function method for processing
>> vertices is
>> + *     used instead."
>> + *
>> + * Section 3.11 of the OpenGL 2.1 spec says:
>> + *
>> + *     "When the program object currently in use includes a fragment
>> shader,
>> + *     its fragment shader is considered active, and is used to process
>> + *     fragments. If the program object has no fragment shader, or no
>> program
>> + *     object is currently in use, the fixed-function fragment
>> processing
>> + *     operations described in previous sections are used."
>> + *
>> + * If there is no vertex shader in the program, fixed-function vertex
>> state is
>> + * used.  If there is no fragment shader in the program, fixed-function
>> + * fragment state is used.  If there is no vertex shader and no fragment
>> + * shader in the program, fixed-function vertex and fragment state
>> are used.
>> + *
>> + * This test configures some simple fixed-function vertex and
>> fragment state.
>> + * It verifies that this state is used when an "empty" program is
>> active.
>> + *
>> + * \author Ian Romanick <ian.d.romanick at intel.com>
>> + */
>> +
>> +#include "piglit-util-gl.h"
>> +
>> +PIGLIT_GL_TEST_CONFIG_BEGIN
>> +
>> +    config.supports_gl_compat_version = 10;
>> +
>> +    config.window_visual = PIGLIT_GL_VISUAL_RGB |
>> PIGLIT_GL_VISUAL_DOUBLE;
>> +
>> +PIGLIT_GL_TEST_CONFIG_END
>> +
>> +static GLuint prog = 0;
>> +static GLuint tex = 0;
>> +
>> +static const float black[4] = { 0.0, 0.0, 0.0, 1.0 };
>> +static const float white[4] = { 1.0, 1.0, 1.0, 1.0 };
>> +static const float green[4] = { 0.0, 1.0, 0.0, 1.0 };
>> +
>> +enum piglit_result
>> +piglit_display(void)
>> +{
>> +    GLboolean pass = GL_TRUE;
>> +
>> +    glColor4fv(green);
>> +    piglit_draw_rect_tex(0.0, 0.0,
>> +                 (float) piglit_width, (float) piglit_height,
>> +                 0.0, 0.0, 1.0, 1.0);
>> +
>> +    pass &= piglit_probe_pixel_rgb(0, 0, black);
>> +    pass &= piglit_probe_pixel_rgb(piglit_width - 1, 0, green);
>> +    pass &= piglit_probe_pixel_rgb(0, piglit_height - 1, green);
>> +    pass &= piglit_probe_pixel_rgb(piglit_width - 1, piglit_height - 1,
>> +                       black);
>> +
>> +    piglit_present_results();
>> +
>> +    return pass ? PIGLIT_PASS : PIGLIT_FAIL;
>> +}
>> +
>> +void
>> +piglit_init(int argc, char **argv)
>> +{
>> +    piglit_require_gl_version(20);
>> +
>> +    prog = glCreateProgram();
>> +
>> +    glLinkProgram(prog);
>> +    if (piglit_link_check_status(prog))
>> +        piglit_report_result(PIGLIT_FAIL);
>> +
>> +    glUseProgram(prog);
>> +
>> +    glGenTextures(1, &tex);
>> +    glBindTexture(GL_TEXTURE_2D, tex);
>> +    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
>> +    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
>> +    glEnable(GL_TEXTURE_2D);
>> +    piglit_checkerboard_texture(tex, 0, 16, 16, 2, 2, black, white);
>> +
>> +    piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
>> +}
>>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit


More information about the Piglit mailing list