summaryrefslogtreecommitdiff
path: root/.gitlab-ci/deqp-runner.sh
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2019-06-28 16:35:32 -0700
committerEric Anholt <eric@anholt.net>2019-08-13 10:30:01 -0700
commit46daaca55e0dd230fc27922f473982130207a549 (patch)
treea44118ab130d97b1defb13c6eabd483c3fb00bee /.gitlab-ci/deqp-runner.sh
parentab49873b4422eb087b6257265e30799ce8d4728d (diff)
gitlab-ci: Run the GLES2 CTS on llvmpipe.
This is the start of doing CTS tests on merges to Mesa master. We use the surfaceless platform so that we don't need to bother bringing up weston or X11. The surface size is kept low to reduce runtime, but this comes at the cost of many rendering tests skipping due to too-small render targets (as we see the impact of Mesa on the shared runner pool, we can reevaluate this and what set of CTS tests we want to run). We split the job up across 4 runners (each at 4 llvmpipe threads), so that the job can load-balance across our shared runners and finish sooner (since dEQP is very single-thread-performance bound). Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Diffstat (limited to '.gitlab-ci/deqp-runner.sh')
-rwxr-xr-x.gitlab-ci/deqp-runner.sh112
1 files changed, 112 insertions, 0 deletions
diff --git a/.gitlab-ci/deqp-runner.sh b/.gitlab-ci/deqp-runner.sh
new file mode 100755
index 00000000000..34d28a1cd47
--- /dev/null
+++ b/.gitlab-ci/deqp-runner.sh
@@ -0,0 +1,112 @@
+#!/bin/bash
+
+set -ex
+
+DEQP_OPTIONS=(--deqp-surface-width=256 --deqp-surface-height=256)
+DEQP_OPTIONS+=(--deqp-surface-type=pbuffer)
+DEQP_OPTIONS+=(--deqp-gl-config-name=rgba8888d24s8ms0)
+DEQP_OPTIONS+=(--deqp-visibility=hidden)
+DEQP_OPTIONS+=(--deqp-log-images=disable)
+DEQP_OPTIONS+=(--deqp-watchdog=enable)
+DEQP_OPTIONS+=(--deqp-crashhandler=enable)
+
+if [ -z "$DEQP_VER" ]; then
+ echo 'DEQP_VER must be set to something like "gles2" or "gles31" for the test run'
+ exit 1
+fi
+
+if [ -z "$DEQP_SKIPS" ]; then
+ echo 'DEQP_SKIPS must be set to something like "deqp-default-skips.txt"'
+ exit 1
+fi
+
+# Prep the expected failure list
+if [ -n "$DEQP_EXPECTED_FAILS" ]; then
+ export DEQP_EXPECTED_FAILS=`pwd`/artifacts/$DEQP_EXPECTED_FAILS
+else
+ export DEQP_EXPECTED_FAILS=/tmp/expect-no-failures.txt
+ touch $DEQP_EXPECTED_FAILS
+fi
+sort < $DEQP_EXPECTED_FAILS > /tmp/expected-fails.txt
+
+# Fix relative paths on inputs.
+export DEQP_SKIPS=`pwd`/artifacts/$DEQP_SKIPS
+
+# Be a good citizen on the shared runners.
+export LP_NUM_THREADS=4
+
+# Set up the driver environment.
+export LD_LIBRARY_PATH=`pwd`/install/lib/
+export EGL_PLATFORM=surfaceless
+
+# the runner was failing to look for libkms in /usr/local/lib for some reason
+# I never figured out.
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
+
+RESULTS=`pwd`/results
+mkdir -p $RESULTS
+
+cd /deqp/modules/$DEQP_VER
+
+# Generate test case list file
+cp /deqp/mustpass/$DEQP_VER-master.txt /tmp/case-list.txt
+
+# Note: not using sorted input and comm, becuase I want to run the tests in
+# the same order that dEQP would.
+while read -r line; do
+ if echo "$line" | grep -q '^[^#]'; then
+ sed -i "/$line/d" /tmp/case-list.txt
+ fi
+done < $DEQP_SKIPS
+
+# If the job is parallel, take the corresponding fraction of the caselist.
+# Note: N~M is a gnu sed extension to match every nth line (first line is #1).
+if [ -n "$CI_NODE_INDEX" ]; then
+ sed -ni $CI_NODE_INDEX~$CI_NODE_TOTAL"p" /tmp/case-list.txt
+fi
+
+if [ ! -s /tmp/case-list.txt ]; then
+ echo "Caselist generation failed"
+ exit 1
+fi
+
+# Cannot use tee because dash doesn't have pipefail
+touch /tmp/result.txt
+tail -f /tmp/result.txt &
+
+./deqp-$DEQP_VER "${DEQP_OPTIONS[@]}" --deqp-log-filename=$RESULTS/results.qpa --deqp-caselist-file=/tmp/case-list.txt >> /tmp/result.txt
+DEQP_EXITCODE=$?
+
+sed -ne \
+ '/StatusCode="Fail"/{x;p}; s/#beginTestCaseResult //; T; h' \
+ $RESULTS/results.qpa \
+ > /tmp/unsorted-fails.txt
+
+# Scrape out the renderer that the test run used, so we can validate that the
+# right driver was used.
+if grep -q "dEQP-.*.info.renderer" /tmp/case-list.txt; then
+ # This is an ugly dependency on the .qpa format: Print 3 lines after the
+ # match, which happens to contain the result.
+ RENDERER=`sed -n '/#beginTestCaseResult dEQP-.*.info.renderer/{n;n;n;p}' $RESULTS/results.qpa | sed -n -E "s|<Text>(.*)</Text>|\1|p"`
+
+ echo "GL_RENDERER for this test run: $RENDERER"
+
+ if [ -n "$DEQP_RENDERER_MATCH" ]; then
+ echo $RENDERER | grep -q $DEQP_RENDERER_MATCH > /dev/null
+ fi
+fi
+
+if [ $DEQP_EXITCODE -ne 0 ]; then
+ exit $DEQP_EXITCODE
+fi
+
+sort < /tmp/unsorted-fails.txt > $RESULTS/fails.txt
+
+comm -23 $RESULTS/fails.txt /tmp/expected-fails.txt > /tmp/new-fails.txt
+if [ -s /tmp/new-fails.txt ]; then
+ echo "Unexpected failures:"
+ cat /tmp/new-fails.txt
+ exit 1
+else
+ echo "No new failures"
+fi