[Piglit] [PATCH] gl-1.5-get-array-attribs: exercise glGetIntegerv, etc. with vertex arrays

Brian Paul brianp at vmware.com
Wed May 9 15:30:05 UTC 2018


This new test checks that glGetInteger/Fload/Double/Booleanv() return the
right values when querying vertex array attributes.

Currently broken in Mesa.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106450
---
 tests/opengl.py                       |   1 +
 tests/spec/gl-1.5/CMakeLists.gl.txt   |   1 +
 tests/spec/gl-1.5/get-array-attribs.c | 135 ++++++++++++++++++++++++++++++++++
 3 files changed, 137 insertions(+)
 create mode 100644 tests/spec/gl-1.5/get-array-attribs.c

diff --git a/tests/opengl.py b/tests/opengl.py
index 825e0bf..cbc4e39 100644
--- a/tests/opengl.py
+++ b/tests/opengl.py
@@ -801,6 +801,7 @@ with profile.test_list.group_manager(
     g(['draw-vertices', 'user'], 'draw-vertices-user')
     g(['isbufferobj'])
     g(['depth-tex-compare'])
+    g(['gl-1.5-get-array-attribs'])
     g(['gl-1.5-normal3b3s-invariance', 'GL_BYTE'],
       'normal3b3s-invariance-byte')
     g(['gl-1.5-normal3b3s-invariance', 'GL_SHORT'],
diff --git a/tests/spec/gl-1.5/CMakeLists.gl.txt b/tests/spec/gl-1.5/CMakeLists.gl.txt
index e072757..6cc69f5 100644
--- a/tests/spec/gl-1.5/CMakeLists.gl.txt
+++ b/tests/spec/gl-1.5/CMakeLists.gl.txt
@@ -8,6 +8,7 @@ link_libraries (
 	${OPENGL_gl_LIBRARY}
 )
 
+piglit_add_executable (gl-1.5-get-array-attribs get-array-attribs.c)
 piglit_add_executable (gl-1.5-normal3b3s-invariance normal3b3s-invariance.c)
 piglit_add_executable (gl-1.5-vertex-buffer-offsets vertex-buffer-offsets.c)
 
diff --git a/tests/spec/gl-1.5/get-array-attribs.c b/tests/spec/gl-1.5/get-array-attribs.c
new file mode 100644
index 0000000..6aa3c78
--- /dev/null
+++ b/tests/spec/gl-1.5/get-array-attribs.c
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2018 VMware, Inc.
+ *
+ * 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.
+ */
+
+/**
+ * Test glGetInteger/Float/Double/Booleanv with vertex array attributes.
+ */
+
+#include "piglit-util-gl.h"
+
+
+PIGLIT_GL_TEST_CONFIG_BEGIN
+	config.supports_gl_compat_version = 15;
+	config.window_visual = PIGLIT_GL_VISUAL_RGBA;
+	config.khr_no_error_support = PIGLIT_NO_ERRORS;
+PIGLIT_GL_TEST_CONFIG_END
+
+
+static bool
+test_get(GLenum pname, GLint expectedValue)
+{
+	GLint i;
+	GLfloat f;
+	GLdouble d;
+	GLboolean b;
+	bool pass = true;
+
+	glGetIntegerv(pname, &i);
+	glGetFloatv(pname, &f);
+	glGetDoublev(pname, &d);
+	glGetBooleanv(pname, &b);
+
+	if (i != expectedValue) {
+		printf("glGetIntegerv(%s) failed: expected %d, got %d\n",
+		       piglit_get_gl_enum_name(pname),
+		       expectedValue, i);
+		pass = false;
+	}
+
+	if (f != (GLfloat) expectedValue) {
+		printf("glGetFloatv(%s) failed: expected %f, got %f\n",
+		       piglit_get_gl_enum_name(pname),
+		       (GLfloat) expectedValue, f);
+		pass = false;
+	}
+
+	if (d != (GLdouble) expectedValue) {
+		printf("glGetDoublev(%s) failed: expected %f, got %f\n",
+		       piglit_get_gl_enum_name(pname),
+		       (GLdouble) expectedValue, f);
+		pass = false;
+	}
+
+	if (b != (GLboolean) !!expectedValue) {
+		printf("glGetBooleanv(%s) failed: expected %d, got %d\n",
+		       piglit_get_gl_enum_name(pname),
+		       !!expectedValue, b);
+		pass = false;
+	}
+
+	return pass;
+}
+
+
+enum piglit_result
+piglit_display(void)
+{
+	/* nothing */
+	return PIGLIT_PASS;
+}
+
+
+void
+piglit_init(int argc, char **argv)
+{
+	bool pass = true;
+	GLubyte dummy[100];
+
+	glVertexPointer(2, GL_FLOAT, 12, dummy);
+	glNormalPointer(GL_FLOAT, 0, dummy);
+	glColorPointer(4, GL_UNSIGNED_BYTE, 16, dummy);
+	glSecondaryColorPointer(3, GL_SHORT, 32, dummy);
+	glTexCoordPointer(3, GL_SHORT, 18, dummy);
+	glEdgeFlagPointer(4, dummy);
+	glIndexPointer(GL_SHORT, 10, dummy);
+	glFogCoordPointer(GL_FLOAT, 8, dummy);
+
+	pass = test_get(GL_VERTEX_ARRAY_SIZE, 2) && pass;
+	pass = test_get(GL_VERTEX_ARRAY_TYPE, GL_FLOAT) && pass;
+	pass = test_get(GL_VERTEX_ARRAY_STRIDE, 12) && pass;
+
+	pass = test_get(GL_NORMAL_ARRAY_TYPE, GL_FLOAT) && pass;
+	pass = test_get(GL_NORMAL_ARRAY_STRIDE, 0) && pass;
+
+	pass = test_get(GL_COLOR_ARRAY_SIZE, 4) && pass;
+	pass = test_get(GL_COLOR_ARRAY_TYPE, GL_UNSIGNED_BYTE) && pass;
+	pass = test_get(GL_COLOR_ARRAY_STRIDE, 16) && pass;
+
+	pass = test_get(GL_SECONDARY_COLOR_ARRAY_SIZE, 3) && pass;
+	pass = test_get(GL_SECONDARY_COLOR_ARRAY_TYPE, GL_SHORT) && pass;
+	pass = test_get(GL_SECONDARY_COLOR_ARRAY_STRIDE, 32) && pass;
+
+	pass = test_get(GL_TEXTURE_COORD_ARRAY_SIZE, 3) && pass;
+	pass = test_get(GL_TEXTURE_COORD_ARRAY_TYPE, GL_SHORT) && pass;
+	pass = test_get(GL_TEXTURE_COORD_ARRAY_STRIDE, 18) && pass;
+
+	pass = test_get(GL_EDGE_FLAG_ARRAY_STRIDE, 4) && pass;
+
+	pass = test_get(GL_INDEX_ARRAY_TYPE, GL_SHORT) && pass;
+	pass = test_get(GL_INDEX_ARRAY_STRIDE, 10) && pass;
+
+	pass = test_get(GL_FOG_COORD_ARRAY_TYPE, GL_FLOAT) && pass;
+	pass = test_get(GL_FOG_COORD_ARRAY_STRIDE, 8) && pass;
+
+	piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL);
+}
-- 
2.7.4



More information about the Piglit mailing list