1617a3babSopenharmony_ci#!/usr/bin/env python3 2617a3babSopenharmony_ci 3617a3babSopenharmony_ci# Copyright (c) 2020 Google Inc. 4617a3babSopenharmony_ci# 5617a3babSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License"); 6617a3babSopenharmony_ci# you may not use this file except in compliance with the License. 7617a3babSopenharmony_ci# You may obtain a copy of the License at 8617a3babSopenharmony_ci# 9617a3babSopenharmony_ci# http://www.apache.org/licenses/LICENSE-2.0 10617a3babSopenharmony_ci# 11617a3babSopenharmony_ci# Unless required by applicable law or agreed to in writing, software 12617a3babSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS, 13617a3babSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14617a3babSopenharmony_ci# See the License for the specific language governing permissions and 15617a3babSopenharmony_ci# limitations under the License. 16617a3babSopenharmony_ci 17617a3babSopenharmony_ciimport glob 18617a3babSopenharmony_ciimport sys 19617a3babSopenharmony_ciimport os 20617a3babSopenharmony_ci 21617a3babSopenharmony_cidef generate_main(glsl_files, output_header_file): 22617a3babSopenharmony_ci # Write commit ID to output header file 23617a3babSopenharmony_ci with open(output_header_file, "w") as header_file: 24617a3babSopenharmony_ci # Copyright Notice 25617a3babSopenharmony_ci header_string = '/***************************************************************************\n' 26617a3babSopenharmony_ci header_string += ' *\n' 27617a3babSopenharmony_ci header_string += ' * Copyright (c) 2015-2021 The Khronos Group Inc.\n' 28617a3babSopenharmony_ci header_string += ' * Copyright (c) 2015-2021 Valve Corporation\n' 29617a3babSopenharmony_ci header_string += ' * Copyright (c) 2015-2021 LunarG, Inc.\n' 30617a3babSopenharmony_ci header_string += ' * Copyright (c) 2015-2021 Google Inc.\n' 31617a3babSopenharmony_ci header_string += ' * Copyright (c) 2021 Advanced Micro Devices, Inc.All rights reserved.\n' 32617a3babSopenharmony_ci header_string += ' *\n' 33617a3babSopenharmony_ci header_string += ' ****************************************************************************/\n' 34617a3babSopenharmony_ci header_string += '#pragma once\n\n' 35617a3babSopenharmony_ci header_string += '#ifndef _INTRINSIC_EXTENSION_HEADER_H_\n' 36617a3babSopenharmony_ci header_string += '#define _INTRINSIC_EXTENSION_HEADER_H_\n\n' 37617a3babSopenharmony_ci header_file.write(header_string) 38617a3babSopenharmony_ci 39617a3babSopenharmony_ci symbol_name_list = [] 40617a3babSopenharmony_ci 41617a3babSopenharmony_ci for i in glsl_files: 42617a3babSopenharmony_ci glsl_contents = open(i,"r").read() 43617a3babSopenharmony_ci 44617a3babSopenharmony_ci filename = os.path.basename(i) 45617a3babSopenharmony_ci symbol_name = filename.split(".")[0] 46617a3babSopenharmony_ci symbol_name_list.append(symbol_name) 47617a3babSopenharmony_ci header_name = symbol_name + ".h" 48617a3babSopenharmony_ci header_str = 'std::string %s_GLSL = R"(\n%s\n)";\n' % (symbol_name, glsl_contents) 49617a3babSopenharmony_ci header_str += '\n' 50617a3babSopenharmony_ci header_file.write(header_str) 51617a3babSopenharmony_ci 52617a3babSopenharmony_ci contents = '' 53617a3babSopenharmony_ci contents += '\n' 54617a3babSopenharmony_ci contents += 'std::string getIntrinsic(const char* const* shaders, int n) {\n' 55617a3babSopenharmony_ci contents += '\tstd::string shaderString = "";\n'; 56617a3babSopenharmony_ci 57617a3babSopenharmony_ci contents += '\tfor (int i = 0; i < n; i++) {\n' 58617a3babSopenharmony_ci 59617a3babSopenharmony_ci for symbol_name in symbol_name_list: 60617a3babSopenharmony_ci contents += '\t\tif (strstr(shaders[i], "%s") != nullptr) {\n' % (symbol_name) 61617a3babSopenharmony_ci contents += '\t\t shaderString.append(%s_GLSL);\n' % (symbol_name) 62617a3babSopenharmony_ci contents += '\t\t}\n' 63617a3babSopenharmony_ci 64617a3babSopenharmony_ci contents += '\t}\n' 65617a3babSopenharmony_ci contents += '\treturn shaderString;\n'; 66617a3babSopenharmony_ci contents += '}\n' 67617a3babSopenharmony_ci 68617a3babSopenharmony_ci contents += '\n#endif\n' 69617a3babSopenharmony_ci header_file.write(contents) 70617a3babSopenharmony_ci 71617a3babSopenharmony_cidef main(): 72617a3babSopenharmony_ci if len(sys.argv) < 2: 73617a3babSopenharmony_ci raise Exception("Invalid number of arguments") 74617a3babSopenharmony_ci 75617a3babSopenharmony_ci i = 0 76617a3babSopenharmony_ci while i < len(sys.argv): 77617a3babSopenharmony_ci opt = sys.argv[i] 78617a3babSopenharmony_ci i = i + 1 79617a3babSopenharmony_ci 80617a3babSopenharmony_ci if opt == "-i" or opt == "-o": 81617a3babSopenharmony_ci if i == len(sys.argv): 82617a3babSopenharmony_ci raise Exception("Expected path after {}".format(opt)) 83617a3babSopenharmony_ci val = sys.argv[i] 84617a3babSopenharmony_ci i = i + 1 85617a3babSopenharmony_ci if (opt == "-i"): 86617a3babSopenharmony_ci input_dir = val 87617a3babSopenharmony_ci elif (opt == "-o"): 88617a3babSopenharmony_ci output_file = val 89617a3babSopenharmony_ci else: 90617a3babSopenharmony_ci raise Exception("Unknown flag {}".format(opt)) 91617a3babSopenharmony_ci 92617a3babSopenharmony_ci glsl_files = glob.glob(input_dir + '/*.glsl') 93617a3babSopenharmony_ci 94617a3babSopenharmony_ci # Generate main header 95617a3babSopenharmony_ci generate_main(glsl_files, output_file) 96617a3babSopenharmony_ci 97617a3babSopenharmony_ciif __name__ == '__main__': 98617a3babSopenharmony_ci main() 99