[Piglit] [PATCH] fs-texelFetchOffset-2D: don't assume undefined values to be solid black

Roland Scheidegger sroland at vmware.com
Wed Nov 28 15:19:27 PST 2012


Well I'm not convinced this simple issue really warrants that much
comment, but since you've already written it, that's just fine :-).
Someone else needs to commit it though I don't have commit access for
piglit.

Roland


Am 28.11.2012 21:06, schrieb Eric Anholt:
> sroland at vmware.com writes:
> 
>> From: Roland Scheidegger <sroland at vmware.com>
>>
>> core GL specifies out-of-bound texel fetches return undefined results,
>> except in a robust context with ARB_robust_buffer_access_behavior supported
>> (which is core in 4.3), in which case texel fetch will return 0 (OpenGL 4.3
>> compatibility profile, page 387, subsection 11.1.3.2 Texel Fetches).
>> Since the test requires neither robust context nor that extension it cannot
>> assume any specific result value. In any case even returning zero is not what
>> the test expected, since it wanted [0,0,0,1] instead.
>> (With this change softpipe passes the test, as it clamps the coords.)
>>
>> v2: fix black->undefined, formatting, comments
>> ---
>>  .../glsl-1.30/execution/fs-texelFetchOffset-2D.c   |   13 ++++++++-----
>>  1 file changed, 8 insertions(+), 5 deletions(-)
>>
>> diff --git a/tests/spec/glsl-1.30/execution/fs-texelFetchOffset-2D.c b/tests/spec/glsl-1.30/execution/fs-texelFetchOffset-2D.c
>> index 19e3654..de9a0f5 100644
>> --- a/tests/spec/glsl-1.30/execution/fs-texelFetchOffset-2D.c
>> +++ b/tests/spec/glsl-1.30/execution/fs-texelFetchOffset-2D.c
>> @@ -76,7 +76,7 @@ piglit_display(void)
>>  	bool pass = true;
>>  	float red[4]   = {1.0, 0.0, 0.0, 1.0};
>>  	float blue[4]  = {0.0, 0.0, 1.0, 1.0};
>> -	float black[4] = {0.0, 0.0, 0.0, 1.0};
>> +	float undefined[4] = {0.0, 0.0, 0.0, 0.0};
>>  
>>  	glClearColor(0.5, 0.5, 0.5, 1.0);
>>  	glClear(GL_COLOR_BUFFER_BIT);
>> @@ -92,12 +92,15 @@ piglit_display(void)
>>  		for (q = 0; q < 4; q++) {
>>  			const int tex_x = (q / 2) * ((width / 2));
>>  			const int tex_y = (q % 2) * ((height / 2));
>> -			float *c = black;
>> +			float *c = undefined;
>>  			const int x = 10+20*q;
>>  
>>  			/* fancy stuff - we should see red and blue
>> -			   due to the offset for 3 levels, 
>> -			   otherwise we get lots of black border color */
>> +			   due to the offset for 3 levels, all the rest is
>> +			   undefined due to out-of-bounds.
>> +			   Only with ARB_robust_buffer_access_behavior
>> +			   (and a robust context) the undefined result would
>> +			   be guaranteed to be zero. */
>>  			if (l < 3) {
>>  				if (q == 2) c = red;
>>  				else if (q == 3) c = blue;
>> @@ -107,7 +110,7 @@ piglit_display(void)
>>  			piglit_Uniform2i(pos_location, tex_x, tex_y);
>>  			piglit_draw_rect(x, y, 10, 10);
>>  
>> -			if (width > 2) /* below 1 wide no test */
>> +			if (width > 2 && c != undefined) /* below 1 wide no test */
> 
> The comment I was hoping for here would be:
> 
> 			/* From the GL 3.0 spec, page 105 ("Texel Fetches"):
> 			 *
> 			 *     "The results of the texel fetch are
> 			 *      undefined if any of the following
> 			 *      conditions hold:
> 			 *
> 			 *      ...
> 			 *
> 			 *      - The texel coordinates refer to a
> 			 *        border texel outside of the defined
> 			 *        extents of the specified LOD"
> 			 */
> 
>>  				pass &= piglit_probe_rect_rgba(x, y, 10, 10, c);
> 
> Other than that, looks good.
> 



More information about the Piglit mailing list