[Piglit] [PATCH] arb_copy_image: fix a few error check tests

Brian Paul brianp at vmware.com
Tue Sep 1 14:56:20 PDT 2015


On 09/01/2015 02:33 PM, Ian Romanick wrote:
> On 08/31/2015 04:22 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.
>
> I think we should not check these targets.  Checking for either error
> assumes that the implementation checks for the (multiple) error
> conditions in a particular order.
>
>> 2. GL_INVALID_OPERATION should be generated when trying to copy between
>> compressed/uncompressed formats whose block/texel size do not match.
>> ---
>>   tests/spec/arb_copy_image/api_errors.c | 23 +++++++++++++++++++----
>>   1 file changed, 19 insertions(+), 4 deletions(-)
>>
>> diff --git a/tests/spec/arb_copy_image/api_errors.c b/tests/spec/arb_copy_image/api_errors.c
>> index 0ef1eda..6f94d06 100644
>> --- a/tests/spec/arb_copy_image/api_errors.c
>> +++ b/tests/spec/arb_copy_image/api_errors.c
>> @@ -140,7 +140,14 @@ test_simple_errors(GLenum src_target, GLenum dst_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);
>
> I'd support a follow-up patch that changes this test to follow the
> piglit idiom of
>
> 	pass = test() && pass;
>
>> +                        if (targets[i] == GL_TEXTURE_BUFFER ||
>> +			    (targets[i] >= GL_TEXTURE_CUBE_MAP_POSITIVE_X &&
>> +			     targets[i] <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)) {
>> +				pass &= piglit_check_gl_error(GL_INVALID_ENUM);
>> +			}
>> +			else {
>> +				pass &= piglit_check_gl_error(GL_INVALID_VALUE);
>> +			}
>>   			if (!pass)
>>   				return false;
>>   		}
>> @@ -154,7 +161,14 @@ test_simple_errors(GLenum src_target, GLenum dst_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);
>> +                        if (targets[i] == GL_TEXTURE_BUFFER ||
>> +			    (targets[i] >= GL_TEXTURE_CUBE_MAP_POSITIVE_X &&
>> +			     targets[i] <= GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)) {
>> +				pass &= piglit_check_gl_error(GL_INVALID_ENUM);
>> +			}
>> +			else {
>> +				pass &= piglit_check_gl_error(GL_INVALID_VALUE);
>> +			}
>>   			if (!pass)
>>   				return false;
>>   		}
>> @@ -235,14 +249,15 @@ test_compressed_alignment_errors()
>
> Ugh.  This test is woefully lacking in spec quotations. :(  If you
> replace the comment above this line with:
>
> 	/* 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."
> 	 */
>
>>   	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);
>>
>> +        /* Check for invalid copy between different compressed formats */
>
> and replace this comment with
>
> 	/* 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
> 	 * 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.
> 	 */
>
> then the last two hunks are
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
>
> With the amount of effort that justification required, I almost wonder if we
> should change the test to use RGTC formats (which are in table 8.22 instead).
>
> It also looks like this test needs to check that one of the S3TC extensions
> is supported. :(  I can submit a patch for that... assuming you don't want
> to change the test to use RGTC instead.
>
>>   	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);
>>
>

I'm posting a v2 which addresses most of your points.  I'm checking for 
GL_EXT_texture_compression_s3tc now.  I didn't change the pass &= test() 
statements.

I'll assume your R-b still applies if I don't see another review from 
you in a day.

-Brian



More information about the Piglit mailing list