[Piglit] [PATCH] maxuniformblocksize: fix vs/fsexceed test index

Anuj Phogat anuj.phogat at gmail.com
Mon Aug 25 14:06:30 PDT 2014


On Fri, Aug 15, 2014 at 7:41 AM, Brian Paul <brianp at vmware.com> wrote:
> For the exceed test, we create an array in a UBO that's one vector
> larger than what's supposed to be supported.
>
> The shader program is allowed to link or not link in this situation.
> But if it does link, the behavior of indexing beyond the UBO size
> probably isn't well defined.  Instead of testing/probing at a
> position that's out of bounds, test/probe the last position inside
> the max UBO size.
>
> Plus, clean up the code a bit to make it a little easier to understand.
> ---
>  .../arb_uniform_buffer_object/maxuniformblocksize.c  |   18 +++++++++++++-----
>  1 file changed, 13 insertions(+), 5 deletions(-)
>
> diff --git a/tests/spec/arb_uniform_buffer_object/maxuniformblocksize.c b/tests/spec/arb_uniform_buffer_object/maxuniformblocksize.c
> index 07b0bd0..c9cff49 100644
> --- a/tests/spec/arb_uniform_buffer_object/maxuniformblocksize.c
> +++ b/tests/spec/arb_uniform_buffer_object/maxuniformblocksize.c
> @@ -112,6 +112,7 @@ piglit_display(void)
>         bool pass = true;
>         bool may_link_fail;
>         const float green[4] = { 0, 1, 0, 0 };
> +       int test_index;
>
>         piglit_require_extension("GL_ARB_uniform_buffer_object");
>
> @@ -123,20 +124,24 @@ piglit_display(void)
>         case VS:
>                 target = GL_VERTEX_SHADER;
>                 may_link_fail = false;
> +               test_index = vec4s - 1;
>                 break;
>         case VS_EXCEED:
>                 target = GL_VERTEX_SHADER;
>                 may_link_fail = true;
>                 vec4s++;
> +               test_index = vec4s - 2;
>                 break;
>         case FS:
>                 target = GL_FRAGMENT_SHADER;
>                 may_link_fail = false;
> +               test_index = vec4s - 1;
>                 break;
>         case FS_EXCEED:
>                 target = GL_FRAGMENT_SHADER;
>                 may_link_fail = true;
>                 vec4s++;
> +               test_index = vec4s - 2;
>                 break;
>         default:
>                 assert(false);
> @@ -189,15 +194,18 @@ piglit_display(void)
>         data = glMapBuffer(GL_UNIFORM_BUFFER, GL_READ_WRITE);
>         memset(data, 0, size);
>
> -       data[(vec4s - 1) * 4 + 0] = 0.0;
> -       data[(vec4s - 1) * 4 + 1] = 1.0;
> -       data[(vec4s - 1) * 4 + 2] = 0.0;
> -       data[(vec4s - 1) * 4 + 3] = 0.0;
> +       /* The whole uniform buffer will be zeros, except for the
> +        * entry at v[test_index] which will be green.
> +        */
> +       data[test_index * 4 + 0] = green[0];
> +       data[test_index * 4 + 1] = green[1];
> +       data[test_index * 4 + 2] = green[2];
> +       data[test_index * 4 + 3] = green[3];
>         glUnmapBuffer(GL_UNIFORM_BUFFER);
>
>         glUseProgram(prog);
>         i_location = glGetUniformLocation(prog, "i");
> -       glUniform1i(i_location, vec4s - 1);
> +       glUniform1i(i_location, test_index);
>
>         glUniformBlockBinding(prog, 0, 0);
>         glBindBufferBase(GL_UNIFORM_BUFFER, 0, bo);
> --
> 1.7.10.4
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit

Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>


More information about the Piglit mailing list