[Piglit] [PATCH 2/2] arb_direct_state_access: New test for GetCompressedTextureImage.

Laura Ekstrand laura at jlekstrand.net
Fri Feb 13 14:11:07 PST 2015


A smattering of piglit_get_gl_error(GL_NO_ERROR) calls have been added:
http://cgit.freedesktop.org/~ldeks/piglit/commit/?h=adsa-framebuffers&id=973e6d409163e8ff6f5f86665364057ad9496ec1

Laura

On Fri, Feb 13, 2015 at 12:04 PM, Laura Ekstrand <laura at jlekstrand.net>
wrote:

> Thanks for the catch.  Those were in the old test, but I forgot them
> because I was purposefully trying not to look at the old test (to avoid
> copying old mistakes).
>
> It's been fixed:
> http://cgit.freedesktop.org/~ldeks/piglit/commit/?h=adsa-framebuffers&id=3dab663c05d8c8047f00e7bb4cfa36618198172f
>
> Laura
>
> On Fri, Feb 13, 2015 at 11:45 AM, Ilia Mirkin <imirkin at alum.mit.edu>
> wrote:
>
>> You need to check for EXT_texture_array and ARB_texture_cube_map_array
>> for the relevant subtests. (And maybe ARB_cubemap or something? Not
>> sure if there's anything out there that wouldn't support it.)
>>
>> And also check for the s3tc extension for all of them.
>>
>> On Fri, Feb 13, 2015 at 2:36 PM, Laura Ekstrand <laura at jlekstrand.net>
>> wrote:
>> > ---
>> >  .../getcompressedtextureimage.c                    | 198
>> +++++++++++++++++++++
>> >  1 file changed, 198 insertions(+)
>> >  create mode 100644
>> tests/spec/arb_direct_state_access/getcompressedtextureimage.c
>> >
>> > diff --git
>> a/tests/spec/arb_direct_state_access/getcompressedtextureimage.c
>> b/tests/spec/arb_direct_state_access/getcompressedtextureimage.c
>> > new file mode 100644
>> > index 0000000..e4f15d7
>> > --- /dev/null
>> > +++ b/tests/spec/arb_direct_state_access/getcompressedtextureimage.c
>> > @@ -0,0 +1,198 @@
>> > +/*
>> > + * Copyright 2015 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 getcompressedtextureimage.c
>> > + *
>> > + * Tests to make sure that glGetCompressedTextureImage works correctly.
>> > + * The basic idea is to create some fake compressed data, upload it to
>> the
>> > + * driver with the traditional commands, download it with DSA, and
>> compare.
>> > + * Of course, this assumes that the traditional commands are correct,
>> which
>> > + * may not actually be the case.
>> > + */
>> > +
>> > +#include "piglit-util-gl.h"
>> > +
>> > +PIGLIT_GL_TEST_CONFIG_BEGIN
>> > +
>> > +       config.supports_gl_compat_version = 10;
>> > +
>> > +       config.window_visual = PIGLIT_GL_VISUAL_RGBA |
>> > +               PIGLIT_GL_VISUAL_DOUBLE;
>> > +
>> > +PIGLIT_GL_TEST_CONFIG_END
>> > +
>> > +/* Copied from Mesa src/mesa/main/formats.csv:
>> > + * MESA_FORMAT_RGBA_DXT5, s3tc, 4, 4, x128
>> > + */
>> > +#define FORMAT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
>> > +#define WIDTH 32
>> > +#define HEIGHT 32
>> > +#define WIDTH_IN_BLOCKS 8
>> > +#define HEIGHT_IN_BLOCKS 8
>> > +#define BLOCK_BYTES 16
>> > +#define IMAGE_SIZE (WIDTH_IN_BLOCKS * HEIGHT_IN_BLOCKS * BLOCK_BYTES)
>> > +#define CHAR_LIMIT 100
>> > +
>> > +static GLubyte *expected;
>> > +static GLboolean pass = GL_TRUE;
>> > +
>> > +static void
>> > +subtest(GLboolean local_result, const char *test_name)
>> > +{
>> > +       pass = local_result && pass;
>> > +       piglit_report_subtest_result(local_result ? PIGLIT_PASS :
>> PIGLIT_FAIL,
>> > +                                    test_name);
>> > +}
>> > +
>> > +static void
>> > +init_random_data(void)
>> > +{
>> > +       int i;
>> > +
>> > +       expected = malloc(18 * IMAGE_SIZE);
>> > +       for (i = 0; i < 18 * IMAGE_SIZE; ++i) {
>> > +               expected[i] = (GLubyte) rand();
>> > +       }
>> > +}
>> > +
>> > +void
>> > +piglit_init(int argc, char **argv)
>> > +{
>> > +       piglit_require_extension("GL_ARB_direct_state_access");
>> > +       srand(0);
>> > +       init_random_data();
>> > +}
>> > +
>> > +static bool
>> > +compare_to_expected(const GLubyte *data, int num_layers)
>> > +{
>> > +       return memcmp(expected, data, num_layers * IMAGE_SIZE) == 0;
>> > +}
>> > +
>> > +static void
>> > +upload_subtest(GLenum target, bool use_pbo)
>> > +{
>> > +       GLuint tex, pbo;
>> > +       int num_layers;
>> > +       char test_name [CHAR_LIMIT];
>> > +       int i;
>> > +
>> > +       /* Prepare to read data from expected */
>> > +       GLubyte *data = expected;
>> > +       if (use_pbo) {
>> > +               glGenBuffers(1, &pbo);
>> > +               glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo);
>> > +               glBufferData(GL_PIXEL_UNPACK_BUFFER, 18 * IMAGE_SIZE,
>> > +                            expected, GL_STATIC_DRAW);
>> > +               data = NULL;
>> > +       }
>> > +
>> > +       /* Upload it using traditional path */
>> > +       glGenTextures(1, &tex);
>> > +       glBindTexture(target, tex);
>> > +
>> > +       switch (target) {
>> > +
>> > +       case GL_TEXTURE_2D:
>> > +               num_layers = 1;
>> > +               glTexStorage2D(target, 1, FORMAT, WIDTH, HEIGHT);
>> > +               glCompressedTexSubImage2D(target, 0, 0, 0, WIDTH,
>> HEIGHT,
>> > +                                         FORMAT, num_layers *
>> IMAGE_SIZE,
>> > +                                         data);
>> > +               break;
>> > +       case GL_TEXTURE_2D_ARRAY:
>> > +               num_layers = 3;
>> > +               glTexStorage3D(target, 1, FORMAT, WIDTH, HEIGHT,
>> num_layers);
>> > +               glCompressedTexSubImage3D(target, 0, 0, 0, 0, WIDTH,
>> HEIGHT,
>> > +                                         num_layers, FORMAT,
>> > +                                         num_layers * IMAGE_SIZE,
>> data);
>> > +               break;
>> > +       case GL_TEXTURE_CUBE_MAP:
>> > +               num_layers = 6;
>> > +               glTexStorage2D(target, 1, FORMAT, WIDTH, HEIGHT);
>> > +               for (i = 0; i < num_layers; ++i) {
>> > +                       glCompressedTexSubImage2D(
>> > +                               GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0,
>> 0, 0,
>> > +                               WIDTH, HEIGHT, FORMAT, IMAGE_SIZE,
>> > +                               data + i * IMAGE_SIZE);
>> > +               }
>> > +               break;
>> > +       case GL_TEXTURE_CUBE_MAP_ARRAY:
>> > +               num_layers = 18;
>> > +               glTexStorage3D(target, 1, FORMAT, WIDTH, HEIGHT,
>> num_layers);
>> > +               glCompressedTexSubImage3D(target, 0, 0, 0, 0, WIDTH,
>> HEIGHT,
>> > +                                         num_layers, FORMAT,
>> > +                                         num_layers * IMAGE_SIZE,
>> data);
>> > +               break;
>> > +       default:
>> > +               printf("Bad texture target.\n");
>> > +               piglit_report_result(PIGLIT_FAIL);
>> > +
>> > +       }
>> > +
>> > +       /* Prepare to download into data. */
>> > +       if (use_pbo) {
>> > +               glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo);
>> > +               glBufferData(GL_PIXEL_PACK_BUFFER, 18 * IMAGE_SIZE,
>> > +                            NULL, GL_STATIC_READ);
>> > +               /* data = NULL from above */
>> > +       }
>> > +       else
>> > +               data = malloc(18 * IMAGE_SIZE);
>> > +
>> > +       /* Download it using DSA */
>> > +       glBindTexture(target, 0);
>> > +       glGetCompressedTextureImage(tex, 0, num_layers * IMAGE_SIZE,
>> data);
>> > +
>> > +       if (use_pbo)
>> > +               data = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY);
>> > +
>> > +       /* Perform comparison and report the results. */
>> > +       snprintf(test_name, CHAR_LIMIT, "upload %s%s",
>> > +                piglit_get_gl_enum_name(target), use_pbo ? " PBO" :
>> "");
>> > +       subtest(compare_to_expected(data, num_layers), test_name);
>> > +
>> > +       /* Clean up */
>> > +       if (use_pbo)
>> > +               glDeleteBuffers(1, &pbo);
>> > +       else
>> > +               free(data);
>> > +}
>> > +
>> > +enum piglit_result
>> > +piglit_display(void)
>> > +{
>> > +       /* Non-PBO tests */
>> > +       upload_subtest(GL_TEXTURE_2D, false);
>> > +       upload_subtest(GL_TEXTURE_2D_ARRAY, false);
>> > +       upload_subtest(GL_TEXTURE_CUBE_MAP, false);
>> > +       upload_subtest(GL_TEXTURE_CUBE_MAP_ARRAY, false);
>> > +
>> > +       /* PBO tests */
>> > +       upload_subtest(GL_TEXTURE_2D, true);
>> > +       upload_subtest(GL_TEXTURE_2D_ARRAY, true);
>> > +       upload_subtest(GL_TEXTURE_CUBE_MAP, true);
>> > +       upload_subtest(GL_TEXTURE_CUBE_MAP_ARRAY, true);
>> > +
>> > +       return pass ? PIGLIT_PASS : PIGLIT_FAIL;
>> > +}
>> > --
>> > 2.1.0
>> >
>> > _______________________________________________
>> > Piglit mailing list
>> > Piglit at lists.freedesktop.org
>> > http://lists.freedesktop.org/mailman/listinfo/piglit
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20150213/8d82ecc1/attachment-0001.html>


More information about the Piglit mailing list