[Piglit] [PATCH 34/35] util/vbo: Accept integer attribute names

Alejandro PiƱeiro apinheiro at igalia.com
Thu Aug 9 11:36:13 UTC 2018


From: Neil Roberts <nroberts at igalia.com>

---
 tests/util/piglit-vbo.cpp | 28 +++++++++++++++++++++++++---
 1 file changed, 25 insertions(+), 3 deletions(-)

diff --git a/tests/util/piglit-vbo.cpp b/tests/util/piglit-vbo.cpp
index 86d5081de..3ef6b1107 100644
--- a/tests/util/piglit-vbo.cpp
+++ b/tests/util/piglit-vbo.cpp
@@ -131,6 +131,7 @@
 #include <errno.h>
 #include <limits.h>
 #include <ctype.h>
+#include <stdlib.h>
 
 #include "piglit-util.h"
 #include "piglit-util-gl.h"
@@ -312,6 +313,29 @@ public:
 	GLuint index;
 };
 
+static bool
+get_attrib_location(GLuint prog,
+		    const std::string &name,
+		    GLuint *index)
+{
+	errno = 0;
+
+	char *end;
+	unsigned long ul = strtoul(name.c_str(), &end, 10);
+
+	if (errno == 0 && *end == '\0' && ul <= UINT_MAX) {
+		*index = ul;
+		return true;
+	}
+
+	GLint attrib_location = glGetAttribLocation(prog, name.c_str());
+	if (attrib_location == -1)
+		return false;
+
+	*index = attrib_location;
+
+	return true;
+}
 
 /**
  * Build a vertex_attrib_description from a column header, by looking
@@ -408,12 +432,10 @@ vertex_attrib_description::vertex_attrib_description(GLuint prog,
 		this->matrix_index = 0;
 	}
 
-	GLint attrib_location = glGetAttribLocation(prog, name.c_str());
-	if (attrib_location == -1) {
+	if (!get_attrib_location(prog, name, &this->index)) {
 		printf("Unexpected vbo column name.  Got: %s\n", name.c_str());
 		piglit_report_result(PIGLIT_FAIL);
 	}
-	this->index = attrib_location;
 	/* If the type is integral, verify that integer vertex
 	 * attribute support is present.  Note: we treat it as a FAIL
 	 * if support is not present, because it's up to the test to
-- 
2.14.1



More information about the Piglit mailing list