summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Graunke <kenneth@whitecape.org>2011-08-18 00:09:29 -0700
committerKenneth Graunke <kenneth@whitecape.org>2011-08-23 11:42:51 -0700
commita35ada7abd11a6db96e5ec08bf2e24199c05a702 (patch)
tree473b2a025017169073735da1dce1f69907d9b475
parent8f104ee6040b8a7d5e2bbbef8c42e690fc8fb2d0 (diff)
Add new FS execution test for textureSize with 2D textures.
More combinations are obvious: 1D, 3D, Cube, 1DShadow, 2DShadow, CubeShadow, 1DArray, 2DArray, 1DArrayShadow, 2DArrayShadow sampler types, as well as NPOT textures, compressed textures...and calling textureSize in the vertex shader. Reviewed-by: Eric Anholt <eric@anholt.net> Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
-rw-r--r--tests/all.tests1
-rw-r--r--tests/spec/glsl-1.30/CMakeLists.txt1
-rw-r--r--tests/spec/glsl-1.30/execution/CMakeLists.gl.txt16
-rw-r--r--tests/spec/glsl-1.30/execution/CMakeLists.txt1
-rw-r--r--tests/spec/glsl-1.30/execution/fs-textureSize-2D.c111
5 files changed, 130 insertions, 0 deletions
diff --git a/tests/all.tests b/tests/all.tests
index a75a728f0..bf271bdb8 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -795,6 +795,7 @@ import_glsl_parser_tests(spec['glsl-1.30'],
os.path.join(generatedTestDir, 'spec', 'glsl-1.30'),
['compiler'])
spec['glsl-1.30']['execution'] = Group()
+add_plain_test(spec['glsl-1.30']['execution'], 'fs-textureSize-2D')
add_shader_test_dir(spec['glsl-1.30']['execution'],
os.path.join(os.path.dirname(__file__), 'spec', 'glsl-1.30', 'execution'),
recursive=True)
diff --git a/tests/spec/glsl-1.30/CMakeLists.txt b/tests/spec/glsl-1.30/CMakeLists.txt
index 4d1c26705..6a9b5ddbf 100644
--- a/tests/spec/glsl-1.30/CMakeLists.txt
+++ b/tests/spec/glsl-1.30/CMakeLists.txt
@@ -1 +1,2 @@
add_subdirectory (linker)
+add_subdirectory (execution)
diff --git a/tests/spec/glsl-1.30/execution/CMakeLists.gl.txt b/tests/spec/glsl-1.30/execution/CMakeLists.gl.txt
new file mode 100644
index 000000000..d8b9e1c13
--- /dev/null
+++ b/tests/spec/glsl-1.30/execution/CMakeLists.gl.txt
@@ -0,0 +1,16 @@
+include_directories(
+ ${GLEXT_INCLUDE_DIR}
+ ${OPENGL_INCLUDE_PATH}
+ ${GLUT_INCLUDE_DIR}
+ ${piglit_SOURCE_DIR}/tests/mesa/util
+ ${piglit_SOURCE_DIR}/tests/util
+)
+
+link_libraries (
+ piglitutil
+ ${OPENGL_gl_LIBRARY}
+ ${OPENGL_glu_LIBRARY}
+ ${GLUT_glut_LIBRARY}
+)
+
+add_executable (fs-textureSize-2D fs-textureSize-2D.c)
diff --git a/tests/spec/glsl-1.30/execution/CMakeLists.txt b/tests/spec/glsl-1.30/execution/CMakeLists.txt
new file mode 100644
index 000000000..144a306f4
--- /dev/null
+++ b/tests/spec/glsl-1.30/execution/CMakeLists.txt
@@ -0,0 +1 @@
+piglit_include_target_api()
diff --git a/tests/spec/glsl-1.30/execution/fs-textureSize-2D.c b/tests/spec/glsl-1.30/execution/fs-textureSize-2D.c
new file mode 100644
index 000000000..150e9ac3e
--- /dev/null
+++ b/tests/spec/glsl-1.30/execution/fs-textureSize-2D.c
@@ -0,0 +1,111 @@
+/*
+ * Copyright © 2011 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.
+ */
+
+/**
+ * \file fs-textureSize.c
+ *
+ * Tests the built-in function textureSize() in the fragment shader.
+ *
+ * Creates a mipmapped 64x32 2D texture and draws a series of squares whose
+ * color contains the width (red) and height (green) of each mipmap level.
+ */
+#include "piglit-util.h"
+
+int piglit_width = 150, piglit_height = 30;
+int piglit_window_mode = GLUT_RGBA | GLUT_DOUBLE;
+
+const int tex_size = 64;
+
+static int lod_location;
+
+static const char vert[] =
+"#version 130\n"
+"void main()\n"
+"{\n"
+" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
+"}\n";
+
+static const char frag[] =
+"#version 130\n"
+"uniform int lod;\n"
+"uniform sampler2D tex;\n"
+"void main()\n"
+"{\n"
+" ivec2 size = textureSize(tex, lod);\n"
+" gl_FragColor = vec4(0.01 * size, 0.0, 1.0);\n"
+"}\n";
+
+static inline float max(float x, float y) { return (x > y) ? x : y; }
+
+enum piglit_result
+piglit_display(void)
+{
+ int l;
+ bool pass = true;
+
+ glClearColor(0.5, 0.5, 0.5, 1.0);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ /* Draw consecutive squares for each mipmap level */
+ for (l = 0; (tex_size >> l) > 0; l++) {
+ const int width = tex_size >> l;
+ const int height = max(width / 2, 1);
+ const float c[] = {0.01*width, 0.01*height, 0.0, 1.0};
+
+ const int x = 10+20*l;
+
+ piglit_Uniform1i(lod_location, l);
+ piglit_draw_rect(x, 10, 10, 10);
+
+ pass &= piglit_probe_rect_rgba(x, 10, 10, 10, c);
+ }
+
+ glutSwapBuffers();
+
+ return pass ? PIGLIT_PASS : PIGLIT_FAIL;
+}
+
+void
+piglit_init(int argc, char **argv)
+{
+ int vs, fs, prog;
+ int tex_location;
+
+ piglit_require_GLSL_version(130);
+
+ glActiveTexture(GL_TEXTURE0);
+ piglit_rgbw_texture(GL_RGBA, tex_size, tex_size / 2, true, false,
+ GL_UNSIGNED_NORMALIZED);
+
+ piglit_ortho_projection(piglit_width, piglit_height, false);
+
+ vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vert);
+ fs = piglit_compile_shader_text(GL_FRAGMENT_SHADER, frag);
+ prog = piglit_link_simple_program(vs, fs);
+
+ tex_location = piglit_GetUniformLocation(prog, "tex");
+ lod_location = piglit_GetUniformLocation(prog, "lod");
+
+ piglit_UseProgram(prog);
+ piglit_Uniform1i(tex_location, 0);
+}