Files
mesa/src/amd/vulkan/layers/radv_annotate_layer_gen.py
T
Samuel Pitoiset 87fde606cf radv: use SPDX-License-Identifier
Only files under src/amd/vulkan/** are concerned.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28599>
2024-04-08 07:17:31 +00:00

95 lines
2.6 KiB
Python

COPYRIGHT=u"""
/* Copyright © 2021 Intel Corporation
* Copyright © 2024 Valve Corporation
*
* SPDX-License-Identifier: MIT
*/
"""
import argparse
import os
import sys
import xml.etree.ElementTree as et
import mako
from mako.template import Template
sys.path.append(os.path.join(sys.path[0], '../../../vulkan/util/'))
from vk_entrypoints import get_entrypoints_from_xml
EXCLUDED_COMMANDS = [
'CmdBeginRenderPass',
'CmdEndRenderPass',
'CmdDispatch',
]
TEMPLATE = Template(COPYRIGHT + """
/* This file generated from ${filename}, don't edit directly. */
#include "radv_cmd_buffer.h"
#include "radv_entrypoints.h"
#define ANNOTATE(command, ...) \
struct radv_cmd_buffer *cmd_buffer = radv_cmd_buffer_from_handle(commandBuffer); \
struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); \
radv_cmd_buffer_annotate(cmd_buffer, #command); \
device->layer_dispatch.annotate.command(__VA_ARGS__)
% for c in commands:
% if c.guard is not None:
#ifdef ${c.guard}
% endif
VKAPI_ATTR ${c.return_type} VKAPI_CALL
annotate_${c.name}(${c.decl_params()})
{
ANNOTATE(${c.name}, ${c.call_params()});
}
% if c.guard is not None:
#endif // ${c.guard}
% endif
% endfor
""")
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--out-c", required=True, help="Output C file.")
parser.add_argument("--beta", required=True, help="Enable beta extensions.")
parser.add_argument("--xml",
help="Vulkan API XML file.",
required=True, action="append", dest="xml_files")
args = parser.parse_args()
commands = []
commands_names = []
for e in get_entrypoints_from_xml(args.xml_files, args.beta):
if not e.name.startswith('Cmd') or e.alias or e.return_type != "void":
continue
stripped_name = e.name.removesuffix('EXT').removesuffix('KHR').removesuffix('2')
if stripped_name in commands_names or stripped_name in EXCLUDED_COMMANDS:
continue
commands.append(e)
commands_names.append(stripped_name)
environment = {
"filename": os.path.basename(__file__),
"commands": commands,
}
try:
with open(args.out_c, "w", encoding='utf-8') as f:
f.write(TEMPLATE.render(**environment))
except Exception:
# In the event there"s an error, this uses some helpers from mako
# to print a useful stack trace and prints it, then exits with
# status 1, if python is run with debug; otherwise it just raises
# the exception
print(mako.exceptions.text_error_template().render(), file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()