[Piglit] [PATCH] fcc: Combine fast clear with mipmap generation
Ben Widawsky
benjamin.widawsky at intel.com
Tue Feb 9 18:41:06 UTC 2016
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 <topi.pohjolainen at intel.com>
> CC: Ben Widawsky <benjamin.widawsky at intel.com>
> CC: Chad Versace <chad.versace at intel.com>
> ---
> 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 <benjamin.widawsky at intel.com>
--
Ben Widawsky, Intel Open Source Technology Center
More information about the Piglit
mailing list