summaryrefslogtreecommitdiff
path: root/deqp-run
diff options
context:
space:
mode:
Diffstat (limited to 'deqp-run')
-rwxr-xr-xdeqp-run118
1 files changed, 118 insertions, 0 deletions
diff --git a/deqp-run b/deqp-run
new file mode 100755
index 0000000..0a559e2
--- /dev/null
+++ b/deqp-run
@@ -0,0 +1,118 @@
+#!/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}"
+ --output "${OUTPUT_DIR}"
+)
+
+exec deqp-runner run "${DEQP_RUNNER_ARGS[@]}" -- "${DEQP_OPTIONS[@]}"