diff options
author | Lionel Landwerlin <lionel.g.landwerlin@intel.com> | 2016-12-01 15:51:20 +0000 |
---|---|---|
committer | Lionel Landwerlin <lionel.g.landwerlin@intel.com> | 2017-01-10 15:11:02 +0000 |
commit | 2de1fff04e7061543684b70a14061a4bfeaa4ad4 (patch) | |
tree | 4813c80d5601b7c1de1f98b00afe9cbc89158f35 /generated_tests | |
parent | ed153b51b57762e43d44e8f49dbe9bf0422e1400 (diff) |
generated_tests: new compiler tests for INTEL_conservative_rasterization
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Plamena Manolova <plamena.manolova@intel.com>
Diffstat (limited to 'generated_tests')
-rw-r--r-- | generated_tests/CMakeLists.txt | 4 | ||||
-rw-r--r-- | generated_tests/gen_shader_intel_conservative_rasterization.py | 173 |
2 files changed, 177 insertions, 0 deletions
diff --git a/generated_tests/CMakeLists.txt b/generated_tests/CMakeLists.txt index c22ac20ce..7aee214ca 100644 --- a/generated_tests/CMakeLists.txt +++ b/generated_tests/CMakeLists.txt @@ -153,6 +153,9 @@ piglit_make_generated_tests( templates/gen_conversion_fp64/shader_base.mako ) piglit_make_generated_tests( + shader_intel_conservative_rasterization.list + gen_shader_intel_conservative_rasterization.py) +piglit_make_generated_tests( shader_precision_tests.list gen_shader_precision_tests.py builtin_function.py @@ -250,6 +253,7 @@ add_custom_target(gen-gl-tests shader_framebuffer_fetch_tests.list shader_image_load_store_tests.list shader_image_nv_image_formats_tests.list + shader_intel_conservative_rasterization.list variable_index_read_tests.list gen_extensions_defined.list vp-tex.list diff --git a/generated_tests/gen_shader_intel_conservative_rasterization.py b/generated_tests/gen_shader_intel_conservative_rasterization.py new file mode 100644 index 000000000..5a3a5e979 --- /dev/null +++ b/generated_tests/gen_shader_intel_conservative_rasterization.py @@ -0,0 +1,173 @@ +# coding=utf-8 +# +# Copyright (C) 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 (including the next +# paragraph) 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. + +"""Generate a set of tests to verify that layout qualifiers introduced + by INTEL_conservative_rasterization are properly parsed. + + This also verifies the interaction with ARB_post_depth_coverage. + + This program outputs, to stdout, the name of each file it generates. + +""" + +import os.path +from textwrap import dedent + +from mako.template import Template + +from modules import utils + +def gen_header(status, gl_api, shader_stage): + """ + Generate a GLSL program header. + + Generate header code for INTEL_conservative_rasterization GLSL parser + tests that are expected to give status as result. + """ + + if shader_stage != 'frag': + status = 'fail' + print("%s - %s" % (shader_stage, status)) + + if gl_api == "gles": + glsl_version = ("3.20 es", "320 es") + else: + glsl_version = ("4.20", "420") + + return dedent(""" + /* + * [config] + * expect_result: {0} + * glsl_version: {1} + * require_extensions: GL_INTEL_conservative_rasterization + * [end config] + */ + #version {2} + #extension GL_INTEL_conservative_rasterization : enable + """.format(status, glsl_version[0], glsl_version[1])) + + +def gen(name, src, tests): + """ + Expand a source template for the provided list of test definitions. + + Generate a GLSL parser test for each of the elements of the + 'tests' iterable, each of them should be a dictionary of + definitions that will be used as environment to render the source + template. + + The file name of each test will be the concatenation of the 'name' + argument with the 'name' item from the respective test dictionary. + """ + template = Template(dedent(src)) + + for t in product([{'name': name}], tests): + filename = os.path.join('spec', + 'intel_conservative_rasterization', + 'compiler', + '{0}.{1}.{2}'.format(t['name'], + t['gl_api'], + t['shader_stage'])) + print(filename) + + dirname = os.path.dirname(filename) + utils.safe_makedirs(dirname) + + with open(filename, 'w') as f: + f.write(template.render(header=gen_header, **t)) + + +shader_stages = [ + {'shader_stage': 'frag'}, + {'shader_stage': 'vert'} +] + + +gl_apis = [ + {'gl_api': 'gl'}, + {'gl_api': 'gles'} +] + + +def product(ps, *qss): + """ + Generate the cartesian product of a number of lists of dictionaries. + + Each generated element will be the union of some combination of + elements from the iterable arguments. The resulting value of each + 'name' item will be the concatenation of names of the respective + element combination separated with dashes. + """ + for q in (product(*qss) if qss else [{}]): + for p in ps: + r = dict(p, **q) + r['name'] = '-'.join(s['name'] for s in (p, q) if s.get('name')) + yield r + + +def main(): + """Main function.""" + + + # + # Test inner_coverage layout qualifier. + # + gen('inner_coverage', """ + ${header('pass', gl_api, shader_stage)} + + layout(inner_coverage) in; + + void main() + { + } + """, product(gl_apis, shader_stages)) + + # + # Test depth_coverage layout qualifier. + # + gen('post_depth_coverage', """ + ${header('pass', gl_api, shader_stage)} + + layout(post_depth_coverage) in; + + void main() + { + } + """, product(gl_apis, shader_stages)) + + # + # Test depth_coverage layout qualifier. + # + gen('inner_post_depth_coverage', """ + ${header('fail', gl_api, shader_stage)} + + layout(inner_coverage) in; + layout(post_depth_coverage) in; + + void main() + { + } + """, product(gl_apis, shader_stages)) + +if __name__ == '__main__': + main() |