[Piglit] [PATCH] teximage-colors: accept -127 instead of -128 for exact snorm up/download

Roland Scheidegger sroland at vmware.com
Thu Jan 11 22:27:53 UTC 2018


Am 11.01.2018 um 23:08 schrieb Brian Paul:
> On 01/11/2018 02:45 PM, Roland Scheidegger wrote:
>> ping?
>>
>> Am 08.01.2018 um 01:20 schrieb sroland at vmware.com:
>>> From: Roland Scheidegger <sroland at vmware.com>
>>>
>>> -128 and -127 represent exactly the same value (-1.0) for snorm8 values,
>>> as do -32768/-32767 for snorm16. Therefore it seems quite reasonable
>>> that an
>>> implementation would return the other representation (in particular
>>> r600 will
>>> do this with a blit, and the snorm->float->snorm conversion implied
>>> by this
>>> will never return the -128/-32768 values).
>>> ---
>>>   tests/texturing/teximage-colors.c | 39
>>> +++++++++++++++++++++++++++++++++++----
>>>   1 file changed, 35 insertions(+), 4 deletions(-)
>>>
>>> diff --git a/tests/texturing/teximage-colors.c
>>> b/tests/texturing/teximage-colors.c
>>> index de2024644..61a3c5d15 100644
>>> --- a/tests/texturing/teximage-colors.c
>>> +++ b/tests/texturing/teximage-colors.c
>>> @@ -833,10 +833,41 @@ test_exact()
>>>                 observed);
>>>       pass &= piglit_check_gl_error(GL_NO_ERROR);
>>>   -    for (i = 0; i < texture_size; ++i)
>>> -        pass &= memcmp(&data[i * texture_size * Bpp],
>>> -                   &observed[i * tex_width * Bpp],
>>> -                   texture_size * Bpp) == 0;
>>> +    /*
>>> +     * For snorm formats, -127/-128 and -32767/-32768 represent the
>>> exact
>>> +     * same value (-1.0). Therefore, it is quite reasonable to expect
>>> +     * an implementation could return the other representation.
>>> +     * (We'll assume it will happen only one way the other way seems
>>> rather
>>> +     * unlikely.)
>>> +     */
>>> +    if (format->data_type == GL_BYTE) {
>>> +        int j;
>>> +        for (j = 0; j < texture_size; ++j) {
>>> +            for (i = 0; i < tex_width * channels; i++) {
>>> +                if (!(data[i] == observed[i] ||
>>> +                      (data[i] == 128 && observed[i] == 129))) {
> 
> This might be more obvious if you you'd cast the data and observed
> pointers to GLbyte types (like you do for GLshort below) and then test
> for the -127 and -128 values directly.
Ah yes, I was lazy with the typing there (I didn't actually fix the
GLshort case initially, because I needed to try like 20 seed values to
finally hit a failure)...
> In any case, Reviewed-by: Brian Paul <brianp at vmware.com>

Thanks!

Roland

> 
> 
>>> +                    pass = GL_FALSE;
>>> +                }
>>> +            }
>>> +        }
>>> +    } else if (format->data_type == GL_SHORT) {
>>> +        int j;
>>> +        for (j = 0; j < texture_size; ++j) {
>>> +            for (i = 0; i < tex_width * channels; i++) {
>>> +                GLshort datas = ((GLshort *)data)[i];
>>> +                GLshort obss = ((GLshort *)observed)[i];
>>> +                if (!(datas == obss ||
>>> +                      (datas == -32768 && obss == -32767))) {
>>> +                    pass = GL_FALSE;
>>> +                }
>>> +            }
>>> +        }
>>> +    } else {
>>> +        for (i = 0; i < texture_size; ++i)
>>> +            pass &= memcmp(&data[i * texture_size * Bpp],
>>> +                &observed[i * tex_width * Bpp],
>>> +                texture_size * Bpp) == 0; >> +    }
>>>         free(observed);
>>>       free(tmp_float);
>>>
>>
>> _______________________________________________
>> Piglit mailing list
>> Piglit at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/piglit
>>
> 



More information about the Piglit mailing list