radv: Generate icd files.

If the api version is too low, the loader clamps the application
requested version to the advertized version, which messes with
which extensions are enabled.

Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Bas Nieuwenhuizen
2018-03-09 00:47:26 +01:00
parent 6878c9aabc
commit b6347807a9
4 changed files with 70 additions and 25 deletions

View File

@@ -1,7 +0,0 @@
{
"file_format_version": "1.0.0",
"ICD": {
"library_path": "@libvulkan_radeon_path@",
"api_version": "1.1.0"
}
}

View File

@@ -134,18 +134,30 @@ libvulkan_radeon = shared_library(
install : true,
)
radv_data = configuration_data()
radv_data.set('install_libdir', join_paths(get_option('prefix'), get_option('libdir')))
radv_data.set('libvulkan_radeon_path', libvulkan_radeon.full_path())
configure_file(
configuration : radv_data,
input : 'radeon_icd.json.in',
radeon_icd = custom_target(
'radeon_icd',
input : 'radv_icd.py',
output : 'radeon_icd.@0@.json'.format(host_machine.cpu()),
command : [
prog_python2, '@INPUT@',
'--lib-path', join_paths(get_option('prefix'), get_option('libdir')),
'--out', '@OUTPUT@',
],
depend_files : files('radv_extensions.py'),
build_by_default : true,
install_dir : with_vulkan_icd_dir,
install : true,
)
configure_file(
configuration : radv_data,
input : 'dev_icd.json.in',
output : 'dev_icd.json'
radv_dev_icd = custom_target(
'radv_dev_icd',
input : 'radv_icd.py',
output : 'dev_icd.json',
command : [
prog_python2, '@INPUT@', '--lib-path', meson.current_build_dir(),
'--out', '@OUTPUT@'
],
depend_files : files('radv_extensions.py'),
build_by_default : true,
install : false,
)

View File

@@ -1,7 +0,0 @@
{
"file_format_version": "1.0.0",
"ICD": {
"library_path": "@install_libdir@/libvulkan_radeon.so",
"api_version": "1.1.0"
}
}

View File

@@ -0,0 +1,47 @@
# Copyright 2017 Intel Corporation
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sub license, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice (including the
# next paragraph) shall be included in all copies or substantial portions
# of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
# IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
# ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
import json
import os.path
from radv_extensions import *
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--out', help='Output json file.', required=True)
parser.add_argument('--lib-path', help='Path to libvulkan_radeon.so')
args = parser.parse_args()
path = 'libvulkan_radeon.so'
if args.lib_path:
path = os.path.join(args.lib_path, path)
json_data = {
'file_format_version': '1.0.0',
'ICD': {
'library_path': path,
'api_version': str(MAX_API_VERSION),
},
}
with open(args.out, 'w') as f:
json.dump(json_data, f, indent = 4, sort_keys=True)