[Piglit] [PATCH] spec/ARB_copy_image: Exercise different mipmap levels in the formats test
Anuj Phogat
anuj.phogat at gmail.com
Wed Sep 17 12:14:14 PDT 2014
On Wed, Sep 3, 2014 at 4:22 PM, Jason Ekstrand <jason at jlekstrand.net> wrote:
> Previously, we only ever worked on level 0. Now we work on levels 1 and 3
> so that cross-level copying gets tested.
> ---
> tests/spec/arb_copy_image/formats.c | 92 ++++++++++++++++++++++++-------------
> 1 file changed, 61 insertions(+), 31 deletions(-)
>
> diff --git a/tests/spec/arb_copy_image/formats.c b/tests/spec/arb_copy_image/formats.c
> index 5b07a1e..ae56b4f 100644
> --- a/tests/spec/arb_copy_image/formats.c
> +++ b/tests/spec/arb_copy_image/formats.c
> @@ -33,6 +33,8 @@
> #include "piglit-util-gl.h"
>
> #define TEX_SIZE 32
> +#define DEFAULT_SRC_LEVEL 1
> +#define DEFAULT_DST_LEVEL 3
>
> PIGLIT_GL_TEST_CONFIG_BEGIN
>
> @@ -476,8 +478,7 @@ const char ms_compare_fs_source[] =
> " ivec2 tex_px = ivec2(tex_coords * tex_size);\n"
> " for (int i = 0; i < samples; ++i) {\n"
> " %svec4 val1 = texelFetch(tex1, tex_px, i);\n"
> -" %svec4 val2 = texelFetch(tex2, tex_px, i);\n"
> -" if (val1 == val2)\n"
> +" %svec4 val2 = texelFetch(tex2, tex_px, i);\n" " if (val1 == val2)\n"
This hunk is not required.
> " ++count;\n"
> " }\n"
> " gl_FragColor = mix(red, green, float(count) / float(samples));\n"
> @@ -683,8 +684,8 @@ run_multisample_test(struct texture_format *src_format,
> }
>
> static bool
> -check_texture(GLuint texture, const struct texture_format *format,
> - const unsigned char *data)
> +check_texture(GLuint texture, unsigned level,
> + const struct texture_format *format, const unsigned char *data)
> {
> int i, j, k;
> bool pass = true;
> @@ -696,9 +697,9 @@ check_texture(GLuint texture, const struct texture_format *format,
> glBindTexture(GL_TEXTURE_2D, texture);
> if (format->block_width != 1 || format->block_height != 1) {
> /* Compressed */
> - glGetCompressedTexImage(GL_TEXTURE_2D, 0, tex_data);
> + glGetCompressedTexImage(GL_TEXTURE_2D, level, tex_data);
> } else {
> - glGetTexImage(GL_TEXTURE_2D, 0, format->format,
> + glGetTexImage(GL_TEXTURE_2D, level, format->format,
> format->data_type, tex_data);
> }
>
> @@ -737,6 +738,7 @@ run_test(struct texture_format *src_format, struct texture_format *dst_format)
> {
> bool pass = true, warn = false;
> unsigned src_width, src_height, dst_width, dst_height;
> + unsigned src_level, dst_level;
> GLuint texture[2];
>
> glEnable(GL_TEXTURE_2D);
> @@ -747,61 +749,89 @@ run_test(struct texture_format *src_format, struct texture_format *dst_format)
> src_height = TEX_SIZE * src_format->block_height;
>
> glBindTexture(GL_TEXTURE_2D, texture[0]);
> - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
> - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
> - if (src_format->block_width != 1 || src_format->block_height != 1) {
> - /* Compressed */
> - glCompressedTexImage2D(GL_TEXTURE_2D, 0,
> - src_format->internal_format,
> - src_width, src_height, 0,
> - TEX_SIZE * TEX_SIZE * src_format->bytes,
> - src_data);
> + if (src_format->can_be_reinterpreted) {
> + src_level = DEFAULT_SRC_LEVEL;
> + glTexStorage2D(GL_TEXTURE_2D, src_level + 2,
> + src_format->internal_format,
> + src_width << src_level, src_height << src_level);
> + if (src_format->block_width != 1 ||
> + src_format->block_height != 1) {
> + /* Compressed */
> + glCompressedTexSubImage2D(GL_TEXTURE_2D, src_level,
> + 0, 0,
> + src_width, src_height,
> + src_format->internal_format,
> + TEX_SIZE * TEX_SIZE * src_format->bytes,
> + src_data);
> + } else {
> + glTexSubImage2D(GL_TEXTURE_2D, src_level, 0, 0,
> + src_width, src_height, src_format->format,
> + src_format->data_type, src_data);
> + }
> } else {
> + src_level = 0;
> + /* All non-reintepritable textures are uncompressed */
non-interpretable
> glTexImage2D(GL_TEXTURE_2D, 0, src_format->internal_format,
> src_width, src_height, 0, src_format->format,
> src_format->data_type, src_data);
> }
> + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
> + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
> pass &= piglit_check_gl_error(GL_NO_ERROR);
> if (!pass) goto cleanup;
> - warn |= !check_texture(texture[0], src_format, src_data);
> + warn |= !check_texture(texture[0], src_level, src_format, src_data);
>
> dst_width = TEX_SIZE * dst_format->block_width;
> dst_height = TEX_SIZE * dst_format->block_height;
>
> glBindTexture(GL_TEXTURE_2D, texture[1]);
> - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
> - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
> - if (dst_format->block_width != 1 || dst_format->block_height != 1) {
> - /* Compressed */
> - glCompressedTexImage2D(GL_TEXTURE_2D, 0,
> - dst_format->internal_format,
> - dst_width, dst_height, 0,
> - TEX_SIZE * TEX_SIZE * dst_format->bytes,
> - dst_data);
> + if (dst_format->can_be_reinterpreted) {
> + dst_level = DEFAULT_DST_LEVEL;
> + glTexStorage2D(GL_TEXTURE_2D, dst_level + 2,
> + dst_format->internal_format,
> + dst_width << dst_level, dst_height << dst_level);
> + if (dst_format->block_width != 1 ||
> + dst_format->block_height != 1) {
> + /* Compressed */
> + glCompressedTexSubImage2D(GL_TEXTURE_2D, dst_level,
> + 0, 0,
> + dst_width, dst_height,
> + dst_format->internal_format,
> + TEX_SIZE * TEX_SIZE * dst_format->bytes,
> + dst_data);
> + } else {
> + glTexSubImage2D(GL_TEXTURE_2D, dst_level, 0, 0,
> + dst_width, dst_height, dst_format->format,
> + dst_format->data_type, dst_data);
> + }
> } else {
> + dst_level = 0;
> + /* All non-reintepritable textures are uncompressed */
> glTexImage2D(GL_TEXTURE_2D, 0, dst_format->internal_format,
> dst_width, dst_height, 0, dst_format->format,
> dst_format->data_type, dst_data);
> }
> + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
> + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
> pass &= piglit_check_gl_error(GL_NO_ERROR);
> if (!pass) goto cleanup;
> - warn |= !check_texture(texture[1], dst_format, dst_data);
> + warn |= !check_texture(texture[1], dst_level, dst_format, dst_data);
>
> - glCopyImageSubData(texture[0], GL_TEXTURE_2D, 0,
> + glCopyImageSubData(texture[0], GL_TEXTURE_2D, src_level,
> src_width / 4, src_height / 4, 0,
> - texture[1], GL_TEXTURE_2D, 0,
> + texture[1], GL_TEXTURE_2D, dst_level,
> dst_width / 4, dst_height / 4, 0,
> src_width / 2, src_height / 2, 1);
> pass &= piglit_check_gl_error(GL_NO_ERROR);
>
> - glCopyImageSubData(texture[1], GL_TEXTURE_2D, 0,
> + glCopyImageSubData(texture[1], GL_TEXTURE_2D, dst_level,
> 0, dst_height / 2, 0,
> - texture[1], GL_TEXTURE_2D, 0,
> + texture[1], GL_TEXTURE_2D, dst_level,
> dst_width / 2, 0, 0,
> dst_width / 2, dst_height / 2, 1);
> pass &= piglit_check_gl_error(GL_NO_ERROR);
>
> - pass &= check_texture(texture[1], dst_format, res_data);
> + pass &= check_texture(texture[1], dst_level, dst_format, res_data);
>
> cleanup:
> glDeleteTextures(2, texture);
> --
> 2.1.0
>
> _______________________________________________
> 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