+ f = open(template_file_name)
+ template = f.read()
+ f.close()
+
+ test_file_name = dirname = os.path.join('spec',
+ 'glsl-{}.{}'.format(major,
minor),
+ 'execution',
+ 'uniform-initializer',
+
'{}-{}{}.shader_test'.format(target, base_name, t))
+ print test_file_name
+
+ dirname = os.path.dirname(test_file_name)
+ if not os.path.exists(dirname):
+ os.makedirs(dirname)
+
+ # Generate the test vectors. This is a list of tuples. Each
+ # tuple is a type name paired with a value. The value is
+ # formatted as a GLSL constructor.
+ #
+ # A set of types and values is also generated that can be set via
+ # the OpenGL API. Some of the tests use this information.
+ test_vectors = []
+ api_vectors = []
+ j = 0
+ for (type, num_values) in type_list:
+ numbers = []
+ alt_numbers = []
+ for i in range(num_values):
+ numbers.append(get_value(type, i + j))
+ alt_numbers.append(get_value(type, i + j + 7))
+
+ value = "{0}({1})".format(type, ", ".join(numbers))
+
+ api_type = type;
+ if type == "bool":
+ api_type = "int"
+ elif type[0] == 'b':
+ api_type = "ivec{}".format(type[-1])
+
+ if type[-1] in ["2", "3", "4"]:
+ name = "".join(["u", type[0], type[-1]])
+ else:
+ name = "".join(["u", type[0]])
+
+ test_vectors.append((type, name, value))
+ api_vectors.append((api_type, name, alt_numbers))
+ j = j + 1
+
+ f = open(test_file_name, "w")
+ f.write(Template(template).render(type_list = test_vectors,
+ api_types = api_vectors,
+ major = major,
+ minor = minor))
+ f.close()
+
+
+def generate_array_tests(type_list, base_name, major, minor):
+ for target in ("vs", "fs"):
+ template_file_name =
"uniform-initializer-templates/{}-initializer.template".format(target)
+ f = open(template_file_name)
+ template = f.read()
+ f.close()
+
+ test_file_name = dirname = os.path.join('spec',
+ 'glsl-{}.{}'.format(major,
minor),
+ 'execution',
+ 'uniform-initializer',
+
'{}-{}-array.shader_test'.format(target, base_name))
+ print test_file_name
+
+ dirname = os.path.dirname(test_file_name)
+ if not os.path.exists(dirname):
+ os.makedirs(dirname)
+
+ test_vectors = []
+ for (type, num_values) in type_list:
+
+ constructor_parts = []
+ for element in range(2):
+ numbers = []
+ for i in range(num_values):
+ numbers.append(get_value(type, i))
+
+ constructor_parts.append("{0}({1})".format(type, ",
".join(numbers)))
+
+ if type[-1] in ["2", "3", "4"]:
+ name = "".join(["u", type[0], type[-1]])
+ else:
+ name = "".join(["u", type[0]])
+
+ array_type = "".join([format(type), "[2]"])
+ value = "{}({})".format(array_type, ", ".join(constructor_parts))
+ test_vectors.append((array_type, name, value))
+
+ f = open(test_file_name, "w")
+ f.write(Template(template).render(type_list = test_vectors,
+ major = major,
+ minor = minor))
+ f.close()
+
+# These are a set of pseudo random values used by the number sequence
+# generator. See get_value above.
+random_numbers = (0.78685, 0.89828, 0.36590, 0.92504, 0.48998, 0.27989,
+ 0.08693, 0.48144, 0.87644, 0.18080, 0.95147, 0.18892,
+ 0.45851, 0.76423, 0.78659, 0.97998, 0.24352, 0.60922,
+ 0.45241, 0.33045, 0.27233, 0.92331, 0.63593, 0.67826,
+ 0.12195, 0.24853, 0.35977, 0.41759, 0.79119, 0.54281,
+ 0.04089, 0.03877, 0.58445, 0.43017, 0.58635, 0.48151,
+ 0.58778, 0.37033, 0.47464, 0.17470, 0.18308, 0.49466,
+ 0.45838, 0.30337, 0.71273, 0.45083, 0.88339, 0.47350,
+ 0.86539, 0.48355, 0.92923, 0.79107, 0.77266, 0.71677,
+ 0.79860, 0.95149, 0.05604, 0.16863, 0.14072, 0.29028,
+ 0.57637, 0.13572, 0.36011, 0.65431, 0.38951, 0.73245,
+ 0.69497, 0.76041, 0.31016, 0.48708, 0.96677, 0.58732,
+ 0.33741, 0.73691, 0.24445, 0.35686, 0.72645, 0.65438,
+ 0.00824, 0.00923, 0.87650, 0.43315, 0.67256, 0.66939,
+ 0.87706, 0.73880, 0.96248, 0.24148, 0.24126, 0.24673,
+ 0.18999, 0.10330, 0.78826, 0.23209, 0.59548, 0.23134,
+ 0.72414, 0.88036, 0.54498, 0.32668, 0.02967, 0.12643)
+
+all_templates = ("",
+ )
+
+bool_types = [("bool", 1), ("bvec2", 2), ("bvec3", 3), ("bvec4", 4)]
+int_types = [("int", 1), ("ivec2", 2), ("ivec3", 3), ("ivec4", 4)]
+float_types = [("float", 1), ("vec2", 2), ("vec3", 3), ("vec4", 4)]
+uint_types = [("uint", 1), ("uvec2", 2), ("uvec3", 3), ("uvec4", 4)]
+mat2_types = [("mat2x2", 4), ("mat2x3", 6), ("mat2x4", 8)]
+mat3_types = [("mat3x2", 6), ("mat3x3", 9), ("mat3x4", 12)]
+mat4_types = [("mat4x2", 8), ("mat4x3", 12), ("mat4x4", 16)]
+
+for (types, base_name) in [(bool_types, "bool"),
+ (int_types, "int"),
+ (float_types, "float"),
+ (mat2_types, "mat2"),
+ (mat3_types, "mat3"),
+ (mat4_types, "mat4")]:
+ generate_tests(types, base_name, 1, 20)
+ generate_array_tests(types, base_name, 1, 20)
+
+generate_tests(uint_types, "uint", 1, 30)
+generate_array_tests(uint_types, "uint", 1, 30)
diff --git
a/generated_tests/uniform-initializer-templates/fs-initializer.template
b/generated_tests/uniform-initializer-templates/fs-initializer.template
new file mode 100644
index 0000000..9d78e36
--- /dev/null
+++ b/generated_tests/uniform-initializer-templates/fs-initializer.template
@@ -0,0 +1,34 @@
+[require]
+GLSL>= ${"{}.{}".format(major, minor)}
+
+[vertex shader]
+#version ${"{}{}".format(major, minor)}
+
+void main()
+{
+ gl_Position = gl_Vertex;
+}
+
+[fragment shader]
+#version ${"{}{}".format(major, minor)}
+
+% for (type, name, value) in type_list:
+uniform ${type} ${name} = ${value};
+% endfor
+
+void main()
+{
+ if ((${type_list[0][1]} == ${type_list[0][2]})
+% for (type, name, value) in type_list[1:-1]:
+&& (${name} == ${value})
+% endfor
+&& (${type_list[-1][1]} == ${type_list[-1][2]})) {
+ gl_FragColor = vec4(0, 1, 0, 1);
+ } else {
+ gl_FragColor = vec4(1, 0, 0, 1);
+ }
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgb 0 1 0
diff --git
a/generated_tests/uniform-initializer-templates/vs-initializer.template
b/generated_tests/uniform-initializer-templates/vs-initializer.template
new file mode 100644
index 0000000..dd01cde
--- /dev/null
+++ b/generated_tests/uniform-initializer-templates/vs-initializer.template
@@ -0,0 +1,38 @@
+[require]
+GLSL>= ${"{}.{}".format(major, minor)}
+
+[vertex shader]
+#version ${"{}{}".format(major, minor)}
+varying vec4 color;
+
+% for (type, name, value) in type_list:
+uniform ${type} ${name} = ${value};
+% endfor
+
+void main()
+{
+ if ((${type_list[0][1]} == ${type_list[0][2]})
+% for (type, name, value) in type_list[1:-1]:
+&& (${name} == ${value})
+% endfor
+&& (${type_list[-1][1]} == ${type_list[-1][2]})) {
+ color = vec4(0, 1, 0, 1);
+ } else {
+ color = vec4(1, 0, 0, 1);
+ }
+
+ gl_Position = gl_Vertex;
+}
+
+[fragment shader]
+#version ${"{}{}".format(major, minor)}
+varying vec4 color;
+
+void main()
+{
+ gl_FragColor = color;
+}
+
+[test]
+draw rect -1 -1 2 2
+probe all rgb 0 1 0
--
1.7.6.5
_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit