[Piglit] [PATCH] ARB_vertex_attrib_64bit: add doubles support to attributes test
Timothy Arceri
tarceri at itsqueeze.com
Mon Jun 25 08:36:57 UTC 2018
---
tests/general/attribs.c | 68 +++++++++++++++++++++++++++++++++++++++--
1 file changed, 65 insertions(+), 3 deletions(-)
diff --git a/tests/general/attribs.c b/tests/general/attribs.c
index 05a0d4a1e..bf627dece 100644
--- a/tests/general/attribs.c
+++ b/tests/general/attribs.c
@@ -53,6 +53,7 @@ enum {
};
enum {
+ DOUBLE_TYPE,
FLOAT_TYPE,
INT_TYPE,
UINT_TYPE
@@ -120,12 +121,13 @@ static GLboolean test(int x, int y, const char *shaderfunc,
const char *info)
{
static const char *templ = {
+ "%s \n"
"%s \n"
"#extension GL_ARB_explicit_attrib_location : require \n"
"layout(location = 1) in %s attr; \n"
"void main() { \n"
" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; \n"
- " gl_FrontColor = (%s) * vec4(1.0, 1.0, 1.0, 0.5); \n"
+ " gl_FrontColor = vec4(%s %s) * vec4(1.0, 1.0, 1.0, 0.5); \n"
"} \n"
};
GLuint prog, vs;
@@ -139,10 +141,56 @@ static GLboolean test(int x, int y, const char *shaderfunc,
{0.5, 0.3, 0.9, 0.2}
};
+ char *defaults;
+ char *type_string;
+
+ /* From Section 11.1.1 (Vertex Attributes) of the OpenGL 4.6
+ * Compatibility Profile spec:
+ *
+ * "Scalar and vector vertex attribute types and VertexAttrib*
+ * commands used to set the values of the corresponding generic
+ * attribute. values are provided if the values of the vertex
+ * attribute variable are specified with fewer components than
+ * required for the attribute variable. For example, the fourth
+ * component of a variable of type dvec4 will be undefined if
+ * specified using VertexAttribL3dv, or using a vertex array
+ * specified with VertexAttribLPointer and a size of three.
+ *
+ * TODO: We should probably also be doing this for attribute functions
+ * other than doubles.
+ */
+ if (type == DOUBLE_TYPE) {
+ switch (mask) {
+ case R:
+ type_string = "double";
+ defaults = ", dvec3(0.0, 0.0, 1.0)";
+ break;
+ case RG:
+ type_string = "dvec2";
+ defaults = ", dvec2(0.0, 1.0)";
+ break;
+ case RGB:
+ type_string = "dvec3";
+ defaults = ", 1.0";
+ break;
+ case RGBA:
+ type_string = "dvec4";
+ defaults = "";
+ break;
+ default:
+ assert(0);
+ }
+ } else {
+ defaults = "";
+ type_string =
+ type == INT_TYPE ? "ivec4" : type == UINT_TYPE ? "uvec4" : "vec4";
+ }
+
sprintf(vstext, templ,
type != FLOAT_TYPE ? "#version 130" : "",
- type == INT_TYPE ? "ivec4" : type == UINT_TYPE ? "uvec4" : "vec4",
- shaderfunc);
+ type == DOUBLE_TYPE ?
+ "#extension GL_ARB_gpu_shader_fp64: enable\n#extension GL_ARB_vertex_attrib_64bit: enable" : "",
+ type_string, shaderfunc, defaults);
/* Create the shader. */
vs = piglit_compile_shader_text(GL_VERTEX_SHADER, vstext);
@@ -343,6 +391,19 @@ static test_func tests_GL3[] = {
test_glVertexAttribI4ui,
};
+/* ARB_vertex_attrib_64bit */
+DEFINE_TEST(glVertexAttribL1d,, (1, x), "attr", R, DOUBLE_TYPE, "")
+DEFINE_TEST(glVertexAttribL2d,, (1, x, y), "attr", RG, DOUBLE_TYPE, "")
+DEFINE_TEST(glVertexAttribL3d,, (1, x, y, z), "attr", RGB, DOUBLE_TYPE, "")
+DEFINE_TEST(glVertexAttribL4d,, (1, x, y, z, w), "attr", RGBA, DOUBLE_TYPE, "")
+
+static test_func tests_GL_ARB_vertex_attrib_64bit[] = {
+ test_glVertexAttribL1d,
+ test_glVertexAttribL2d,
+ test_glVertexAttribL3d,
+ test_glVertexAttribL4d,
+};
+
/* ARB_vertex_type_2_10_10_10_rev */
/* Packing functions for a signed normalized 2-bit component.
* These are based on equation 2.2 and 2.3 from the opengl specification, see:
@@ -503,6 +564,7 @@ struct test_set {
} test_sets[] = {
{ TESTS(GL2) },
{ TESTS(GL3), 30 },
+ { TESTS(GL_ARB_vertex_attrib_64bit), 32 },
{ TESTS(GL_ARB_vertex_type_2_10_10_10_rev), 0, "GL_ARB_vertex_type_2_10_10_10_rev" },
};
--
2.17.1
More information about the Piglit
mailing list