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

Laura Ekstrand laura at jlekstrand.net
Fri Feb 13 12:04:14 PST 2015


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/e60a5596/attachment.html>


More information about the Piglit mailing list