зеркало из https://github.com/AvaloniaUI/angle.git
78 строки
2.9 KiB
Python
Executable File
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)
|