[Piglit] [PATCH] ext_render_snorm-render: fix read back assumptions
Tapani Pälli
tapani.palli at intel.com
Wed Aug 29 07:15:41 UTC 2018
On 29.08.2018 00:23, Nanley Chery wrote:
> On Tue, Aug 28, 2018 at 09:58:14AM +0300, Tapani Pälli wrote:
>> Test assumed that we can read back directly from R8, RG8 fbo but
>> this is not actually enabled by the extension. Patch introduces
>> additional read from window to sanity check fbo contents.
>>
>
> I think we're allowed to read from R8 and RG8 SNORM FBOs. Page 340 of
> the GLES 3.1 spec says that apps can query the driver to find out which
> formats are supported for ReadPixels:
>
> The second is an implementation-chosen format from among those
> defined in table 8.2, excluding formats DEPTH_COMPONENT and
> DEPTH_STENCIL. The values of format and type for this format may be
> determined by calling GetIntegerv with the symbolic constants
> IMPLEMENTATION_COLOR_READ_FORMAT and IMPLEMENTATION_COLOR_READ_TYPE,
> respectively. The implementation-chosen format may vary depending on
> the format of the selected read buffer of the currently bound read
> framebuffer.
>
> Table 8.2 has entries for R8 and RG8 SNORM.
Maybe the issue is that reading should be allowed only to matching
number of components with GL_BYTE? I'm currently reading every format as
GL_RGBA but I could change to use GL_RED, GL_RG, GL_RGBA depending on
the base format. If I enforce such rules for GL_BYTE formats in Mesa the
rest of failing dEQP tests start to pass. So for example, reading fbo
with internalFormat of GL_R8_SNORM would require:
glReadPixels(0, 0, w, h, GL_RED, GL_BYTE, pix);
Does this make sense?
> -Nanley
>
>> Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
>> ---
>> tests/spec/ext_render_snorm/render.c | 32 ++++++++++++++++++++++++++++----
>> 1 file changed, 28 insertions(+), 4 deletions(-)
>>
>> diff --git a/tests/spec/ext_render_snorm/render.c b/tests/spec/ext_render_snorm/render.c
>> index 1d4a69c2d..ad309f17c 100644
>> --- a/tests/spec/ext_render_snorm/render.c
>> +++ b/tests/spec/ext_render_snorm/render.c
>> @@ -82,10 +82,11 @@ static const struct fmt_test {
>> GLenum iformat;
>> GLenum base_format;
>> unsigned bpp;
>> + bool can_read;
>> } tests[] = {
>> - { GL_R8_SNORM, GL_RED, 1, },
>> - { GL_RG8_SNORM, GL_RG, 2, },
>> - { GL_RGBA8_SNORM, GL_RGBA, 4, },
>> + { GL_R8_SNORM, GL_RED, 1, false },
>> + { GL_RG8_SNORM, GL_RG, 2, false },
>> + { GL_RGBA8_SNORM, GL_RGBA, 4, true },
>> };
>>
>> static GLuint prog;
>> @@ -229,6 +230,25 @@ verify_contents(const struct fmt_test *test)
>> return result;
>> }
>>
>> +static bool
>> +verify_contents_float(const struct fmt_test *test)
>> +{
>> + /* Setup expected value, alpha is always max in the test. */
>> + char value[4] = { 0, 0, 0, SCHAR_MAX };
>> + value_for_format(test, value);
>> +
>> + const float expected[4] = {
>> + value[0] / SCHAR_MAX,
>> + value[1] / SCHAR_MAX,
>> + value[2] / SCHAR_MAX,
>> + value[3] / SCHAR_MAX,
>> + };
>> +
>> + bool res = piglit_probe_rect_rgba(0, 0, piglit_width, piglit_height,
>> + expected);
>> + return res;
>> +}
>> +
>> static bool
>> test_format(const struct fmt_test *test)
>> {
>> @@ -282,13 +302,17 @@ test_format(const struct fmt_test *test)
>> glDeleteTextures(1, &tmp_tex);
>>
>> /* Verify contents. */
>> - pass &= verify_contents(test);
>> + if (test->can_read)
>> + pass &= verify_contents(test);
>>
>> glDeleteFramebuffers(1, &fbo);
>>
>> /* Render fbo contents to window. */
>> render_texture(fbo_tex, GL_TEXTURE_2D, 0);
>>
>> + /* Verify window contents. */
>> + pass &= verify_contents_float(test);
>> +
>> piglit_present_results();
>>
>> glDeleteTextures(1, &fbo_tex);
>> --
>> 2.14.4
>>
>> _______________________________________________
>> Piglit mailing list
>> Piglit at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/piglit
More information about the Piglit
mailing list