[Piglit] [PATCH] tex3d-depth1: test that a 3D texture w/ depth=1 works properly

Jose Fonseca jfonseca at vmware.com
Thu Aug 30 04:23:11 PDT 2012


Looks good.

Jose

----- Original Message -----
> ---
>  tests/all.tests                   |    1 +
>  tests/texturing/CMakeLists.gl.txt |    1 +
>  tests/texturing/tex3d-depth1.c    |  133
>  +++++++++++++++++++++++++++++++++++++
>  3 files changed, 135 insertions(+), 0 deletions(-)
>  create mode 100644 tests/texturing/tex3d-depth1.c
> 
> diff --git a/tests/all.tests b/tests/all.tests
> index feae374..aaef461 100644
> --- a/tests/all.tests
> +++ b/tests/all.tests
> @@ -751,6 +751,7 @@ texturing['tex-miplevel-selection-lod-bias'] =
> PlainExecTest(['tex-miplevel-sele
>  add_plain_test(texturing, 'tex-skipped-unit')
>  add_plain_test(texturing, 'tex-swizzle')
>  add_plain_test(texturing, 'tex3d')
> +add_concurrent_test(texturing, 'tex3d-depth1')
>  add_plain_test(texturing, 'tex3d-maxsize')
>  add_plain_test(texturing, 'tex3d-npot')
>  add_plain_test(texturing, 'texdepth')
> diff --git a/tests/texturing/CMakeLists.gl.txt
> b/tests/texturing/CMakeLists.gl.txt
> index c579f54..4f5aa11 100644
> --- a/tests/texturing/CMakeLists.gl.txt
> +++ b/tests/texturing/CMakeLists.gl.txt
> @@ -64,6 +64,7 @@ piglit_add_executable (sampler-cube-shadow
> sampler-cube-shadow.c)
>  piglit_add_executable (streaming-texture-leak
>  streaming-texture-leak.c)
>  piglit_add_executable (tex-miplevel-selection
>  tex-miplevel-selection.c)
>  piglit_add_executable (tex3d tex3d.c)
> +piglit_add_executable (tex3d-depth1 tex3d-depth1.c)
>  piglit_add_executable (tex3d-maxsize tex3d-maxsize.c)
>  piglit_add_executable (tex3d-npot tex3d-npot.c)
>  piglit_add_executable (texdepth texdepth.c)
> diff --git a/tests/texturing/tex3d-depth1.c
> b/tests/texturing/tex3d-depth1.c
> new file mode 100644
> index 0000000..1603dd9
> --- /dev/null
> +++ b/tests/texturing/tex3d-depth1.c
> @@ -0,0 +1,133 @@
> +/*
> + * Copyright (c) 2012 VMware, Inc.
> + *
> + * 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
> + * on the rights to use, copy, modify, merge, publish, distribute,
> sub
> + * license, 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
> + * NON-INFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS AND/OR THEIR
> + * SUPPLIERS 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.
> + */
> +
> +/**
> + * Tests 3D texture with depth=1 (to make sure it's not errantly
> treated
> + * as a 2D texture.
> + *
> + * Brian Paul
> + * 28 Aug 2012
> + */
> +
> +#include "piglit-util-gl-common.h"
> +
> +PIGLIT_GL_TEST_MAIN(
> +    64 /*window_width*/,
> +    64 /*window_height*/,
> +    GLUT_RGB | GLUT_ALPHA)
> +
> +
> +#define TEX_SIZE 8
> +
> +static const float green[4]  = {0.0, 1.0, 0.0, 1.0};
> +
> +
> +static void
> +init(void)
> +{
> +	GLubyte pixels[TEX_SIZE][TEX_SIZE][4];
> +	GLuint tex;
> +	int i, j;
> +
> +	/* solid red texture */
> +	for (i = 0; i < TEX_SIZE; i++) {
> +		for (j = 0; j < TEX_SIZE; j++) {
> +			pixels[i][j][0] = 255;
> +			pixels[i][j][1] = 0;
> +			pixels[i][j][2] = 0;
> +			pixels[i][j][3] = 255;
> +		}
> +	}
> +
> +	glGenTextures(1, &tex);
> +	glBindTexture(GL_TEXTURE_3D, tex);
> +	glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
> +	glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
> +	glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S,
> GL_CLAMP_TO_BORDER);
> +	glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T,
> GL_CLAMP_TO_BORDER);
> +	glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R,
> GL_CLAMP_TO_BORDER);
> +	glTexParameterfv(GL_TEXTURE_3D, GL_TEXTURE_BORDER_COLOR, green);
> +
> +	glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, TEX_SIZE, TEX_SIZE, 1,
> +		     0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
> +
> +	glEnable(GL_TEXTURE_3D);
> +}
> +
> +
> +enum piglit_result
> +piglit_display(void)
> +{
> +	/* texcoords with R=-1.0 to sample the border color */
> +	static const GLfloat texcoords[4][3] =
> +		{ { 0.0, 0.0, -1.0 },
> +		  { 1.0, 0.0, -1.0 },
> +		  { 1.0, 1.0, -1.0 },
> +		  { 0.0, 1.0, -1.0 } };
> +	GLfloat verts[4][2];
> +	bool pass;
> +
> +	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
> +
> +	glClear(GL_COLOR_BUFFER_BIT);
> +
> +	verts[0][0] = 0.0;  verts[0][1] = 0.0;
> +	verts[1][0] = piglit_width;  verts[1][1] = 0.0;
> +	verts[2][0] = piglit_width;  verts[2][1] = piglit_height;
> +	verts[3][0] = 0.0;  verts[3][1] = piglit_height;
> +
> +	glVertexPointer(2, GL_FLOAT, 0, verts);
> +	glTexCoordPointer(3, GL_FLOAT, 0, texcoords);
> +	glEnableClientState(GL_VERTEX_ARRAY);
> +	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
> +
> +	glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
> +
> +	glDisableClientState(GL_VERTEX_ARRAY);
> +	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
> +
> +	/* Should have drawn solid green since we're sampling the
> +	 * texture border color for all fragments drawn.  If red is
> +	 * seen, it's probably because the 3D texture (with depth=1)
> +	 * is being treated as a 2D texture.
> +	 *
> +	 * BTW, another way the difference between 2D/3D textures
> +	 * could be detected would be with R-coordinate derivatives
> +	 * and LOD selection.
> +	 */
> +	pass = piglit_probe_rect_rgba(0, 0,
> +				      piglit_width - 1, piglit_height - 1,
> +				      green);
> +
> +	piglit_present_results();
> +
> +	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
> +}
> +
> +
> +void
> +piglit_init(int argc, char **argv)
> +{
> +	init();
> +}
> --
> 1.7.3.4
> 
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
> 


More information about the Piglit mailing list