From b6347807a92d8fcf9acbaeb1af2f0aae15d78b3a Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Fri, 9 Mar 2018 00:47:26 +0100 Subject: [PATCH] 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 --- src/amd/vulkan/dev_icd.json.in | 7 ------ src/amd/vulkan/meson.build | 34 +++++++++++++++++++--------- src/amd/vulkan/radeon_icd.json.in | 7 ------ src/amd/vulkan/radv_icd.py | 47 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 25 deletions(-) delete mode 100644 src/amd/vulkan/dev_icd.json.in delete mode 100644 src/amd/vulkan/radeon_icd.json.in create mode 100644 src/amd/vulkan/radv_icd.py diff --git a/src/amd/vulkan/dev_icd.json.in b/src/amd/vulkan/dev_icd.json.in deleted file mode 100644 index dfd032c..0000000 --- a/src/amd/vulkan/dev_icd.json.in +++ /dev/null @@ -1,7 +0,0 @@ -{ - "file_format_version": "1.0.0", - "ICD": { - "library_path": "@libvulkan_radeon_path@", - "api_version": "1.1.0" - } -} diff --git a/src/amd/vulkan/meson.build b/src/amd/vulkan/meson.build index 9805156..61aa8c4 100644 --- a/src/amd/vulkan/meson.build +++ b/src/amd/vulkan/meson.build @@ -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, ) diff --git a/src/amd/vulkan/radeon_icd.json.in b/src/amd/vulkan/radeon_icd.json.in deleted file mode 100644 index a99cb80..0000000 --- a/src/amd/vulkan/radeon_icd.json.in +++ /dev/null @@ -1,7 +0,0 @@ -{ - "file_format_version": "1.0.0", - "ICD": { - "library_path": "@install_libdir@/libvulkan_radeon.so", - "api_version": "1.1.0" - } -} diff --git a/src/amd/vulkan/radv_icd.py b/src/amd/vulkan/radv_icd.py new file mode 100644 index 0000000..78ed379 --- /dev/null +++ b/src/amd/vulkan/radv_icd.py @@ -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) -- 2.7.4