[Piglit] [PATCH 17/21] gen_interpolation_tests.py: Use mako to generate tests
Dylan Baker
baker.dylan.c at gmail.com
Mon Nov 24 13:17:36 PST 2014
This patch converts gen_interpolation_tests from concatenating a ton of
strings to generating it's output with a mako template. There are
cosmetic changes to the output file.
Using mako is possibly a little faster, but mainly has the benefit of
being much more readable than a long series of string concatenations,
even at the cost of a little more code.
Signed-off-by: Dylan Baker <dylanx.c.baker at intel.com>
---
generated_tests/gen_interpolation_tests.py | 155 ++++++++++++++++-------------
1 file changed, 84 insertions(+), 71 deletions(-)
diff --git a/generated_tests/gen_interpolation_tests.py b/generated_tests/gen_interpolation_tests.py
index 3bc8ffc..4d8fc54 100644
--- a/generated_tests/gen_interpolation_tests.py
+++ b/generated_tests/gen_interpolation_tests.py
@@ -1,6 +1,6 @@
# coding=utf-8
#
-# Copyright © 2011 Intel Corporation
+# Copyright © 2011, 2014 Intel Corporation
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
@@ -64,6 +64,86 @@
# This program outputs, to stdout, the name of each file it generates.
import os
+import textwrap
+
+from mako.template import Template
+
+TEMPLATE = Template(textwrap.dedent("""\
+%if args.builtin_variable:
+# Test proper interpolation of ${args.vs_variable}
+%else:
+# Test proper interpolation of a non-built-in variable
+%endif
+%if args.interpolation_qualifier:
+# When qualified with ${args.interpolation_qualifier}
+%else:
+# When no interpolation qualifier present
+%endif
+# And ShadeModel is ${args.shade_model}
+%if args.clipping == 'fixed':
+# And clipping via fixed planes
+%elif args.clipping == 'vertex':
+# And clipping via gl_ClipVertex
+%elif args.clipping == 'distance':
+# And clipping via gl_ClipDistance
+%endif
+
+[require]
+GLSL >= ${args.glsl_version}
+
+[vertex shader]
+${args.vs_input} vec4 vertex;
+${args.vs_input} vec4 input_data;
+% if args.interpolation_qualifier or not args.builtin_variable:
+${args.interpolation_qualifier} ${args.vs_output} vec4 ${args.vs_variable};
+% endif
+
+void main()
+{
+ gl_Position = gl_ModelViewProjectionMatrix * vertex;
+ ${args.vs_variable} = input_data;
+ %if args.clipping == 'distance':
+ gl_ClipDistance[0] = -1.75 - vertex.z;
+ %elif args.clipping == 'vertex':
+ gl_ClipVertex = vertex;
+ %endif
+}
+
+[fragment shader]
+% if args.interpolation_qualifier or not args.builtin_variable:
+${args.interpolation_qualifier} ${args.fs_input} vec4 ${args.fs_variable};
+% endif
+
+void main()
+{
+ gl_FragColor = ${args.fs_variable};
+}
+
+[vertex data]
+% for v in args.vertex_data():
+${v}
+% endfor
+
+[test]
+frustum -${args.frustum_near} ${args.frustum_near} -${args.frustum_near} ${args.frustum_near} ${args.frustum_near} ${args.frustum_far}
+clear color 0.0 0.0 0.0 0.0
+clear
+enable GL_VERTEX_PROGRAM_TWO_SIDE
+shade model ${args.shade_model}
+
+% if args.clipping == 'distance':
+enable GL_CLIP_PLANE0
+% elif args.clipping == 'vertex':
+enable GL_CLIP_PLANE0
+clip plane 0 0.0 0.0 -1.0 -1.75
+% endif
+
+draw arrays GL_TRIANGLES 0 3
+
+% for x, y, r, g, b, a in args.probe_data():
+relative probe rgba (${x}, ${y}) (${r}, ${g}, ${b}, ${a})
+% endfor
+"""))
class Test(object):
@@ -255,88 +335,21 @@ class Test(object):
yield x2d, y2d, b3d_0, b3d_1, b3d_2, 1.0
def generate(self):
- if self.builtin_variable:
- test = '# Test proper interpolation of {0}\n'.format(
- self.vs_variable)
- else:
- test = '# Test proper interpolation of a non-built-in variable\n'
- if self.interpolation_qualifier:
- test += '# When qualified with {0!r}\n'.format(
- self.interpolation_qualifier)
- else:
- test += '# When no interpolation qualifier present\n'
- test += '# And ShadeModel is {0!r}\n'.format(self.shade_model)
- if self.clipping == 'fixed':
- test += '# And clipping via fixed planes\n'
- elif self.clipping == 'vertex':
- test += '# And clipping via gl_ClipVertex\n'
- elif self.clipping == 'distance':
- test += '# And clipping via gl_ClipDistance\n'
- else:
- assert self.clipping is None
- test += '[require]\n'
- test += 'GLSL >= {0}\n'.format(self.glsl_version)
- test += '\n'
- test += '[vertex shader]\n'
- test += '{0} vec4 vertex;\n'.format(self.vs_input)
- test += '{0} vec4 input_data;\n'.format(self.vs_input)
- if self.interpolation_qualifier or not self.builtin_variable:
- test += '{0} {1} vec4 {2};'.format(
- self.interpolation_qualifier or '',
- self.vs_output, self.vs_variable).strip() + '\n'
- test += 'void main()\n'
- test += '{\n'
- test += ' gl_Position = gl_ModelViewProjectionMatrix * vertex;\n'
- test += ' {0} = input_data;\n'.format(self.vs_variable)
- if self.clipping == 'distance':
- test += ' gl_ClipDistance[0] = -1.75 - vertex.z;\n'
- elif self.clipping == 'vertex':
- test += ' gl_ClipVertex = vertex;\n'
- test += '}\n'
- test += '\n'
- test += '[fragment shader]\n'
- if self.interpolation_qualifier or not self.builtin_variable:
- test += '{0} {1} vec4 {2};'.format(
- self.interpolation_qualifier or '',
- self.fs_input, self.fs_variable).strip() + '\n'
- test += 'void main()\n'
- test += '{\n'
- test += ' gl_FragColor = {0};\n'.format(self.fs_variable)
- test += '}\n'
- test += '\n'
- test += '[vertex data]\n'
- test += ''.join(s + '\n' for s in self.vertex_data())
- test += '\n'
- test += '[test]\n'
- test += 'frustum -{0} {0} -{0} {0} {0} {1}\n'.format(
- self.frustum_near, self.frustum_far)
- test += 'clear color 0.0 0.0 0.0 0.0\n'
- test += 'clear\n'
- test += 'enable GL_VERTEX_PROGRAM_TWO_SIDE\n'
- test += 'shade model {0}\n'.format(self.shade_model)
- if self.clipping == 'distance' or self.clipping == 'vertex':
- test += 'enable GL_CLIP_PLANE0\n'
- if self.clipping == 'vertex':
- test += 'clip plane 0 0.0 0.0 -1.0 -1.75\n'
- test += 'draw arrays GL_TRIANGLES 0 3\n'
- for x, y, r, g, b, a in self.probe_data():
- test += ('relative probe rgba ({0}, {1}) ({2}, {3}, {4}, {5})\n'
- .format(x, y, r, g, b, a))
filename = self.filename()
dirname = os.path.dirname(filename)
if not os.path.exists(dirname):
os.makedirs(dirname)
with open(filename, 'w') as f:
- f.write(test)
+ f.write(TEMPLATE.render(args=self))
def all_tests():
- for interpolation_qualifier in ['flat', 'smooth', 'noperspective', None]:
+ for interpolation_qualifier in ['flat', 'smooth', 'noperspective', '']:
for variable in ['gl_FrontColor', 'gl_BackColor',
'gl_FrontSecondaryColor', 'gl_BackSecondaryColor',
'other']:
for shade_model in ['smooth', 'flat']:
- for clipping in ['vertex', 'distance', 'fixed', None]:
+ for clipping in ['vertex', 'distance', 'fixed', '']:
yield Test(interpolation_qualifier, variable, shade_model,
clipping)
--
2.1.3
More information about the Piglit
mailing list