diff --git a/src/compiler/spirv/meson.build b/src/compiler/spirv/meson.build index cba7b79a21e..352db82d7eb 100644 --- a/src/compiler/spirv/meson.build +++ b/src/compiler/spirv/meson.build @@ -25,12 +25,14 @@ vtn_gather_types_c = custom_target( command : [prog_python, '@INPUT0@', '@INPUT1@', '@OUTPUT@'], ) -spirv_info_c = custom_target( - 'spirv_info.c', - input : files('spirv_info_c.py', 'spirv.core.grammar.json'), - output : 'spirv_info.c', - command : [prog_python, '@INPUT0@', '@INPUT1@', '@OUTPUT@'], +spirv_info = custom_target( + 'spirv_info', + input : files('spirv_info_gen.py', 'spirv.core.grammar.json'), + output : ['spirv_info.h', 'spirv_info.c'], + command : [prog_python, '@INPUT0@', '--json', '@INPUT1@', + '--out-h', '@OUTPUT0@', '--out-c', '@OUTPUT1@'], ) +spirv_info_h = spirv_info[0] vtn_generator_ids_h = custom_target( 'vtn_generator_ids.h', @@ -46,7 +48,6 @@ files_libvtn = files( 'gl_spirv.c', 'nir_spirv.h', 'spirv.h', - 'spirv_info.h', 'spirv_to_nir.c', 'vtn_alu.c', 'vtn_amd.c', @@ -63,7 +64,7 @@ files_libvtn = files( libvtn = static_library( 'vtn', [files_libvtn, - spirv_info_c, + spirv_info, vtn_gather_types_c, vtn_generator_ids_h, ], diff --git a/src/compiler/spirv/spirv_info.h b/src/compiler/spirv/spirv_info.h deleted file mode 100644 index c9bfcda18d0..00000000000 --- a/src/compiler/spirv/spirv_info.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 (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. - */ - -#ifndef _SPIRV_INFO_H_ -#define _SPIRV_INFO_H_ - -#include "spirv.h" - -const char *spirv_addressingmodel_to_string(SpvAddressingModel model); -const char *spirv_builtin_to_string(SpvBuiltIn builtin); -const char *spirv_capability_to_string(SpvCapability cap); -const char *spirv_decoration_to_string(SpvDecoration dec); -const char *spirv_dim_to_string(SpvDim dim); -const char *spirv_executionmode_to_string(SpvExecutionMode mode); -const char *spirv_executionmodel_to_string(SpvExecutionModel model); -const char *spirv_imageformat_to_string(SpvImageFormat format); -const char *spirv_imageoperands_to_string(SpvImageOperandsMask op); -const char *spirv_memorymodel_to_string(SpvMemoryModel cap); -const char *spirv_op_to_string(SpvOp op); -const char *spirv_storageclass_to_string(SpvStorageClass sc); -const char *spirv_fproundingmode_to_string(SpvFPRoundingMode sc); - -#endif /* SPIRV_INFO_H */ diff --git a/src/compiler/spirv/spirv_info_c.py b/src/compiler/spirv/spirv_info_gen.py similarity index 81% rename from src/compiler/spirv/spirv_info_c.py rename to src/compiler/spirv/spirv_info_gen.py index 826250d0133..e752d5e249d 100644 --- a/src/compiler/spirv/spirv_info_c.py +++ b/src/compiler/spirv/spirv_info_gen.py @@ -63,11 +63,33 @@ def collect_opcodes(spirv): def parse_args(): p = argparse.ArgumentParser() - p.add_argument("json") - p.add_argument("out") + p.add_argument('--out-c', required=True, help='Output C file.') + p.add_argument('--out-h', required=True, help='Output H file.') + p.add_argument('--json', required=True, help='SPIR-V JSON file.') return p.parse_args() -TEMPLATE = Template("""\ +TEMPLATE_H = Template("""\ +/* DO NOT EDIT - This file is generated automatically by spirv_info_c.py script */ + +""" + COPYRIGHT + """\ + +#ifndef _SPIRV_INFO_H_ +#define _SPIRV_INFO_H_ + +#include "spirv.h" + +% for kind,values,category in info: +% if category == "BitEnum": +const char *spirv_${kind.lower()}_to_string(Spv${kind}Mask v); +% else: +const char *spirv_${kind.lower()}_to_string(Spv${kind} v); +% endif +% endfor + +#endif /* SPIRV_INFO_H */ +""") + +TEMPLATE_C = Template("""\ /* DO NOT EDIT - This file is generated automatically by spirv_info_c.py script */ """ + COPYRIGHT + """\ @@ -128,5 +150,7 @@ if __name__ == "__main__": collect_opcodes(spirv_info), ] - with open(pargs.out, 'w', encoding='utf-8') as f: - f.write(TEMPLATE.render(info=info)) + with open(pargs.out_h, 'w', encoding='utf-8') as f: + f.write(TEMPLATE_H.render(info=info)) + with open(pargs.out_c, 'w', encoding='utf-8') as f: + f.write(TEMPLATE_C.render(info=info))