| #!/usr/bin/python2 | |
| # | |
| # Copyright 2016 The ANGLE Project Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # | |
| # generate_vulkan_layers_json.py: | |
| # Generate copies of the Vulkan layers JSON files, with no paths, forcing | |
| # Vulkan to use the default search path to look for layers. | |
| import os, sys, json, glob, platform | |
| if len(sys.argv) != 3: | |
| print("Usage: " + sys.argv[0] + " <source_dir> <target_dir>") | |
| sys.exit(1) | |
| source_dir = sys.argv[1] | |
| target_dir = sys.argv[2] | |
| angle_root_dir = os.path.dirname(sys.path[0]) | |
| data_key = 'layer' | |
| if 'icd' in source_dir: | |
| data_key = 'ICD' | |
| if not os.path.isdir(source_dir): | |
| print(source_dir + " is not a directory.") | |
| sys.exit(1) | |
| if not os.path.exists(target_dir): | |
| os.makedirs(target_dir) | |
| # Copy the *.json files from source dir to target dir | |
| for json_fname in glob.glob(os.path.join(source_dir, "*.json")): | |
| with open(json_fname) as infile: | |
| data = json.load(infile) | |
| # update the path | |
| if not data_key in data: | |
| raise Exception("Could not find '" + data_key + "' key in " + json_fname) | |
| # The standard validation layer has no library path. | |
| if 'library_path' in data[data_key]: | |
| prev_name = os.path.basename(data[data_key]['library_path']) | |
| data[data_key]['library_path'] = prev_name | |
| target_fname = os.path.join(target_dir, os.path.basename(json_fname)) | |
| with open(target_fname, "w") as outfile: | |
| json.dump(data, outfile) | |
| # Get the Vulkan version from the vulkan_core.h file | |
| vk_header_filename = os.path.join(angle_root_dir, "third_party", "vulkan-headers", "src", "include", "vulkan", "vulkan_core.h") | |
| vk_version = '83' | |
| with open(vk_header_filename) as vk_header_file: | |
| for line in vk_header_file: | |
| if line.startswith("#define VK_HEADER_VERSION"): | |
| vk_version = line.split()[-1] | |
| break | |
| # Set json file prefix and suffix for generating files below, default to Linux | |
| relative_path_prefix = "../lib" | |
| file_type_suffix = ".so" | |
| if 'Windows' == platform.system(): | |
| relative_path_prefix = "..\\\\" | |
| file_type_suffix = ".dll" | |
| # For each *.json.in template files in source dir generate actual json file in target dir | |
| for json_in_name in glob.glob(os.path.join(source_dir, "*.json.in")): | |
| json_in_fname = os.path.basename(json_in_name) | |
| layer_name = json_in_fname[:-8] # Kill ".json.in" from end of filename | |
| layer_lib_name = '%s%s' % (layer_name, file_type_suffix) | |
| json_out_fname = os.path.join(target_dir, json_in_fname[:-3]) | |
| with open(json_out_fname,'w') as json_out_file: | |
| with open(json_in_name) as infile: | |
| for line in infile: | |
| line = line.replace('@RELATIVE_LAYER_BINARY@', ('%s%s' % (relative_path_prefix, layer_lib_name))) | |
| line = line.replace('@VK_VERSION@', ('1.1.%s' % (vk_version))) | |
| json_out_file.write(line) |