[Piglit] [PATCH 12/16] namespace-pollution: Add glGetTexImage from a compressed texture as an operation to test

Ilia Mirkin imirkin at alum.mit.edu
Wed Jan 6 19:46:08 PST 2016


Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

On Wed, Jan 6, 2016 at 7:53 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> NOTE: The following tests fail on i965 (and presumably other drivers
> that use meta) on Mesa master and 11.1:
>
>     framebuffer with glgetteximage-compressed
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92363
> ---
>  tests/all.py                               |  2 +-
>  tests/general/object-namespace-pollution.c | 70 ++++++++++++++++++++++++++++++
>  2 files changed, 71 insertions(+), 1 deletion(-)
>
> diff --git a/tests/all.py b/tests/all.py
> index 9e7f324..dee354f 100644
> --- a/tests/all.py
> +++ b/tests/all.py
> @@ -4609,7 +4609,7 @@ with profile.group_manager(
>          PiglitGLTest,
>          grouptools.join('object namespace pollution')) as g:
>      for object_type in ("buffer", "framebuffer", "texture"):
> -        for operation in ("glBitmap", "glBlitFramebuffer", "glClear", "glClearTexSubImage", "glCopyImageSubData", "glCopyPixels", "glCopyTexSubImage2D", "glDrawPixels", "glGenerateMipmap", "glGetTexImage", "glTexSubImage2D"):
> +        for operation in ("glBitmap", "glBlitFramebuffer", "glClear", "glClearTexSubImage", "glCopyImageSubData", "glCopyPixels", "glCopyTexSubImage2D", "glDrawPixels", "glGenerateMipmap", "glGetTexImage", "glGetTexImage-compressed", "glTexSubImage2D"):
>              g(['object-namespace-pollution', operation, object_type],
>                '{} with {}'.format(object_type, operation))
>
> diff --git a/tests/general/object-namespace-pollution.c b/tests/general/object-namespace-pollution.c
> index 6ec9b08..825eb82 100644
> --- a/tests/general/object-namespace-pollution.c
> +++ b/tests/general/object-namespace-pollution.c
> @@ -816,6 +816,75 @@ do_GetTexImage(bool silent_skip)
>  }
>
>  static bool
> +do_GetTexImage_compressed(bool silent_skip)
> +{
> +       const GLuint tex = FIRST_SPARE_OBJECT;
> +       const GLenum internal_format =
> +               piglit_is_extension_supported("GL_EXT_texture_compression_s3tc")
> +               ? GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
> +               : GL_COMPRESSED_RGBA_FXT1_3DFX;
> +
> +       /* DXT1 has 4x4 block size.  The image will be 16x16 texels,
> +        * so that means 16 blocks.  Each block is 64-bits (or 8
> +        * bytes).  That's a total of 16 * 8 = 128 bytes.
> +        *
> +        * FXT1 has 8x4 block size.  The image will be 16x16 texels,
> +        * so that means 8 blocks.  Each block is 128-bits (or 16
> +        * bytes).  That's a total of 8 * 16 = 128 bytes.
> +        */
> +       uint8_t data[128];
> +
> +       /* Buffer to hold the decompressed texture. */
> +       uint8_t texels[16 * 16 * 4];
> +
> +       bool pass = true;
> +
> +       /* This test requires:
> +        *
> +        *   GL_EXT_texture_compression_s3tc or GL_3DFX_texture_compression_FXT1
> +        *
> +        * and
> +        *
> +        *   GL_ARB_texture_compression or OpenGL 1.3
> +        */
> +       if (!(piglit_is_extension_supported("GL_ARB_texture_compression") ||
> +             piglit_get_gl_version() >= 13) ||
> +           !(piglit_is_extension_supported("GL_EXT_texture_compression_s3tc") ||
> +             piglit_is_extension_supported("GL_3DFX_texture_compression_FXT1"))) {
> +               if (silent_skip)
> +                       return true;
> +
> +               printf("%s requires either S3TC or FXT1 texture compression.\n",
> +                      __func__);
> +               piglit_report_result(PIGLIT_SKIP);
> +       }
> +
> +       if (glIsTexture(tex)) {
> +               printf("\t%s,%d: %u is already a texture\n",
> +                      __func__, __LINE__, tex);
> +               pass = false;
> +       }
> +
> +       /* Generate the compressed texture object.
> +        */
> +       generate_random_data(data, sizeof(data), GL_PIXEL_UNPACK_BUFFER, pbo);
> +       glBindTexture(GL_TEXTURE_2D, tex);
> +       glCompressedTexImage2D(GL_TEXTURE_2D, 0 /* level */, internal_format,
> +                              16 /* width */, 16 /* height */, 0 /* border */,
> +                              sizeof(data), data);
> +
> +       /* Do the "real" test. */
> +       glGetTexImage(GL_TEXTURE_2D, 0 /* level */,
> +                     GL_RGBA, GL_UNSIGNED_BYTE, texels);
> +
> +       /* Final clean up. */
> +       glBindTexture(GL_TEXTURE_2D, 0);
> +       glDeleteTextures(1, &tex);
> +
> +       return piglit_check_gl_error(GL_NO_ERROR) && pass;
> +}
> +
> +static bool
>  do_TexSubImage2D(bool silent_skip)
>  {
>         const GLuint tex = FIRST_SPARE_OBJECT;
> @@ -896,6 +965,7 @@ static const struct {
>         { "glDrawPixels", do_DrawPixels },
>         { "glGenerateMipmap", do_GenerateMipmap },
>         { "glGetTexImage", do_GetTexImage },
> +       { "glGetTexImage-compressed", do_GetTexImage_compressed },
>         { "glTexSubImage2D", do_TexSubImage2D },
>  };
>
> --
> 2.5.0
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit


More information about the Piglit mailing list