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
