diff options
Diffstat (limited to 'deqp-run')
-rwxr-xr-x | deqp-run | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/deqp-run b/deqp-run new file mode 100755 index 0000000..f2e4fdc --- /dev/null +++ b/deqp-run @@ -0,0 +1,119 @@ +#!/bin/bash + +die() { + echo "$1" + exit 255 +} + +readonly -A CHROMEOS_DEQP_BIN=( + [vk]=/usr/local/deqp/external/vulkancts/modules/vulkan/deqp-vk + [egl]=/usr/local/deqp/modules/egl/deqp-egl + [gles2]=/usr/local/deqp/modules/gles2/deqp-gles2 + [gles3]=/usr/local/deqp/modules/gles3/deqp-gles3 + [gles31]=/usr/local/deqp/modules/gles31/deqp-gles31 +) + +readonly -A LINUX_DEQP_BIN=( + [vk]=build/external/vulkancts/modules/vulkan/deqp-vk + [egl]=build/modules/egl/deqp-egl + [gles2]=build/modules/gles2/deqp-gles2 + [gles3]=build/modules/gles3/deqp-gles3 + [gles31]=build/modules/gles31/deqp-gles31 +) +readonly -A CHROMEOS_DEQP_CASELIST=( + [vk]=/usr/local/deqp/caselists/vk.txt.zst + [egl]=/usr/local/deqp/caselists/egl.txt.zst + [gles2]=/usr/local/deqp/caselists/gles2.txt.zst + [gles3]=/usr/local/deqp/caselists/gles3.txt.zst + [gles31]=/usr/local/deqp/caselists/gles31.txt.zst +) + +readonly -A LINUX_DEQP_CASELIST=( + [vk]=external/vulkancts/mustpass/main/vk-default.txt + [egl]=android/cts/master/egl-master.txt + [gles2]=android/cts/main/gles2-master.txt + [gles3]=android/cts/main/gles3-master.txt + [gles31]=android/cts/main/gles31-master.txt +) + +readonly CHROMEOS_TESTLOG_TO_XML=/usr/local/deqp/executor/testlog-to-xml + +readonly LINUX_TESTLOG_TO_XML=build/executor/testlog-to-xml + +readonly -a DEQP_OPTIONS=( + --deqp-surface-width=256 + --deqp-surface-height=256 + --deqp-surface-type=pbuffer + --deqp-gl-config-name=rgba8888d24s8ms0 + --deqp-visibility=hidden +) + +if [[ $# -eq 1 ]]; then + if [[ $1 == dEQP-* ]]; then + single_test="$1" + + api="${1%%.*}" + api="${api#dEQP-}" + api="${api,,}" + else + api="$1" + fi + + case "${api}" in + vk|egl|gles2|gles3|gles31) + # shellcheck source=/etc/os-release + source <(grep '^ID=' /etc/os-release) + if [[ $ID == chromeos ]]; then + DEQP_BIN="${CHROMEOS_DEQP_BIN[$api]}" + CASELIST="${CHROMEOS_DEQP_CASELIST[$api]}" + TESTLOG_TO_XML="${CHROMEOS_TESTLOG_TO_XML}" + else + DEQP_BIN="${LINUX_DEQP_BIN[$api]}" + CASELIST="${LINUX_DEQP_CASELIST[$api]}" + TESTLOG_TO_XML="${LINUX_TESTLOG_TO_XML}" + fi + ;; + *) + die "Argument must be one of vk|egl|gles2|gles3|gles31 or a dEQP-* test name" + ;; + esac +else + DEQP_BIN="$1" + CASELIST="$2" + TESTLOG_TO_XML="$3" +fi + +if [[ ! -x $DEQP_BIN ]]; then + die "deqp binary '$DEQP_BIN' does not exist or is not executable" +fi +DEQP_BIN="$(realpath "${DEQP_BIN}")" + +if [[ -n $single_test ]]; then + cd "$(dirname "${DEQP_BIN}")" || die "can't cd" + exec "${DEQP_BIN}" "${DEQP_OPTIONS[@]}" -n "${single_test}" +fi + +if [[ ! -r $CASELIST ]]; then + die "Caselist '$CASELIST' does not exist or is not readable" +fi +CASELIST="$(realpath "${CASELIST}")" + +if [[ ! -x $TESTLOG_TO_XML ]]; then + die "testlog-to-xml binary '$TESTLOG_TO_XML' does not exist or is not executable" +fi +TESTLOG_TO_XML="$(realpath "${TESTLOG_TO_XML}")" + +if [[ -e $OUTPUT_DIR ]]; then + die "Output directory '$OUTPUT_DIR' already exists" +fi +OUTPUT_DIR=$(basename "${DEQP_BIN}") + +DEQP_RUNNER_ARGS=( + --caselist "${CASELIST}" + --deqp "${DEQP_BIN}" + --testlog-to-xml "${TESTLOG_TO_XML}" + --timeout 360 + --output "${OUTPUT_DIR}" +) + +exec deqp-runner run "${DEQP_RUNNER_ARGS[@]}" -- "${DEQP_OPTIONS[@]}" |