[Piglit] [PATCH 5/8] shader_runner: Add ability to create textures with per-miplevel colors.
Ian Romanick
idr at freedesktop.org
Thu Apr 5 12:33:42 PDT 2012
On 04/04/2012 01:51 AM, Kenneth Graunke wrote:
> For basic mipmapped texture testing, it's often useful to create
> textures where each miplevel has a unique color.
>
> The next commit will use this to simplify an existing test case, and
> subsequent commits will introduce new tests based on this functionality.
>
> Signed-off-by: Kenneth Graunke<kenneth at whitecape.org>
> ---
> tests/shaders/shader_runner.c | 4 ++++
> tests/util/piglit-util-gl.c | 39 +++++++++++++++++++++++++++++++++++++++
> tests/util/piglit-util.h | 1 +
> 3 files changed, 44 insertions(+), 0 deletions(-)
>
> diff --git a/tests/shaders/shader_runner.c b/tests/shaders/shader_runner.c
> index ee49e41..d5cc220 100644
> --- a/tests/shaders/shader_runner.c
> +++ b/tests/shaders/shader_runner.c
> @@ -1264,6 +1264,10 @@ piglit_display(void)
> glActiveTexture(GL_TEXTURE0 + tex);
> piglit_rgbw_texture(GL_RGBA, w, h, GL_FALSE, GL_FALSE, GL_UNSIGNED_NORMALIZED);
> glEnable(GL_TEXTURE_2D);
> + } else if (sscanf(line, "texture miptree %d",&tex) == 1) {
> + glActiveTexture(GL_TEXTURE0 + tex);
> + piglit_miptree_texture();
> + glEnable(GL_TEXTURE_2D);
> } else if (sscanf(line,
> "texture checkerboard %d %d ( %d , %d ) "
> "( %f , %f , %f , %f ) "
> diff --git a/tests/util/piglit-util-gl.c b/tests/util/piglit-util-gl.c
> index 4270cd6..269ed4d 100644
> --- a/tests/util/piglit-util-gl.c
> +++ b/tests/util/piglit-util-gl.c
> @@ -959,6 +959,45 @@ piglit_checkerboard_texture(GLuint tex, unsigned level,
> }
>
> /**
> + * Generates a 8x8 mipmapped texture whose layers contain solid r, g, b, and w.
> + */
> +GLuint
> +piglit_miptree_texture()
> +{
> + GLfloat *data;
> + int size, i, level;
> + GLuint tex;
> + 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 */
> + };
> +
> + glGenTextures(1,&tex);
> + glBindTexture(GL_TEXTURE_2D, tex);
> + 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);
This seems like a surprising default min filter.
> +
> + for (level = 0; level< 4; ++level) {
> + size = 8>> level;
> +
> + data = malloc(size*size*4*sizeof(GLfloat));
> + for (i = 0; i< size * size; ++i) {
> + memcpy(data + 4 * i, color_wheel[level],
> + 4 * sizeof(GLfloat));
> + }
> + glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA,
> + size, size, 0, GL_RGBA, GL_FLOAT, data);
> + free(data);
> + }
> + return tex;
> +}
> +
> +/**
> * Generates a texture with the given internalFormat, w, h with a
> * teximage of r, g, b w quadrants.
> *
> diff --git a/tests/util/piglit-util.h b/tests/util/piglit-util.h
> index 775dfe2..66fdb2a 100755
> --- a/tests/util/piglit-util.h
> +++ b/tests/util/piglit-util.h
> @@ -253,6 +253,7 @@ GLuint piglit_checkerboard_texture(GLuint tex, unsigned level,
> unsigned width, unsigned height,
> unsigned horiz_square_size, unsigned vert_square_size,
> const float *black, const float *white);
> +GLuint piglit_miptree_texture();
GLuint piglit_miptree_texture(void);
The C vs. C++ rules are different, so you should actually say void in C.
In C++ an empty list is the same as void. In C an empty list means
the parameters aren't known, so you can pass anything.
> GLuint piglit_rgbw_texture(GLenum format, int w, int h, GLboolean mip,
> GLboolean alpha, GLenum basetype);
> GLuint piglit_depth_texture(GLenum target, GLenum format, int w, int h, int d, GLboolean mip);
More information about the Piglit
mailing list