On Tue, Feb 09, 2016 at 03:33:30PM +0200, Topi Pohjolainen wrote:
> This test demonstrates a bug in the Intel mesa driver meta
> operation state restore logic. Originally it was found when
> developing lossless compression support. Current piglit tests
> just didn't exercise the resolve code path that would interfere
> with any ongoing meta operation.
> 
> Signed-off-by: Topi Pohjolainen <[email protected]>
> CC: Ben Widawsky <[email protected]>
> CC: Chad Versace <[email protected]>
> ---
>  tests/fast_color_clear/read-after-clear.c | 19 +++++++++++++++++++
>  1 file changed, 19 insertions(+)
> 
> diff --git a/tests/fast_color_clear/read-after-clear.c 
> b/tests/fast_color_clear/read-after-clear.c
> index 98c7169..bbd638e 100644
> --- a/tests/fast_color_clear/read-after-clear.c
> +++ b/tests/fast_color_clear/read-after-clear.c
> @@ -243,6 +243,25 @@ piglit_display(void)
>               glUniform1i(glGetUniformLocation(prog_sample, "samp"), 0);
>               glActiveTexture(GL_TEXTURE0);
>               glBindTexture(GL_TEXTURE_2D, tex1);
> +
> +             /* Initial buffer for texture is not large enough to hold
> +              * subsequent mipmap levels. As a side effect mipmap
> +              * generation will trigger Intel driver to allocate new buffer
> +              * and to copy the original level zero to the newly allocated.
> +              * Moreover, this will happen inside a meta operation that aims
> +              * to generate level one using level zero as source. The copy
> +              * from original level zero to the new buffer falls to blitter
> +              * engine. This in turn requires the fast cleared content in
> +              * the original buffer to be resolved resulting into another
> +              * nested meta operation.
> +              * This will exercise a bug in Intel driver, the nested meta
> +              * operation will interfere with vertex buffer state of the
> +              * outer meta operation causing the generated level one to
> +              * hold wrong pixel values.
> +              */
> +             glGenerateMipmap(GL_TEXTURE_2D);
> +             glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 1);
> +
>               piglit_draw_rect_tex(-1, -1, 2, 2, 0, 0, 1, 1);
>               glBindFramebuffer(GL_READ_FRAMEBUFFER, piglit_winsys_fbo);
>               pass = piglit_probe_rect_rgba(0, 0, piglit_width,

Hmm. Maybe we should make this a separate subtest? SUBTEST_SAMPLE is relatively
simple, and now it's less simple. (Just a thought).
Reviewed-by: Ben Widawsky <[email protected]>

-- 
Ben Widawsky, Intel Open Source Technology Center
_______________________________________________
Piglit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to