[Piglit] [PATCH] Add simple glPolygonOffset test

Kenneth Graunke kenneth at whitecape.org
Fri Jun 21 21:50:08 PDT 2013


From: Keith Packard <keithp at keithp.com>

This isn't fancy, it just sets the polygon offset and then draws one
object on top of another. Tests combinations of lines/points/fills.

v2 [Ken]:
- Rebase onto Piglit master, reworking includes and config section now
  that we use Waffle for the framework.  Fix author and copyright date.
  Remove nested function (suggested by Brian Paul).  Use
  piglit_present_results().  Use stdbool rather than GLboolean.

Signed-off-by: Keith Packard <keithp at keithp.com>
Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
---
 tests/all.tests                 |   1 +
 tests/general/CMakeLists.gl.txt |   1 +
 tests/general/polygon-offset.c  | 122 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 124 insertions(+)
 create mode 100644 tests/general/polygon-offset.c

Keith sent this to the list a year ago, but there was some review feedback,
and it looks like we never received a v2 implementing that feedback, so the
patch got dropped on the floor.  Some recent Mesa patches made me think to
revive it, so here it is again.

diff --git a/tests/all.tests b/tests/all.tests
index 9c928a0..c8ff942 100644
--- a/tests/all.tests
+++ b/tests/all.tests
@@ -544,6 +544,7 @@ add_concurrent_test(gl11, 'masked-clear')
 add_plain_test(gl11, 'point-line-no-cull')
 add_plain_test(gl11, 'polygon-mode')
 add_concurrent_test(gl11, 'polygon-mode-offset')
+add_plain_test(gl11, 'polygon-offset')
 add_concurrent_test(gl11, 'push-pop-texture-state')
 add_concurrent_test(gl11, 'quad-invariance')
 add_msaa_visual_plain_tests(gl11, 'read-front')
diff --git a/tests/general/CMakeLists.gl.txt b/tests/general/CMakeLists.gl.txt
index 98e3271..1933b13 100644
--- a/tests/general/CMakeLists.gl.txt
+++ b/tests/general/CMakeLists.gl.txt
@@ -93,6 +93,7 @@ piglit_add_executable (pbo-teximage-tiling-2 pbo-teximage-tiling-2.c)
 piglit_add_executable (point-line-no-cull point-line-no-cull.c)
 piglit_add_executable (polygon-mode-offset polygon-mode-offset.c)
 piglit_add_executable (polygon-mode polygon-mode.c)
+piglit_add_executable (polygon-offset polygon-offset.c)
 piglit_add_executable (primitive-restart primitive-restart.c)
 piglit_add_executable (primitive-restart-draw-mode primitive-restart-draw-mode.c)
 piglit_add_executable (provoking-vertex provoking-vertex.c)
diff --git a/tests/general/polygon-offset.c b/tests/general/polygon-offset.c
new file mode 100644
index 0000000..da3a069
--- /dev/null
+++ b/tests/general/polygon-offset.c
@@ -0,0 +1,122 @@
+/*
+ * Copyright © 2012 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.
+ *
+ * Authors:
+ *    Keith Packard <keithp at keithp.com>
+ */
+
+#include "piglit-util-gl-common.h"
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+
+	config.supports_gl_compat_version = 10;
+
+	config.window_width = 400;
+	config.window_height = 300;
+	config.window_visual = PIGLIT_GL_VISUAL_RGB | PIGLIT_GL_VISUAL_DOUBLE | PIGLIT_GL_VISUAL_DEPTH;
+
+PIGLIT_GL_TEST_CONFIG_END
+
+void
+piglit_init(int argc, char **argv)
+{
+	piglit_ortho_projection(piglit_width, piglit_height, false);
+
+	glShadeModel(GL_FLAT);
+	glClearColor(0.2, 0.2, 0.2, 1.0);
+
+}
+
+float red[3] = {1.0, 0.0, 0.0};
+float blue[3] = {0.0, 0.0, 1.0};
+
+#define SIZE	40
+#define SPACE	50
+
+#define X(x)	((x) * SPACE + SIZE/2)
+#define Y(y)	((y) * SPACE + SIZE/2)
+
+int	line_width;
+
+static void
+do_rect(int x, int y, float color[3], int mode)
+{
+	glColor3fv(color);
+	glPolygonMode(GL_FRONT_AND_BACK, mode);
+	piglit_draw_rect_z(0, X(x), Y(y), SIZE, SIZE);
+}
+
+static int
+check(int x, int y, float color[3])
+{
+	return piglit_probe_pixel_rgb(X(x) + SIZE-line_width/4, Y(y) + SIZE - line_width/4, color);
+}
+
+static int poly_mode[3] = { GL_FILL, GL_LINE, GL_POINT };
+
+enum piglit_result
+piglit_display(void)
+{
+	int x = 0, y = 0;
+	int line_width_range[2];
+	int point_size_range[2];
+
+	bool pass = true;
+	int first_mode;
+	int second_mode;
+	int over;
+
+	glEnable(GL_DEPTH_TEST);
+	glDepthFunc(GL_LESS);
+	glGetIntegerv(GL_ALIASED_LINE_WIDTH_RANGE, line_width_range);
+	line_width = line_width_range[1];
+	glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, point_size_range);
+	if (line_width > point_size_range[1])
+		line_width = point_size_range[1];
+	glLineWidth(line_width);
+	glPointSize(line_width);
+	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+	glEnable(GL_POLYGON_OFFSET_FILL);
+	glEnable(GL_POLYGON_OFFSET_POINT);
+	glEnable(GL_POLYGON_OFFSET_LINE);
+
+	for (first_mode = 0; first_mode < 3; first_mode++) {
+		for (second_mode = 0; second_mode < 3; second_mode++) {
+			for (over = 0; over < 2; over++) {
+				glPolygonOffset(0.0, 0.0);
+				do_rect(x, y, red, poly_mode[first_mode]);
+				glPolygonOffset(0.0, over ? -1.0 : 1.0);
+				do_rect(x, y, blue, poly_mode[second_mode]);
+				pass = pass && check(x, y, over ? blue : red);
+
+				if (++x == 4) {
+					x = 0;
+					y++;
+				}
+			}
+		}
+	}
+
+	piglit_present_results();
+
+	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
+}
-- 
1.8.3.1



More information about the Piglit mailing list