This cuts the runtime for this generator by 3/4 on my system. That's 4 minutes to 1 minute. That's pretty impressive, and for both my system and for our CI system this is a nice improvement. The generated files are the same, minus whitespace changes (diff -NaurBw notes no differences).
While I think the new template is more readable than the original code, and it is definitely faster, it does introduce more code duplication that could be cleaned up in a follow on patch. Signed-off-by: Dylan Baker <[email protected]> --- generated_tests/CMakeLists.txt | 6 +- generated_tests/gen_vs_in_fp64.py | 2 +- generated_tests/templates/gen_vs_in_fp64/base.mako | 27 ---- .../gen_vs_in_fp64/execution.vert.shader_test.mako | 32 ---- .../templates/gen_vs_in_fp64/execution_base.mako | 85 ----------- .../gen_vs_in_fp64/regular.shader_test.mako | 161 +++++++++++++++++++++ .../regular_execution.vert.shader_test.mako | 67 --------- .../gen_vs_in_fp64/regular_shader.vert.mako | 19 --- .../templates/gen_vs_in_fp64/shader.vert.mako | 16 -- .../templates/gen_vs_in_fp64/shader_base.mako | 12 -- 10 files changed, 163 insertions(+), 264 deletions(-) delete mode 100644 generated_tests/templates/gen_vs_in_fp64/base.mako delete mode 100644 generated_tests/templates/gen_vs_in_fp64/execution.vert.shader_test.mako delete mode 100644 generated_tests/templates/gen_vs_in_fp64/execution_base.mako create mode 100644 generated_tests/templates/gen_vs_in_fp64/regular.shader_test.mako delete mode 100644 generated_tests/templates/gen_vs_in_fp64/regular_execution.vert.shader_test.mako delete mode 100644 generated_tests/templates/gen_vs_in_fp64/regular_shader.vert.mako delete mode 100644 generated_tests/templates/gen_vs_in_fp64/shader.vert.mako delete mode 100644 generated_tests/templates/gen_vs_in_fp64/shader_base.mako diff --git a/generated_tests/CMakeLists.txt b/generated_tests/CMakeLists.txt index 4c21c8a..7240572 100644 --- a/generated_tests/CMakeLists.txt +++ b/generated_tests/CMakeLists.txt @@ -192,11 +192,7 @@ piglit_make_generated_tests( vs_in_fp64.list gen_vs_in_fp64.py templates/gen_vs_in_fp64/columns.shader_test.mako - templates/gen_vs_in_fp64/base.mako - templates/gen_vs_in_fp64/execution.vert.shader_test.mako - templates/gen_vs_in_fp64/execution_base.mako - templates/gen_vs_in_fp64/shader.vert.mako - templates/gen_vs_in_fp64/shader_base.mako) + templates/gen_vs_in_fp64/regular.shader_test.mako) # OpenCL Test generators piglit_make_generated_tests( diff --git a/generated_tests/gen_vs_in_fp64.py b/generated_tests/gen_vs_in_fp64.py index bd9e8d6..fcc87f5 100644 --- a/generated_tests/gen_vs_in_fp64.py +++ b/generated_tests/gen_vs_in_fp64.py @@ -292,7 +292,7 @@ class RegularTestTuple(TestTuple): if not self._names_only: with open(filename, 'w') as test_file: test_file.write(TEMPLATES.get_template( - 'regular_execution.vert.shader_test.mako').render_unicode( + 'regular.shader_test.mako').render_unicode( ver=self._ver, in_types=self._in_types, position_order=self._position_order, diff --git a/generated_tests/templates/gen_vs_in_fp64/base.mako b/generated_tests/templates/gen_vs_in_fp64/base.mako deleted file mode 100644 index fb00d8c..0000000 --- a/generated_tests/templates/gen_vs_in_fp64/base.mako +++ /dev/null @@ -1,27 +0,0 @@ -## coding=utf-8 -<%def name="versioning()"><% - if ver == 'GL_ARB_vertex_attrib_64bit': - glsl_version_int = '150' - else: - glsl_version_int = ver - - glsl_version = '{}.{}'.format(glsl_version_int[0], glsl_version_int[1:3]) - - return (glsl_version, glsl_version_int) -%></%def>\ -<%def name="cols(in_type)"><% - if 'mat' in in_type: - if 'x' in in_type: - return int(in_type[-3:][:1]) - else: - return int(in_type[-1:]) - else: - return 1 -%></%def>\ -<%def name="rows(in_type)"><% - if 'vec' in in_type or 'mat' in in_type: - return int(in_type[-1:]) - else: - return 1 -%></%def>\ -${next.body()}\ diff --git a/generated_tests/templates/gen_vs_in_fp64/execution.vert.shader_test.mako b/generated_tests/templates/gen_vs_in_fp64/execution.vert.shader_test.mako deleted file mode 100644 index fc70997..0000000 --- a/generated_tests/templates/gen_vs_in_fp64/execution.vert.shader_test.mako +++ /dev/null @@ -1,32 +0,0 @@ -## coding=utf-8 -<%inherit file="base.mako"/>\ -<% - (glsl_version, glsl_version_int) = self.versioning() -%>\ -[require] -GLSL >= ${glsl_version} -% if ver == 'GL_ARB_vertex_attrib_64bit': -GL_ARB_gpu_shader_fp64 -${ver} -% endif -<%block name="require"/>\ - -[vertex shader] -<%block name="vertex_shader"/>\ - -[fragment shader] -#version 150 - -in vec4 fs_color; -out vec4 color; - -void main() -{ - color = fs_color; -} - -[vertex data] -<%block name="vertex_data"/>\ - -[test]\ -<%block name="test_commands"/>\ diff --git a/generated_tests/templates/gen_vs_in_fp64/execution_base.mako b/generated_tests/templates/gen_vs_in_fp64/execution_base.mako deleted file mode 100644 index b36f7a8..0000000 --- a/generated_tests/templates/gen_vs_in_fp64/execution_base.mako +++ /dev/null @@ -1,85 +0,0 @@ -## coding=utf-8 -<%inherit file="base.mako"/>\ -<% - (glsl_version, glsl_version_int) = self.versioning() - - def rows(in_type): - if 'vec' in in_type or 'mat' in in_type: - return int(in_type[-1:]) - else: - return 1 - - def cols(in_type): - if 'mat' in in_type: - if 'x' in in_type: - return int(in_type[-3:][:1]) - else: - return int(in_type[-1:]) - else: - return 1 -%>\ -<%! from six.moves import range %>\ -[require] -GLSL >= ${glsl_version} -% if ver == 'GL_ARB_vertex_attrib_64bit': -GL_ARB_gpu_shader_fp64 -${ver} -% endif -GL_MAX_VERTEX_ATTRIBS >= ${num_vs_in} -${next.body()}\ -[vertex data] -% for idx, in_type in enumerate(in_types): -% if idx == position_order - 1: -piglit_vertex/vec3/3 \ -% endif -% for i in range(arrays[idx]): -% for j in range(cols(in_type)): -value${idx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}/${in_type}/${rows(in_type)}${'/{}'.format(j) if cols(in_type) > 1 else ''} \ -% endfor -% endfor -% endfor -% if position_order > len(in_types): -piglit_vertex/vec3/3\ -% endif - -% for d in range(len(dvalues)): -% for vertex in ('-1.0 -1.0 0.0', ' 1.0 -1.0 0.0', ' 1.0 1.0 0.0', '-1.0 1.0 0.0'): -% for idx, in_type in enumerate(in_types): -% if idx == position_order - 1: -${vertex} \ -% endif -% for i in range(arrays[idx]): -% for j in range(cols(in_type)): -% for k in range(rows(in_type)): -${dvalues[(d + k) % len(dvalues)] if in_type.startswith('d') else hvalues[(d + k) % 4]} \ -% endfor - \ -% endfor -% endfor -% endfor -% if position_order > len(in_types): -${vertex}\ -% endif - -% endfor -% endfor - -[test] -% for d in range(len(dvalues)): -% for idx, in_type in enumerate(in_types): -% for i in range(arrays[idx]): -uniform ${in_type} expected${idx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}\ -% for j in range(cols(in_type)): -% for k in range(rows(in_type)): - ${dvalues[(d + k) % len(dvalues)] if in_type.startswith('d') else hvalues[(d + k) % 4]}\ -% endfor -% endfor - -% endfor -% endfor -clear color 0.0 0.0 1.0 0.0 -clear -draw arrays GL_TRIANGLE_FAN ${d * 4} 4 -probe all rgba 0.0 1.0 0.0 1.0 - -% endfor diff --git a/generated_tests/templates/gen_vs_in_fp64/regular.shader_test.mako b/generated_tests/templates/gen_vs_in_fp64/regular.shader_test.mako new file mode 100644 index 0000000..b727b5e --- /dev/null +++ b/generated_tests/templates/gen_vs_in_fp64/regular.shader_test.mako @@ -0,0 +1,161 @@ +## encoding=utf-8 +## Copyright ?? 2016 Intel Corporation +## +## 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 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. + +<%! + from six.moves import range + + def _version(ver): + if ver == 'GL_ARB_vertex_attrib_64bit': + glsl_version_int = '150' + else: + glsl_version_int = ver + + glsl_version = '{}.{}'.format(glsl_version_int[0], glsl_version_int[1:3]) + + return (glsl_version, glsl_version_int) + + + def cols(in_type): + if 'mat' in in_type: + if 'x' in in_type: + return int(in_type[-3:][:1]) + else: + return int(in_type[-1:]) + else: + return 1 + + + def rows(in_type): + if 'vec' in in_type or 'mat' in in_type: + return int(in_type[-1:]) + else: + return 1 + +%> +<% glsl, glsl_int = _version(ver) %> + +[require] +GLSL >= ${glsl} +% if ver == 'GL_ARB_vertex_attrib_64bit': + GL_ARB_gpu_shader_fp64 + ${ver} +% endif +GL_MAX_VERTEX_ATTRIBS >= ${num_vs_in} + +[vertex shader] +#version ${glsl_int} +% if ver == 'GL_ARB_vertex_attrib_64bit': + #extension GL_ARB_gpu_shader_fp64 : require + #extension GL_ARB_vertex_attrib_64bit : require +% endif + +% for idx, in_type in enumerate(in_types): + uniform ${in_type} expected${idx}${'[{}]'.format(arrays[idx]) if arrays[idx] - 1 else ''}; +% endfor +% for idx, in_type in enumerate(in_types): + in ${in_type} value${idx}${'[{}]'.format(arrays[idx]) if arrays[idx] - 1 else ''}; +% endfor +in vec3 piglit_vertex; +out vec4 fs_color; + +#define RED vec4(1.0, 0.0, 0.0, 1.0) +#define GREEN vec4(0.0, 1.0, 0.0, 1.0) + +void main() +{ + gl_Position = vec4(piglit_vertex, 1.0); + % for idx, in_type in enumerate(in_types): + if (value${idx} != expected${idx}) { + fs_color = RED; + return; + } + ## XXX: should this have a break? + % endfor + fs_color = GREEN; +} + +[fragment shader] +#version 150 + +in vec4 fs_color; +out vec4 color; + +void main() +{ + color = fs_color; +} + +[vertex data] +% for idx, in_type in enumerate(in_types): + % if idx == position_order - 1: + piglit_vertex/vec3/3 \ + % endif + % for i in range(arrays[idx]): + % for j in range(cols(in_type)): + value${idx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}/${in_type}/${rows(in_type)}${'/{}'.format(j) if cols(in_type) > 1 else ''} \ + % endfor + % endfor +% endfor +% if position_order > len(in_types): + piglit_vertex/vec3/3\ +% endif + +% for d in range(len(dvalues)): + % for vertex in ('-1.0 -1.0 0.0', ' 1.0 -1.0 0.0', ' 1.0 1.0 0.0', '-1.0 1.0 0.0'): + % for idx, in_type in enumerate(in_types): + % if idx == position_order - 1: + ${vertex} \ + % endif + % for i in range(arrays[idx]): + % for j in range(cols(in_type)): + % for k in range(rows(in_type)): + ${dvalues[(d + (i * cols(in_type) + j) * rows(in_type) + k) % len(dvalues)] if in_type.startswith('d') else hvalues[(d + (i * cols(in_type) + j) * rows(in_type) + k) % len(hvalues)]} \ + % endfor + \ + % endfor + % endfor + % endfor + % if position_order > len(in_types): + ${vertex}\ + % endif + + % endfor +% endfor + +[test] +% for d in range(len(dvalues)): + + % for idx, in_type in enumerate(in_types): + % for i in range(arrays[idx]): + uniform ${in_type} expected${idx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}\ + % for j in range(cols(in_type)): + % for k in range(rows(in_type)): + ${dvalues[(d + (i * cols(in_type) + j) * rows(in_type) + k) % len(dvalues)] if in_type.startswith('d') else hvalues[(d + (i * cols(in_type) + j) * rows(in_type) + k) % len(hvalues)]}\ + % endfor + % endfor + + % endfor + % endfor + clear color 0.0 0.0 1.0 0.0 + clear + draw arrays GL_TRIANGLE_FAN ${d * 4} 4 + probe all rgba 0.0 1.0 0.0 1.0 +% endfor diff --git a/generated_tests/templates/gen_vs_in_fp64/regular_execution.vert.shader_test.mako b/generated_tests/templates/gen_vs_in_fp64/regular_execution.vert.shader_test.mako deleted file mode 100644 index d3fd08c..0000000 --- a/generated_tests/templates/gen_vs_in_fp64/regular_execution.vert.shader_test.mako +++ /dev/null @@ -1,67 +0,0 @@ -## coding=utf-8 -<%inherit file="execution.vert.shader_test.mako"/>\ -<%! from six.moves import range %>\ -<%block name="require">\ -GL_MAX_VERTEX_ATTRIBS >= ${num_vs_in} -</%block> -<%block name="vertex_data">\ -% for idx, in_type in enumerate(in_types): -% if idx == position_order - 1: -piglit_vertex/vec3/3 \ -% endif -% for i in range(arrays[idx]): -% for j in range(self.cols(in_type)): -value${idx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}/${in_type}/${self.rows(in_type)}${'/{}'.format(j) if self.cols(in_type) > 1 else ''} \ -% endfor -% endfor -% endfor -% if position_order > len(in_types): -piglit_vertex/vec3/3\ -% endif - -% for d in range(len(dvalues)): -% for vertex in ('-1.0 -1.0 0.0', ' 1.0 -1.0 0.0', ' 1.0 1.0 0.0', '-1.0 1.0 0.0'): -% for idx, in_type in enumerate(in_types): -% if idx == position_order - 1: -${vertex} \ -% endif -% for i in range(arrays[idx]): -% for j in range(self.cols(in_type)): -% for k in range(self.rows(in_type)): -${dvalues[(d + (i * self.cols(in_type) + j) * self.rows(in_type) + k) % len(dvalues)] if in_type.startswith('d') else hvalues[(d + (i * self.cols(in_type) + j) * self.rows(in_type) + k) % len(hvalues)]} \ -% endfor - \ -% endfor -% endfor -% endfor -% if position_order > len(in_types): -${vertex}\ -% endif - -% endfor -% endfor -</%block> -<%block name="test_commands">\ -% for d in range(len(dvalues)): - -% for idx, in_type in enumerate(in_types): -% for i in range(arrays[idx]): -uniform ${in_type} expected${idx}${'[{}]'.format(i) if arrays[idx] > 1 else ''}\ -% for j in range(self.cols(in_type)): -% for k in range(self.rows(in_type)): - ${dvalues[(d + (i * self.cols(in_type) + j) * self.rows(in_type) + k) % len(dvalues)] if in_type.startswith('d') else hvalues[(d + (i * self.cols(in_type) + j) * self.rows(in_type) + k) % len(hvalues)]}\ -% endfor -% endfor - -% endfor -% endfor -clear color 0.0 0.0 1.0 0.0 -clear -draw arrays GL_TRIANGLE_FAN ${d * 4} 4 -probe all rgba 0.0 1.0 0.0 1.0 -% endfor -</%block> -<%block name="vertex_shader">\ -<%include file="regular_shader.vert.mako"/>\ -</%block> - diff --git a/generated_tests/templates/gen_vs_in_fp64/regular_shader.vert.mako b/generated_tests/templates/gen_vs_in_fp64/regular_shader.vert.mako deleted file mode 100644 index 49fe2d6..0000000 --- a/generated_tests/templates/gen_vs_in_fp64/regular_shader.vert.mako +++ /dev/null @@ -1,19 +0,0 @@ -## coding=utf-8 -<%inherit file="shader.vert.mako"/>\ -<%block name="global_variables">\ -% for idx, in_type in enumerate(in_types): -uniform ${in_type} expected${idx}${'[{}]'.format(arrays[idx]) if arrays[idx] - 1 else ''}; -% endfor - -% for idx, in_type in enumerate(in_types): -in ${in_type} value${idx}${'[{}]'.format(arrays[idx]) if arrays[idx] - 1 else ''}; -% endfor -</%block> -<%block name="main">\ -% for idx, in_type in enumerate(in_types): - if (value${idx} != expected${idx}) { - fs_color = RED; - return; - } -% endfor -</%block> diff --git a/generated_tests/templates/gen_vs_in_fp64/shader.vert.mako b/generated_tests/templates/gen_vs_in_fp64/shader.vert.mako deleted file mode 100644 index 3f80c71..0000000 --- a/generated_tests/templates/gen_vs_in_fp64/shader.vert.mako +++ /dev/null @@ -1,16 +0,0 @@ -## coding=utf-8 -<%inherit file="shader_base.mako"/>\ -<%block name="global_variables"/>\ - -in vec3 piglit_vertex; -out vec4 fs_color; - -#define RED vec4(1.0, 0.0, 0.0, 1.0) -#define GREEN vec4(0.0, 1.0, 0.0, 1.0) - -void main() -{ - gl_Position = vec4(piglit_vertex, 1.0); -<%block name="main"/>\ - fs_color = GREEN; -} diff --git a/generated_tests/templates/gen_vs_in_fp64/shader_base.mako b/generated_tests/templates/gen_vs_in_fp64/shader_base.mako deleted file mode 100644 index a86d5eb..0000000 --- a/generated_tests/templates/gen_vs_in_fp64/shader_base.mako +++ /dev/null @@ -1,12 +0,0 @@ -## coding=utf-8 -<%inherit file="base.mako"/>\ -<% - (glsl_version, glsl_version_int) = self.versioning() -%>\ -#version ${glsl_version_int} -% if ver == 'GL_ARB_vertex_attrib_64bit': -#extension GL_ARB_gpu_shader_fp64 : require -#extension GL_ARB_vertex_attrib_64bit : require -% endif - -${next.body()}\ -- 2.8.3
_______________________________________________ Piglit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/piglit
