spirv: Auto-generate spirv_info.h

Reviewed-by: Konstantin Seurer <konstantin.seurer@gmail.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Iván Briano <ivan.briano@intel.com>
Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28905>
This commit is contained in:
Faith Ekstrand
2024-04-24 08:12:14 -05:00
committed by Marge Bot
parent c7634c25e4
commit a09c5d55ed
3 changed files with 37 additions and 55 deletions

View File

@@ -25,12 +25,14 @@ vtn_gather_types_c = custom_target(
command : [prog_python, '@INPUT0@', '@INPUT1@', '@OUTPUT@'], command : [prog_python, '@INPUT0@', '@INPUT1@', '@OUTPUT@'],
) )
spirv_info_c = custom_target( spirv_info = custom_target(
'spirv_info.c', 'spirv_info',
input : files('spirv_info_c.py', 'spirv.core.grammar.json'), input : files('spirv_info_gen.py', 'spirv.core.grammar.json'),
output : 'spirv_info.c', output : ['spirv_info.h', 'spirv_info.c'],
command : [prog_python, '@INPUT0@', '@INPUT1@', '@OUTPUT@'], 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 = custom_target(
'vtn_generator_ids.h', 'vtn_generator_ids.h',
@@ -46,7 +48,6 @@ files_libvtn = files(
'gl_spirv.c', 'gl_spirv.c',
'nir_spirv.h', 'nir_spirv.h',
'spirv.h', 'spirv.h',
'spirv_info.h',
'spirv_to_nir.c', 'spirv_to_nir.c',
'vtn_alu.c', 'vtn_alu.c',
'vtn_amd.c', 'vtn_amd.c',
@@ -63,7 +64,7 @@ files_libvtn = files(
libvtn = static_library( libvtn = static_library(
'vtn', 'vtn',
[files_libvtn, [files_libvtn,
spirv_info_c, spirv_info,
vtn_gather_types_c, vtn_gather_types_c,
vtn_generator_ids_h, vtn_generator_ids_h,
], ],

View File

@@ -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 */

View File

@@ -63,11 +63,33 @@ def collect_opcodes(spirv):
def parse_args(): def parse_args():
p = argparse.ArgumentParser() p = argparse.ArgumentParser()
p.add_argument("json") p.add_argument('--out-c', required=True, help='Output C file.')
p.add_argument("out") 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() 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 */ /* DO NOT EDIT - This file is generated automatically by spirv_info_c.py script */
""" + COPYRIGHT + """\ """ + COPYRIGHT + """\
@@ -128,5 +150,7 @@ if __name__ == "__main__":
collect_opcodes(spirv_info), collect_opcodes(spirv_info),
] ]
with open(pargs.out, 'w', encoding='utf-8') as f: with open(pargs.out_h, 'w', encoding='utf-8') as f:
f.write(TEMPLATE.render(info=info)) 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))