[Piglit] [PATCH] tex-upload-scale-bias: tests texture upload with scale/bias transfer options
Brian Paul
brianp at vmware.com
Fri Feb 13 07:27:28 PST 2015
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>
> 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