- Add get_failing_cts_tests.py script to extract failures from runcts output, and call automatically from runcts.
151 lines
5.3 KiB
Bash
Executable File
151 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright (c) 2016-2024 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.
|
|
#
|
|
# -fo path
|
|
# The path to the file to write a list of the failed CTS tests. If this option
|
|
# is not provided, the list of failed tests will be written to an output text
|
|
# file with the same name as the case_list_file, with "-fails.txt" appended.
|
|
#
|
|
# --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
|
|
#
|
|
|
|
cts_vk_dir="../../VK-GL-CTS/build/external/vulkancts/modules/vulkan/Debug"
|
|
caselist_file=""
|
|
results_file=""
|
|
failures_file=""
|
|
is_portability=""
|
|
|
|
while (( "$#" )); do
|
|
case "$1" in
|
|
-o)
|
|
results_file="${2}"
|
|
shift 2
|
|
;;
|
|
-fo)
|
|
failures_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
|
|
|
|
if [ "${failures_file}" == "" ]; then
|
|
failures_file="${caselist_file}-fails.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 MoltenVK_Configuration_Parameters.md.
|
|
# - MVK_CONFIG_API_VERSION_TO_ADVERTISE = 4194304 (VK_API_VERSION_1_0).
|
|
# - MVK_CONFIG_ADVERTISE_EXTENSIONS = 4 (VK_KHR_portability_subset and prerequistes).
|
|
if [ "${is_portability}" != "" ]; then
|
|
export MVK_CONFIG_API_VERSION_TO_ADVERTISE=4194304
|
|
export MVK_CONFIG_ADVERTISE_EXTENSIONS=4
|
|
fi
|
|
|
|
# ----- System settings ------
|
|
export DYLD_LIBRARY_PATH="/usr/local/lib"
|
|
|
|
# ----- Metal validation settings ------
|
|
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 #(1 = Errors only, 3 = Info)
|
|
export MVK_CONFIG_DEBUG=0
|
|
|
|
# Additional MoltenVK configuration can be set here by editing below.
|
|
# The values used here are documented in MoltenVK_Configuration_Parameters.md.
|
|
export MVK_CONFIG_RESUME_LOST_DEVICE=1
|
|
export MVK_CONFIG_FAST_MATH_ENABLED=1
|
|
export MVK_CONFIG_FORCE_LOW_POWER_GPU=0
|
|
export MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS=0 #(2 = VK_EXT_descriptor_indexing enabled)
|
|
export MVK_CONFIG_VK_SEMAPHORE_SUPPORT_STYLE=2 #(2 = MTLEvents always)
|
|
export MVK_CONFIG_SHADER_COMPRESSION_ALGORITHM=0 #(2 = ZLIB, 3 = LZ4)
|
|
export MVK_CONFIG_PERFORMANCE_TRACKING=0
|
|
export MVK_CONFIG_ACTIVITY_PERFORMANCE_LOGGING_STYLE=3 #(2 = Device lifetime, 3 = Process lifetime)
|
|
|
|
# -------------- Operation --------------------
|
|
|
|
echo Testing started at `date +%r`
|
|
start_time=${SECONDS}
|
|
|
|
"${cts_vk_dir}/deqp-vk" \
|
|
--deqp-archive-dir="${cts_vk_dir}/.." \
|
|
--deqp-log-filename="/dev/null" \
|
|
--deqp-log-images=disable \
|
|
--deqp-log-shader-sources=disable \
|
|
--deqp-shadercache=disable \
|
|
--deqp-log-decompiled-spirv=disable \
|
|
--deqp-log-flush=disable \
|
|
--deqp-caselist-file="${caselist_file}" \
|
|
&> "${results_file}"
|
|
|
|
python3 ./get_failing_cts_tests.py -q -o "${failures_file}" "${results_file}"
|
|
|
|
echo Testing complete in $(($SECONDS - $start_time)) seconds at `date +%r`
|