[Piglit] [PATCH 2/4] textureSize: Add support for running these tests in GLSL 1.40 mode.
Kenneth Graunke
kenneth at whitecape.org
Thu Mar 15 15:17:32 PDT 2012
On 03/12/2012 05:49 PM, Eric Anholt wrote:
> ---
> tests/texturing/shaders/common.c | 4 ++-
> tests/texturing/shaders/common.h | 1 +
> tests/texturing/shaders/textureSize.c | 45 ++++++++++++++++++++++++---------
> 3 files changed, 37 insertions(+), 13 deletions(-)
>
> diff --git a/tests/texturing/shaders/common.c b/tests/texturing/shaders/common.c
> index 9a07f30..57a5b48 100644
> --- a/tests/texturing/shaders/common.c
> +++ b/tests/texturing/shaders/common.c
> @@ -28,6 +28,8 @@
> */
> #include "common.h"
>
> +int shader_version = 130;
> +
> /**
> * Load a miplevel's texel data via glTexImage.
> *
> @@ -265,7 +267,7 @@ require_GL_features(enum shader_target test_stage)
> {
> int tex_units;
>
> - piglit_require_GLSL_version(130);
> + piglit_require_GLSL_version(shader_version);
>
> if (swizzling)
> piglit_require_extension("GL_EXT_texture_swizzle");
> diff --git a/tests/texturing/shaders/common.h b/tests/texturing/shaders/common.h
> index 32cf8da..ce1a1a1 100644
> --- a/tests/texturing/shaders/common.h
> +++ b/tests/texturing/shaders/common.h
> @@ -81,6 +81,7 @@ struct sampler_info
>
> /** Whether or not we're using GL_EXT_texture_swizzle */
> bool swizzling;
> +extern int shader_version;
>
> /**
> * Which shader stage to test
> diff --git a/tests/texturing/shaders/textureSize.c b/tests/texturing/shaders/textureSize.c
> index d20776d..ff7f675 100644
> --- a/tests/texturing/shaders/textureSize.c
> +++ b/tests/texturing/shaders/textureSize.c
> @@ -50,6 +50,7 @@ int piglit_width = 150, piglit_height = 30;
> int piglit_window_mode = GLUT_RGBA | GLUT_DOUBLE;
>
> static int lod_location;
> +static int vertex_location;
>
> /**
> * Returns the number of components expected from textureSize().
> @@ -82,10 +83,19 @@ piglit_display()
> bool pass = true;
> int i, l;
> const int size = sampler_size();
> + static const float verts[] = {
> + -1, -1,
> + -1, 1,
> + 1, 1,
> + 1, -1,
> + };
>
> glClearColor(0.5, 0.5, 0.5, 1.0);
> glClear(GL_COLOR_BUFFER_BIT);
>
> + glVertexAttribPointer(vertex_location, 2, GL_FLOAT, GL_FALSE, 0, verts);
> + glEnableVertexAttribArray(vertex_location);
> +
> /* Draw consecutive squares for each mipmap level */
> for (l = 0; l< miplevels; l++) {
> const int x = 10 + l * 20;
> @@ -101,11 +111,13 @@ piglit_display()
>
> piglit_Uniform1i(lod_location, l);
> glViewport(x, 10, 10, 10);
> - piglit_draw_rect(-1, -1, 2, 2);
> + glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
>
> pass&= piglit_probe_rect_rgba(x, 10, 10, 10, expected_color);
> }
>
> + glDisableVertexAttribArray(vertex_location);
> +
> piglit_present_results();
>
> return pass ? PIGLIT_PASS : PIGLIT_FAIL;
> @@ -172,19 +184,20 @@ generate_GLSL(enum shader_target test_stage)
> switch (test_stage) {
> case VS:
> asprintf(&vs_code,
> - "#version 130\n"
> + "#version %d\n"
> "#define ivec1 int\n"
> "uniform int lod;\n"
> "uniform %s tex;\n"
> + "in vec4 vertex;\n"
> "flat out ivec%d size;\n"
> "void main()\n"
> "{\n"
> " size = textureSize(tex, lod);\n"
> - " gl_Position = gl_Vertex;\n"
> + " gl_Position = vertex;\n"
> "}\n",
> - sampler.name, size);
> + shader_version, sampler.name, size);
> asprintf(&fs_code,
> - "#version 130\n"
> + "#version %d\n"
> "#define ivec1 int\n"
> "#define vec1 float\n"
> "flat in ivec%d size;\n"
> @@ -192,17 +205,19 @@ generate_GLSL(enum shader_target test_stage)
> "{\n"
> " gl_FragColor = vec4(0.01 * size,%s 1);\n"
> "}\n",
> - size, zeroes[3 - size]);
> + shader_version, size, zeroes[3 - size]);
> break;
> case FS:
> asprintf(&vs_code,
> - "#version 130\n"
> + "#version %d\n"
> + "in vec4 vertex;\n"
> "void main()\n"
> "{\n"
> - " gl_Position = gl_Vertex;\n"
> - "}\n");
> + " gl_Position = vertex;\n"
> + "}\n",
> + shader_version);
> asprintf(&fs_code,
> - "#version 130\n"
> + "#version %d\n"
> "#define ivec1 int\n"
> "uniform int lod;\n"
> "uniform %s tex;\n"
> @@ -211,7 +226,7 @@ generate_GLSL(enum shader_target test_stage)
> " ivec%d size = textureSize(tex, lod);\n"
> " gl_FragColor = vec4(0.01 * size,%s 1);\n"
> "}\n",
> - sampler.name, size, zeroes[3 - size]);
> + shader_version, sampler.name, size, zeroes[3 - size]);
> break;
> default:
> assert(!"Should not get here.");
> @@ -230,7 +245,7 @@ generate_GLSL(enum shader_target test_stage)
> void
> fail_and_show_usage()
> {
> - printf("Usage: textureSize<vs|fs> <sampler type> [piglit args...]\n");
> + printf("Usage: textureSize [140]<vs|fs> <sampler type> [piglit args...]\n");
> piglit_report_result(PIGLIT_SKIP);
> }
>
> @@ -255,6 +270,11 @@ piglit_init(int argc, char **argv)
> }
> }
>
> + if (strcmp(argv[i], "140") == 0) {
> + shader_version = 140;
> + continue;
> + }
I'm not really sure that it's worth adding a 140 command line option.
I'd be inclined to just force 140 if the sampler type is sampler2DRect
(including i/u variants) or samplerBuffer.
That will have implications on the rest of this series.
Ian/Chad/others may disagree with me though.
Either way, this series is:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
> /* Maybe it's the sampler type? */
> if (!sampler_found&& (sampler_found = select_sampler(argv[i])))
> continue;
> @@ -277,6 +297,7 @@ piglit_init(int argc, char **argv)
>
> tex_location = piglit_GetUniformLocation(prog, "tex");
> lod_location = piglit_GetUniformLocation(prog, "lod");
> + vertex_location = piglit_GetAttribLocation(prog, "vertex");
> piglit_UseProgram(prog);
> piglit_Uniform1i(tex_location, 0);
>
More information about the Piglit
mailing list