angle/scripts/generate_vulkan_layers_json.py

78 строки
2.9 KiB
Python
Executable File

#!/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)