| #!/bin/bash | |
| # Copyright (c) 2016-2022 The Brenwill Workshop Ltd. | |
| # | |
| # runcts - This script simplifies running Vulkan CTS tests on MoltenVK. | |
| # | |
| # CTS will save temporary output files to the directory this script is located in. It is | |
| # recommended that you copy this file to a location where your testing files will be kept. | |
| # By default, this should be a directory beside the VK-GL-CTS directory. See the description | |
| # of the --cts option below for information about locations. | |
| # | |
| # Executing a large case list file of CTS tests can take a long time. It is recommended | |
| # that you run this using caffeinate, as follows: | |
| # caffeinate -is ./runcts [-o path] [--cts path] [-p] [--portability] case_list_file | |
| # | |
| # | |
| # macOS usage: ./runcts [-o path] [--cts path] [-p] [--portability] case_list_file | |
| # | |
| # case_list_file | |
| # The path to the file that contains a list of the CTS test cases to run. | |
| # | |
| # -o path | |
| # The path to the file to write the test results. If this option is not provided, | |
| # the results will be written to an output text file with the same name as the | |
| # case_list_file, with "-results.txt" appended. CTS will also output several | |
| # working temporary files into the directory holding this script. | |
| # | |
| # --cts path | |
| # The path to the directory containing the built CTS executable. | |
| # If this parameter is not provided, it defaults to: | |
| # "../../VK-GL-CTS/build/external/vulkancts/modules/vulkan/Debug". | |
| # | |
| # -p | |
| # Same as the --portability option. | |
| # | |
| # --portability | |
| # Indicates that this testing is for testing conformance with the | |
| # Vulkan Portability initiative. MoltenVK will advertise support for | |
| # only Vulkan 1.0, and only the following extensions: | |
| # VK_KHR_get_physical_device_properties2 | |
| # VK_KHR_portability_subset | |
| # VK_MVK_moltenvk | |
| # | |
| cts_vk_dir="../../VK-GL-CTS/build/external/vulkancts/modules/vulkan/Debug" | |
| caselist_file="" | |
| results_file="" | |
| is_portability="" | |
| while (( "$#" )); do | |
| case "$1" in | |
| -o) | |
| results_file="${2}" | |
| shift 2 | |
| ;; | |
| --cts) | |
| cts_vk_dir="${2}" | |
| shift 2 | |
| ;; | |
| -p | --portability) | |
| is_portability="Y" | |
| shift 1 | |
| ;; | |
| -*|--*=) | |
| echo "Error: Unsupported option $1. See usage instructions in body of this script." >&2 | |
| exit 1 | |
| ;; | |
| *) | |
| caselist_file="${1}" | |
| shift 1 | |
| ;; | |
| esac | |
| done | |
| if [ "${caselist_file}" == "" ]; then | |
| echo "Error: No caselist file specified. See usage instructions in body of this script." >&2 | |
| exit 1 | |
| fi | |
| if [ "${results_file}" == "" ]; then | |
| results_file="${caselist_file}-results.txt" | |
| fi | |
| # -------------- MoltenVK configuration -------------------- | |
| # As documented above, the portability option restricts to Vulkan 1.0 and a very limited set of extensions. | |
| # The values used here are documented in vk_mvk_moltenvk.h. | |
| # - MVK_CONFIG_API_VERSION_TO_ADVERTISE = VK_API_VERSION_1_0 (4194304) | |
| # - MVK_CONFIG_ADVERTISE_EXTENSIONS selects support for a very limited set of extensions, | |
| # using a bit-or of values in MVKConfigAdvertiseExtensions (extension list documented above). | |
| if [ "${is_portability}" != "" ]; then | |
| export MVK_CONFIG_API_VERSION_TO_ADVERTISE=4194304 | |
| export MVK_CONFIG_ADVERTISE_EXTENSIONS=0xA | |
| fi | |
| export METAL_DEVICE_WRAPPER_TYPE=1 | |
| export METAL_ERROR_MODE=3 | |
| export METAL_DEBUG_ERROR_MODE=3 | |
| # ----- MoltenVK config settings ------ | |
| export MVK_CONFIG_LOG_LEVEL=1 | |
| export MVK_DEBUG=0 | |
| # Additional MoltenVK configuration can be set here by | |
| # editing below, or can be set before calling this script. | |
| export MVK_CONFIG_RESUME_LOST_DEVICE=1 | |
| export MVK_CONFIG_FAST_MATH_ENABLED=1 | |
| export MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS=0 #(2 = VK_EXT_descriptor_indexing enabled) | |
| export MVK_CONFIG_FORCE_LOW_POWER_GPU=0 | |
| export MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE=2 #(2 = MTLEvents always) | |
| # -------------- Operation -------------------- | |
| echo Testing started at `date +%r` | |
| start_time=${SECONDS} | |
| "${cts_vk_dir}/deqp-vk" \ | |
| --deqp-archive-dir="${cts_vk_dir}/.." \ | |
| --deqp-log-images=disable \ | |
| --deqp-log-shader-sources=disable \ | |
| --deqp-caselist-file="${caselist_file}" \ | |
| &> "${results_file}" | |
| echo Testing complete in $(($SECONDS - $start_time)) seconds |