[Piglit] [PATCH] getteximage-formats: Add option to clear texture before rendering
Brian Paul
brianp at vmware.com
Fri Feb 12 14:49:49 UTC 2016
On 02/11/2016 10:11 AM, Topi Pohjolainen wrote:
> Demonstrates a bug in Intel color resolve logic. If rendering to
> texture is preceded by fast clear subsequent reads from the
> texture require the underlying color buffer to be resolved. In
> case of mipmap generation Intel driver needs to reallocate the
> underlying buffer to fit the subsequent levels. However, copy of
> the original level zero to newly allocated buffer is delayed until
> the driver is about to generate level one using level zero as
> source. This causes a color resolve of the original level zero.
> Both the generation of level one and the resolve are meta
> operations, and the latter will interfere with the sampler
> settings of the former.
>
> Signed-off-by: Topi Pohjolainen <topi.pohjolainen at intel.com>
> CC: Ian Romanick <idr at freedesktop.org>
> ---
> tests/all.py | 1 +
> tests/texturing/getteximage-formats.c | 16 +++++++++++++---
> 2 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/tests/all.py b/tests/all.py
> index 2912d1f..8938bfc 100644
> --- a/tests/all.py
> +++ b/tests/all.py
> @@ -2987,6 +2987,7 @@ with profile.group_manager(
> g(['fbo-storage-completeness'])
> g(['fbo-storage-formats'])
> g(['getteximage-formats', 'init-by-rendering'])
> + g(['getteximage-formats', 'init-by-clear-and-render'])
> g(['ext_framebuffer_multisample-fast-clear', 'single-sample'],
> 'fbo-fast-clear')
> add_fbo_stencil_tests(g, 'GL_STENCIL_INDEX1')
> diff --git a/tests/texturing/getteximage-formats.c b/tests/texturing/getteximage-formats.c
> index 715d5df..320683f 100644
> --- a/tests/texturing/getteximage-formats.c
> +++ b/tests/texturing/getteximage-formats.c
> @@ -50,6 +50,7 @@ static const char *TestName = "getteximage-formats";
> static const GLfloat clearColor[4] = { 0.4, 0.4, 0.4, 0.0 };
> static GLuint texture_id;
> static GLboolean init_by_rendering;
> +static GLboolean init_by_clearing_first;
>
> #define TEX_SIZE 128
>
> @@ -83,7 +84,7 @@ make_texture_image(GLenum intFormat, GLubyte upperRightTexel[4])
>
> memcpy(upperRightTexel, tex[TEX_SIZE-1][TEX_SIZE-1], 4);
>
> - if (init_by_rendering) {
> + if (init_by_rendering || init_by_clearing_first) {
> /* Initialize the mipmap levels. */
> for (i = TEX_SIZE, j = 0; i; i >>= 1, j++) {
> glTexImage2D(GL_TEXTURE_2D, j, intFormat, i, i, 0,
> @@ -102,6 +103,11 @@ make_texture_image(GLenum intFormat, GLubyte upperRightTexel[4])
> return GL_FALSE;
> }
>
> + if (init_by_clearing_first) {
> + glClearColor(1, 0, 0, 1);
> + glClear(GL_COLOR_BUFFER_BIT);
> + }
> +
> glViewport(0, 0, TEX_SIZE, TEX_SIZE);
>
> glWindowPos2iARB(0, 0);
> @@ -365,6 +371,7 @@ test_format(const struct test_desc *test,
> GLfloat expected[4], pix[4], tolerance[4];
> GLboolean pass = GL_TRUE;
>
> + glClearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
> glClear(GL_COLOR_BUFFER_BIT);
>
> /* The RGBA_DXT1 formats seem to expose a Mesa/libtxc_dxtn bug.
> @@ -536,6 +543,11 @@ piglit_init(int argc, char **argv)
> puts("The textures will be initialized by rendering "
> "to them using glDrawPixels.");
> break;
> + } else if (strcmp(argv[i], "init-by-clear-and-render") == 0) {
> + init_by_clearing_first = GL_TRUE;
> + puts("The textures will be initialized by rendering "
> + "to them using glCear and glDrawPixels.");
> + break;
> }
> }
>
> @@ -547,6 +559,4 @@ piglit_init(int argc, char **argv)
> glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
>
> glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
> -
> - glClearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
> }
>
Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the Piglit
mailing list