[Piglit] [PATCH] tex-upload-scale-bias: tests texture upload with scale/bias transfer options

Iago Toral itoral at igalia.com
Sun Feb 15 23:18:26 PST 2015


On Fri, 2015-02-13 at 08:27 -0700, Brian Paul wrote:
> On 02/13/2015 06:09 AM, Iago Toral Quiroga wrote:
> > After the recent rewrite of the format conversion code in Mesa we got
> > a bug report for incorrect texture uploads with scale/bias trasfer
> > options: https://urldefense.proofpoint.com/v2/url?u=https-3A__bugs.freedesktop.org_show-5Fbug.cgi-3Fid-3D89068&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=T0t4QG7chq2ZwJo6wilkFznRSFy-8uDKartPGbomVj8&m=Ex8mtrFPwbCj_Cr3O9MRBMWCzFcLKsul0glXyvBM_zs&s=9NmaruVIgyLaibkMv5s7Qf5QgArEgFiOpFSlNvSsjuA&e=
> >
> > This was not being catched by piglit, so this patch adds a test case to
> > avoid similar regressions in the future.
> > ---
> >   tests/all.py                          |   1 +
> >   tests/general/CMakeLists.gl.txt       |   1 +
> >   tests/general/tex-upload-scale-bias.c | 135 ++++++++++++++++++++++++++++++++++
> >   3 files changed, 137 insertions(+)
> >   create mode 100644 tests/general/tex-upload-scale-bias.c
> >
> > diff --git a/tests/all.py b/tests/all.py
> > index d7a921a..37bbd67 100644
> > --- a/tests/all.py
> > +++ b/tests/all.py
> > @@ -812,6 +812,7 @@ add_plain_test(gl11, ['texture-al'])
> >   add_concurrent_test(gl11, ['triangle-guardband-viewport'])
> >   add_concurrent_test(gl11, ['getteximage-targets', '1D'])
> >   add_concurrent_test(gl11, ['getteximage-targets', '2D'])
> > +add_concurrent_test(gl11, ['tex-upload-scale-bias'])
> >
> >   color_formats = [
> >       'GL_RED', 'GL_R8', 'GL_R8_SNORM', 'GL_R16', 'GL_R16_SNORM',
> > diff --git a/tests/general/CMakeLists.gl.txt b/tests/general/CMakeLists.gl.txt
> > index 4224c06..79cc980 100644
> > --- a/tests/general/CMakeLists.gl.txt
> > +++ b/tests/general/CMakeLists.gl.txt
> > @@ -137,5 +137,6 @@ piglit_add_executable (quad-invariance quad-invariance.c)
> >   piglit_add_executable (clear-accum clear-accum.c)
> >   piglit_add_executable (vs-point_size-zero vs-point_size-zero.c)
> >   piglit_add_executable (triangle-guardband-viewport triangle-guardband-viewport.c)
> > +piglit_add_executable (tex-upload-scale-bias tex-upload-scale-bias.c)
> >
> >   # vim: ft=cmake:
> > diff --git a/tests/general/tex-upload-scale-bias.c b/tests/general/tex-upload-scale-bias.c
> 
> Looks good, but would you consider renaming the test 
> "teximage-scale-bias"?  Most other glTexImage-related tests have 
> "teximage" in the name.
> 
> Also, we generally use tabs (8-space) indentation in piglit.
> 
> Other than that, Reviewed-by: Brian Paul <brianp at vmware.com>

I'll rename the test and fix the indentation before pushing.
Thanks for the review Brian!

> 
> > new file mode 100644
> > index 0000000..f9b9911
> > --- /dev/null
> > +++ b/tests/general/tex-upload-scale-bias.c
> > @@ -0,0 +1,135 @@
> > +/*
> > + * Copyright (c) 2015 Intel Corporation
> > + *
> > + * Permission is hereby granted, free of charge, to any person obtaining a
> > + * copy of this software and associated documentation files (the "Software"),
> > + * to deal in the Software without restriction, including without limitation
> > + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> > + * and/or sell copies of the Software, and to permit persons to whom the
> > + * Software is furnished to do so, subject to the following conditions:
> > + *
> > + * The above copyright notice and this permission notice (including the next
> > + * paragraph) shall be included in all copies or substantial portions of the
> > + * Software.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> > + * IN THE SOFTWARE.
> > + */
> > +
> > +/*
> > + * Test texture upload with scale and bias pixel transfer options
> > + *
> > + * Iago Toral Quiroga <itoral at igalia.com>
> > + * Feb 13, 2015
> > + */
> > +
> > +#include "piglit-util-gl.h"
> > +
> > +PIGLIT_GL_TEST_CONFIG_BEGIN
> > +
> > +	config.supports_gl_compat_version = 10;
> > +
> > +	config.window_visual = PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_RGB;
> > +
> > +PIGLIT_GL_TEST_CONFIG_END
> > +
> > +static const GLfloat colors[4] = { 0.5, 0.25, 0.1, 0.5 };
> > +static const GLfloat scale[4] = { 2.0, 3.0, 1.0, 1.0 };
> > +static const GLfloat bias[4] = { -0.25, 0.0, 0.4, 0.0 };
> > +
> > +static GLuint
> > +create_texture()
> > +{
> > +   GLuint tex, size, i;
> > +   GLfloat *image;
> > +
> > +   glGenTextures(1, &tex);
> > +
> > +   glBindTexture(GL_TEXTURE_2D, tex);
> > +   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
> > +   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
> > +
> > +   /* Upload texture color data and apply a bias and scale
> > +    */
> > +   glPixelTransferf(GL_RED_SCALE, scale[0]);
> > +   glPixelTransferf(GL_RED_BIAS, bias[0]);
> > +   glPixelTransferf(GL_GREEN_SCALE, scale[1]);
> > +   glPixelTransferf(GL_GREEN_BIAS, bias[1]);
> > +   glPixelTransferf(GL_BLUE_SCALE, scale[2]);
> > +   glPixelTransferf(GL_BLUE_BIAS, bias[2]);
> > +   glPixelTransferf(GL_ALPHA_SCALE, scale[3]);
> > +   glPixelTransferf(GL_ALPHA_BIAS, bias[3]);
> > +
> > +   size = 64;
> > +   image = malloc(size * size * 4 * sizeof(GLfloat));
> > +   for (i = 0; i < size * size; i++) {
> > +      image[i*4+0] = colors[0];
> > +      image[i*4+1] = colors[1];
> > +      image[i*4+2] = colors[2];
> > +      image[i*4+3] = colors[3];
> > +   }
> > +
> > +   glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
> > +                size, size, 0, GL_RGBA, GL_FLOAT, image);
> > +
> > +   /* Reset pixel transfer to defaults */
> > +   glPixelTransferf(GL_RED_SCALE, 1.0);
> > +   glPixelTransferf(GL_RED_BIAS, 0.0);
> > +   glPixelTransferf(GL_GREEN_SCALE, 1.0);
> > +   glPixelTransferf(GL_GREEN_BIAS, 0.0);
> > +   glPixelTransferf(GL_BLUE_SCALE, 1.0);
> > +   glPixelTransferf(GL_BLUE_BIAS, 0.0);
> > +   glPixelTransferf(GL_ALPHA_SCALE, 1.0);
> > +   glPixelTransferf(GL_ALPHA_BIAS, 0.0);
> > +
> > +   free(image);
> > +
> > +   return tex;
> > +}
> > +
> > +
> > +enum piglit_result
> > +piglit_display(void)
> > +{
> > +   GLuint tex;
> > +   GLboolean pass;
> > +   GLfloat expected[4];
> > +   int i;
> > +
> > +   /* Create a texture and upload color data with scale and bias options */
> > +   glEnable(GL_TEXTURE_2D);
> > +   tex = create_texture();
> > +
> > +   /* Render with our texture */
> > +   glClear(GL_COLOR_BUFFER_BIT);
> > +   glBindTexture(GL_TEXTURE_2D, tex);
> > +   piglit_draw_rect_tex(0, 0, piglit_width, piglit_height,
> > +                        0.0, 0.0, 1.0, 1.0);
> > +
> > +   /* Compute expected color result after applying scale and bias.
> > +    * Read back pixels from the framebuffer and check that they have scale
> > +    * and bias applied.
> > +    */
> > +   for (i = 0; i < 4; i++)
> > +      expected[i] = colors[i] * scale[i] + bias[i];
> > +
> > +   pass = piglit_probe_pixel_rgba(piglit_width/2, piglit_height/2, expected);
> > +
> > +   glDeleteTextures(1, &tex);
> > +   glDisable(GL_TEXTURE_2D);
> > +
> > +   return pass ? PIGLIT_PASS : PIGLIT_FAIL;
> > +}
> > +
> > +
> > +void
> > +piglit_init(int argc, char **argv)
> > +{
> > +   piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
> > +   glClearColor(0.0, 0.0, 0.0, 1.0);
> > +}
> >
> 
> 




More information about the Piglit mailing list