On 09/01/2015 02:56 PM, Brian Paul wrote:
> Some of the error checks were incorrect before.  Per the spec:
> 
> 1. GL_TEXTURE_BUFFER and GL_TEXTURE_CUBE_MAP_+/-_XYZ are not legal targets
> and should be flagged as invalid enums.
> 
> 2. GL_INVALID_OPERATION should be generated when trying to copy between
> compressed/uncompressed formats whose block/texel size do not match.
> 
> v2: Also quote spec language for the tests being done, per Ian.
> And, remove testing invalid target enums.
> ---
>  tests/spec/arb_copy_image/api_errors.c | 59 
> ++++++++++++++++++++++++++--------
>  1 file changed, 45 insertions(+), 14 deletions(-)
> 
> diff --git a/tests/spec/arb_copy_image/api_errors.c 
> b/tests/spec/arb_copy_image/api_errors.c
> index 0ef1eda..00c97a5 100644
> --- a/tests/spec/arb_copy_image/api_errors.c
> +++ b/tests/spec/arb_copy_image/api_errors.c
> @@ -78,22 +78,16 @@ image_storage(GLenum target, GLuint name, GLenum 
> internal_format,
>       }
>  }
>  
> -GLenum targets[] = {
> +/* only testing legal targets below */
> +static const GLenum targets[] = {
>       GL_TEXTURE_1D,
>       GL_TEXTURE_1D_ARRAY,
>       GL_TEXTURE_2D,
>       GL_TEXTURE_RECTANGLE,
> -     GL_TEXTURE_BUFFER,
>       GL_TEXTURE_2D_ARRAY,
>       GL_TEXTURE_2D_MULTISAMPLE,
>       GL_TEXTURE_2D_MULTISAMPLE_ARRAY,
>       GL_TEXTURE_CUBE_MAP,
> -     GL_TEXTURE_CUBE_MAP_POSITIVE_X,
> -     GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
> -     GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
> -     GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
> -     GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
> -     GL_TEXTURE_CUBE_MAP_NEGATIVE_Z,
>       GL_TEXTURE_CUBE_MAP_ARRAY,
>       GL_TEXTURE_3D
>  };
> @@ -132,29 +126,45 @@ test_simple_errors(GLenum src_target, GLenum dst_target)
>       /* This is no longer needed */
>       image_delete(src_target, src2);
>  
> +     /* Section 18.3.2 (Copying Between Images) of the OpenGL 4.5 Core
> +      * Profile spec says:
> +      *
> +      *     "An INVALID_VALUE error is generated if either name does not
> +      *     correspond to a valid renderbuffer or texture object according
> +      *     to the corresponding target parameter."
> +      */
>       if (src_target != GL_RENDERBUFFER_EXT) {
>               for (i = 0; i < ARRAY_LENGTH(targets); ++i) {
>                       if (targets[i] == src_target)
>                               continue;
>  
> +                     /* here, targets[i] doesn't match src object's target */
>                       glCopyImageSubData(src, targets[i], 0, 0, 0, 0,
>                                          dst, dst_target, 0, 0, 0, 0,
>                                          0, 0, 0);
> -                     pass &= piglit_check_gl_error(GL_INVALID_ENUM);
> +                     pass &= piglit_check_gl_error(GL_INVALID_VALUE);
>                       if (!pass)
>                               return false;
>               }
>       }
>  
> +     /* Section 18.3.2 (Copying Between Images) of the OpenGL 4.5 Core
> +      * Profile spec says:
> +      *
> +      *     "An INVALID_VALUE error is generated if either name does not
> +      *     correspond to a valid renderbuffer or texture object according
> +      *     to the corresponding target parameter."
> +      */
>       if (dst_target != GL_RENDERBUFFER_EXT) {
>               for (i = 0; i < ARRAY_LENGTH(targets); ++i) {
>                       if (targets[i] == dst_target)
>                               continue;
>  
> +                     /* here, targets[i] doesn't match dst object's target */
>                       glCopyImageSubData(src, src_target, 0, 0, 0, 0,
>                                          dst, targets[i], 0, 0, 0, 0,
>                                          0, 0, 0);
> -                     pass &= piglit_check_gl_error(GL_INVALID_ENUM);
> +                     pass &= piglit_check_gl_error(GL_INVALID_VALUE);
>                       if (!pass)
>                               return false;
>               }
> @@ -230,19 +240,38 @@ test_compressed_alignment_errors()
>                          tex[1], GL_TEXTURE_2D, 0, 0, 0, 0, 20, 24, 1);
>       pass &= piglit_check_gl_error(GL_INVALID_VALUE);
>  
> -     /* Check for compressed with wrong block size */
> +     /* Section 18.3.2 (Copying Between Images) of the OpenGL 4.5 Core
> +      * Profile spec says:
> +      *
> +      *     "An INVALID_OPERATION error is generated if the texel size of
> +      *     the uncompressed image is not equal to the block size of the
> +      *     compressed image."
> +      */
>       glBindTexture(GL_TEXTURE_2D, tex[2]);
>       glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGB16UI, 32, 32);
>       glCopyImageSubData(tex[0], GL_TEXTURE_2D, 0, 0, 0, 0,
>                          tex[2], GL_TEXTURE_2D, 0, 0, 0, 0, 20, 20, 1);
> -     pass &= piglit_check_gl_error(GL_INVALID_VALUE);
> +     pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
>  
> +     /* Section 18.3.2 (Copying Between Images) of the OpenGL 4.5 Core
> +      * Profile spec says:
> +      *
> +      *     "An INVALID_OPERATION error is generated if the formats are
> +         *     not compatible."
> +         *
> +         * The definition of compatible refers back to table 8.22 "Compatible

With s/        /^I/ in the 3 lines above,

Reviewed-by: Ian Romanick <[email protected]>

 :)

> +      * internal formats for TextureView."  This table does not contain
> +      * S3TC formats because they are from an older extension.  Given the
> +      * different encodings of DXT1 and DXT3 textures, it is reasonable to
> +      * assume they would not be compatible for texture views, and this
> +      * matches at least NVIDIA's implementation.
> +      */
>       glBindTexture(GL_TEXTURE_2D, tex[3]);
>       glTexStorage2D(GL_TEXTURE_2D, 1,
>                      GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, 32, 32);
>       glCopyImageSubData(tex[0], GL_TEXTURE_2D, 0, 0, 0, 0,
>                          tex[3], GL_TEXTURE_2D, 0, 0, 0, 0, 20, 20, 1);
> -     pass &= piglit_check_gl_error(GL_INVALID_VALUE);
> +     pass &= piglit_check_gl_error(GL_INVALID_OPERATION);
>  
>       glDeleteTextures(4, tex);
>  
> @@ -258,7 +287,9 @@ piglit_display(void)
>       pass &= test_simple_errors(GL_RENDERBUFFER, GL_TEXTURE_2D);
>       pass &= test_simple_errors(GL_TEXTURE_2D, GL_RENDERBUFFER);
>       pass &= test_simple_errors(GL_RENDERBUFFER, GL_RENDERBUFFER);
> -     pass &= test_compressed_alignment_errors();
> +     if (piglit_is_extension_supported("GL_EXT_texture_compression_s3tc")) {
> +             pass &= test_compressed_alignment_errors();
> +     }
>  
>       return pass ? PIGLIT_PASS : PIGLIT_FAIL;
>  }
> 

_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to