[Piglit] [PATCH 7/8] Rewrite glsl-fs-texturelod-01 as a shader_runner test.

Ian Romanick idr at freedesktop.org
Thu Apr 5 12:36:42 PDT 2012


On 04/04/2012 01:51 AM, Kenneth Graunke wrote:
> This is quite a bit simpler.  Technically, I don't need to set the
> min/mag filters here since "texture miptree" does it already, but it's
> self-documenting to include that in the test itself.
>
> Signed-off-by: Kenneth Graunke<kenneth at whitecape.org>
> ---
>   tests/all.tests                                 |    1 -
>   tests/shaders/CMakeLists.gl.txt                 |    1 -
>   tests/shaders/glsl-fs-texturelod-01.c           |  163 -----------------------
>   tests/shaders/glsl-fs-texturelod-01.frag        |   16 ---
>   tests/shaders/glsl-fs-texturelod-01.shader_test |   52 +++++++
>   tests/shaders/glsl-fs-texturelod-01.vert        |   13 --
>   6 files changed, 52 insertions(+), 194 deletions(-)
>   delete mode 100644 tests/shaders/glsl-fs-texturelod-01.c
>   delete mode 100644 tests/shaders/glsl-fs-texturelod-01.frag
>   create mode 100644 tests/shaders/glsl-fs-texturelod-01.shader_test
>   delete mode 100644 tests/shaders/glsl-fs-texturelod-01.vert
>
> diff --git a/tests/all.tests b/tests/all.tests
> index 1a56b67..df56184 100644
> --- a/tests/all.tests
> +++ b/tests/all.tests
> @@ -427,7 +427,6 @@ shaders['glsl-fs-texture2drect-proj3'] = PlainExecTest(['glsl-fs-texture2drect',
>   							'-auto', '-proj3'])
>   shaders['glsl-fs-texture2drect-proj4'] = PlainExecTest(['glsl-fs-texture2drect',
>   							'-auto', '-proj4'])
> -add_plain_test(shaders, 'glsl-fs-texturelod-01')
>   add_plain_test(shaders, 'glsl-fs-user-varying-ff')
>   add_plain_test(shaders, 'glsl-mat-attribute')
>   add_plain_test(shaders, 'glsl-max-varyings')
> diff --git a/tests/shaders/CMakeLists.gl.txt b/tests/shaders/CMakeLists.gl.txt
> index 7d8b12e..9efc26a 100644
> --- a/tests/shaders/CMakeLists.gl.txt
> +++ b/tests/shaders/CMakeLists.gl.txt
> @@ -91,7 +91,6 @@ piglit_add_executable (glsl-fs-texturecube glsl-fs-texturecube.c)
>   piglit_add_executable (glsl-fs-texturecube-2 glsl-fs-texturecube-2.c)
>   piglit_add_executable (glsl-fs-textureenvcolor-statechange glsl-fs-textureenvcolor-statechange.c)
>   piglit_add_executable (glsl-fs-texture2drect glsl-fs-texture2drect.c)
> -piglit_add_executable (glsl-fs-texturelod-01 glsl-fs-texturelod-01.c)
>   piglit_add_executable (glsl-fs-user-varying-ff glsl-fs-user-varying-ff.c)
>   piglit_add_executable (glsl-vs-arrays glsl-vs-arrays.c)
>   piglit_add_executable (glsl-vs-mov-after-deref glsl-vs-mov-after-deref.c)
> diff --git a/tests/shaders/glsl-fs-texturelod-01.c b/tests/shaders/glsl-fs-texturelod-01.c
> deleted file mode 100644
> index aa7719c..0000000
> --- a/tests/shaders/glsl-fs-texturelod-01.c
> +++ /dev/null
> @@ -1,163 +0,0 @@
> -/*
> - * Copyright © 2010 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.
> - */
> -
> -#include "piglit-util.h"
> -
> -/// \name GL State
> -/// \{
> -static GLuint texture_id;
> -static const GLuint texture_unit = 0;
> -static const int num_lod = 4;
> -static GLint lod_uniform;
> -/// \}
> -
> -/// \name Colors
> -/// \{
> -static const int num_colors = 4;
> -static const float color_wheel[4][4] = {
> -	{1, 0, 0, 1}, // red
> -	{0, 1, 0, 1}, // green
> -	{0, 0, 1, 1}, // blue
> -	{1, 1, 1, 1}, // white
> -};
> -/// \}
> -
> -/// \name Piglit State
> -/// \{
> -int piglit_width = 100;
> -int piglit_height = 100;
> -int piglit_window_mode = GLUT_RGB | GLUT_DOUBLE;
> -/// \}
> -
> -static void
> -setup_mipmap_level(int lod, int width, int height)
> -{
> -	GLfloat *texture_data;
> -	const float *color;
> -	int i;
> -	const GLenum internal_format = GL_RGBA;
> -
> -	texture_data = (GLfloat *) malloc(width * height * 4 * sizeof(GLfloat));
> -	assert(texture_data != NULL);
> -
> -	color = color_wheel[lod % num_colors];
> -
> -	for (i = 0; i<  width * height; ++i) {
> -		texture_data[4 * i + 0] = color[0];
> -		texture_data[4 * i + 1] = color[1];
> -		texture_data[4 * i + 2] = color[2];
> -		texture_data[4 * i + 3] = color[3];
> -	}
> -	glTexImage2D(GL_TEXTURE_2D, lod, internal_format, width, height, 0,
> -				 GL_RGBA, GL_FLOAT, texture_data);
> -
> -	free(texture_data);
> -}
> -
> -static void
> -setup_texture()
> -{
> -	int lod;
> -
> -	glGenTextures(1,&texture_id);
> -	glActiveTexture(GL_TEXTURE0 + texture_unit);
> -	glBindTexture(GL_TEXTURE_2D, texture_id);
> -	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
> -	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
> -	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
> -	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
> -
> -	for (lod = 0; lod<  num_lod; ++lod) {
> -		const int level_size = (2 * num_lod)>>  lod;
> -		printf("Creating level %d at size %d\n", lod, level_size);
> -		setup_mipmap_level(lod, level_size, level_size);
> -	}
> -
> -	glEnable(GL_TEXTURE_2D);
> -}
> -
> -enum piglit_result
> -piglit_display()
> -{
> -	int lod;
> -	int x;
> -	GLboolean pass = GL_TRUE;
> -
> -	glClearColor(0.4, 0.4, 0.4, 0.0);
> -	glClear(GL_COLOR_BUFFER_BIT);
> -
> -	for (lod = 0; lod<  num_lod; ++lod) {
> -		x = 10 + lod * 20;
> -		glUniform1f(lod_uniform, lod);
> -		piglit_draw_rect(x, 10, 10, 10);
> -
> -		pass&= piglit_probe_rect_rgba(x, 10, 10, 10,
> -				color_wheel[lod % num_colors]);
> -	}
> -
> -	glutSwapBuffers();
> -
> -	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
> -}
> -
> -void
> -piglit_init(int argc, char **argv)
> -{
> -	GLint vs, fs, prog, sampler_uniform;
> -
> -	if (piglit_get_gl_version()<  20) {
> -		printf("Requires OpenGL 2.0\n");
> -		piglit_report_result(PIGLIT_SKIP);
> -	}
> -	if (!piglit_is_extension_supported("GL_ARB_shader_texture_lod")) {
> -		printf("Requires extension GL_ARB_shader_texture_lod\n");
> -		piglit_report_result(PIGLIT_SKIP);
> -	}
> -
> -	piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE);
> -
> -	setup_texture();
> -
> -	// Compile and use program.
> -	vs = piglit_compile_shader(GL_VERTEX_SHADER,
> -			"shaders/glsl-fs-texturelod-01.vert");
> -	fs = piglit_compile_shader(GL_FRAGMENT_SHADER,
> -			"shaders/glsl-fs-texturelod-01.frag");
> -	prog = piglit_link_simple_program(vs, fs);
> -	glUseProgram(prog);
> -
> -	// Setup uniforms.
> -	sampler_uniform = glGetUniformLocation(prog, "sampler");
> -	if (sampler_uniform == -1) {
> -		printf("error: Unable to get location of uniform 'sampler'\n");
> -		piglit_report_result(PIGLIT_FAIL);
> -		return;
> -	}
> -	glUniform1i(sampler_uniform, texture_unit);
> -	lod_uniform = glGetUniformLocation(prog, "lod");
> -	if (lod_uniform == -1) {
> -		printf("error: Unable to get location of uniform 'lod'\n");
> -		piglit_report_result(PIGLIT_FAIL);
> -		return;
> -	}
> -}
> diff --git a/tests/shaders/glsl-fs-texturelod-01.frag b/tests/shaders/glsl-fs-texturelod-01.frag
> deleted file mode 100644
> index 23d2510..0000000
> --- a/tests/shaders/glsl-fs-texturelod-01.frag
> +++ /dev/null
> @@ -1,16 +0,0 @@
> -/**
> - * \file glsl-fs-texture-lod-01.frag
> - */
> -
> -#version 120
> -#extension GL_ARB_shader_texture_lod: enable
> -
> -uniform sampler2D sampler;
> -uniform float lod;
> -
> -varying vec2 texcoord;
> -
> -void main()
> -{
> -	gl_FragColor = texture2DLod(sampler, texcoord, lod);
> -}
> diff --git a/tests/shaders/glsl-fs-texturelod-01.shader_test b/tests/shaders/glsl-fs-texturelod-01.shader_test
> new file mode 100644
> index 0000000..98c2cb7
> --- /dev/null
> +++ b/tests/shaders/glsl-fs-texturelod-01.shader_test
> @@ -0,0 +1,52 @@
> +[require]
> +GLSL>= 1.20

require GL_ARB_shader_texture_lod

> +
> +[vertex shader]
> +#version 120
> +
> +varying vec2 texcoord;
> +
> +void main()
> +{
> +       texcoord = (vec2(gl_Vertex) + 1.0) / 2.0;
> +       gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
> +}
> +
> +[fragment shader]
> +#version 120
> +#extension GL_ARB_shader_texture_lod: enable
                                          ^^^^^^ require

This isn't strictly necessary, but it seems better.

> +
> +uniform sampler2D sampler;
> +uniform float lod;
> +
> +varying vec2 texcoord;
> +
> +void main()
> +{
> +       gl_FragColor = texture2DLod(sampler, texcoord, lod);
> +}
> +
> +[test]
> +ortho
> +clear color 0.4 0.4 0.4 0.0
> +clear
> +uniform int sampler 0
> +texture miptree 0
> +texparameter 2D min nearest_mipmap_nearest
> +texparameter 2D mag nearest
> +
> +uniform float lod 0
> +draw rect 10 10 10 10
> +probe rgb 15 15 1.0 0.0 0.0
> +
> +uniform float lod 1
> +draw rect 30 10 10 10
> +probe rgb 35 15 0.0 1.0 0.0
> +
> +uniform float lod 2
> +draw rect 50 10 10 10
> +probe rgb 55 15 0.0 0.0 1.0
> +
> +uniform float lod 3
> +draw rect 70 10 10 10
> +probe rgb 75 15 1.0 1.0 1.0
> diff --git a/tests/shaders/glsl-fs-texturelod-01.vert b/tests/shaders/glsl-fs-texturelod-01.vert
> deleted file mode 100644
> index 0902f74..0000000
> --- a/tests/shaders/glsl-fs-texturelod-01.vert
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -/**
> - * \file glsl-fs-texture-lod-01.vert
> - */
> -
> -#version 120
> -
> -varying vec2 texcoord;
> -
> -void main()
> -{
> -	texcoord = (vec2(gl_Vertex) + 1.0) / 2.0;
> -	gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
> -}



More information about the Piglit mailing list