17ec681f3Smrg#!/bin/sh
27ec681f3Smrg
37ec681f3Smrgset -ex
47ec681f3Smrg
57ec681f3Smrgif [ -z "$GPU_VERSION" ]; then
67ec681f3Smrg   echo 'GPU_VERSION must be set to something like "llvmpipe" or "freedreno-a630" (the name used in .gitlab-ci/gpu-version-*.txt)'
77ec681f3Smrg   exit 1
87ec681f3Smrgfi
97ec681f3Smrg
107ec681f3SmrgINSTALL=`pwd`/install
117ec681f3Smrg
127ec681f3Smrg# Set up the driver environment.
137ec681f3Smrgexport LD_LIBRARY_PATH=`pwd`/install/lib/
147ec681f3Smrgexport EGL_PLATFORM=surfaceless
157ec681f3Smrgexport VK_ICD_FILENAMES=`pwd`/install/share/vulkan/icd.d/"$VK_DRIVER"_icd.${VK_CPU:-`uname -m`}.json
167ec681f3Smrg
177ec681f3SmrgRESULTS=`pwd`/${DEQP_RESULTS_DIR:-results}
187ec681f3Smrgmkdir -p $RESULTS
197ec681f3Smrg
207ec681f3SmrgHANG_DETECTION_CMD=""
217ec681f3Smrg
227ec681f3Smrgif [ -z "$DEQP_SUITE" ]; then
237ec681f3Smrg    if [ -z "$DEQP_VER" ]; then
247ec681f3Smrg        echo 'DEQP_SUITE must be set to the name of your deqp-gpu_version.toml, or DEQP_VER must be set to something like "gles2", "gles31-khr" or "vk" for the test run'
257ec681f3Smrg        exit 1
267ec681f3Smrg    fi
277ec681f3Smrg
287ec681f3Smrg    DEQP_WIDTH=${DEQP_WIDTH:-256}
297ec681f3Smrg    DEQP_HEIGHT=${DEQP_HEIGHT:-256}
307ec681f3Smrg    DEQP_CONFIG=${DEQP_CONFIG:-rgba8888d24s8ms0}
317ec681f3Smrg    DEQP_VARIANT=${DEQP_VARIANT:-master}
327ec681f3Smrg
337ec681f3Smrg    DEQP_OPTIONS="$DEQP_OPTIONS --deqp-surface-width=$DEQP_WIDTH --deqp-surface-height=$DEQP_HEIGHT"
347ec681f3Smrg    DEQP_OPTIONS="$DEQP_OPTIONS --deqp-surface-type=${DEQP_SURFACE_TYPE:-pbuffer}"
357ec681f3Smrg    DEQP_OPTIONS="$DEQP_OPTIONS --deqp-gl-config-name=$DEQP_CONFIG"
367ec681f3Smrg    DEQP_OPTIONS="$DEQP_OPTIONS --deqp-visibility=hidden"
377ec681f3Smrg
387ec681f3Smrg    if [ "$DEQP_VER" = "vk" -a -z "$VK_DRIVER" ]; then
397ec681f3Smrg        echo 'VK_DRIVER must be to something like "radeon" or "intel" for the test run'
407ec681f3Smrg        exit 1
417ec681f3Smrg    fi
427ec681f3Smrg
437ec681f3Smrg    # Generate test case list file.
447ec681f3Smrg    if [ "$DEQP_VER" = "vk" ]; then
457ec681f3Smrg       MUSTPASS=/deqp/mustpass/vk-$DEQP_VARIANT.txt
467ec681f3Smrg       DEQP=/deqp/external/vulkancts/modules/vulkan/deqp-vk
477ec681f3Smrg       HANG_DETECTION_CMD="/parallel-deqp-runner/build/bin/hang-detection"
487ec681f3Smrg    elif [ "$DEQP_VER" = "gles2" -o "$DEQP_VER" = "gles3" -o "$DEQP_VER" = "gles31" -o "$DEQP_VER" = "egl" ]; then
497ec681f3Smrg       MUSTPASS=/deqp/mustpass/$DEQP_VER-$DEQP_VARIANT.txt
507ec681f3Smrg       DEQP=/deqp/modules/$DEQP_VER/deqp-$DEQP_VER
517ec681f3Smrg    elif [ "$DEQP_VER" = "gles2-khr" -o "$DEQP_VER" = "gles3-khr" -o "$DEQP_VER" = "gles31-khr" -o "$DEQP_VER" = "gles32-khr" ]; then
527ec681f3Smrg       MUSTPASS=/deqp/mustpass/$DEQP_VER-$DEQP_VARIANT.txt
537ec681f3Smrg       DEQP=/deqp/external/openglcts/modules/glcts
547ec681f3Smrg    else
557ec681f3Smrg       MUSTPASS=/deqp/mustpass/$DEQP_VER-$DEQP_VARIANT.txt
567ec681f3Smrg       DEQP=/deqp/external/openglcts/modules/glcts
577ec681f3Smrg    fi
587ec681f3Smrg
597ec681f3Smrg    cp $MUSTPASS /tmp/case-list.txt
607ec681f3Smrg
617ec681f3Smrg    # If the caselist is too long to run in a reasonable amount of time, let the job
627ec681f3Smrg    # specify what fraction (1/n) of the caselist we should run.  Note: N~M is a gnu
637ec681f3Smrg    # sed extension to match every nth line (first line is #1).
647ec681f3Smrg    if [ -n "$DEQP_FRACTION" ]; then
657ec681f3Smrg       sed -ni 1~$DEQP_FRACTION"p" /tmp/case-list.txt
667ec681f3Smrg    fi
677ec681f3Smrg
687ec681f3Smrg    # If the job is parallel at the gitab job level, take the corresponding fraction
697ec681f3Smrg    # of the caselist.
707ec681f3Smrg    if [ -n "$CI_NODE_INDEX" ]; then
717ec681f3Smrg       sed -ni $CI_NODE_INDEX~$CI_NODE_TOTAL"p" /tmp/case-list.txt
727ec681f3Smrg    fi
737ec681f3Smrg
747ec681f3Smrg    if [ -n "$DEQP_CASELIST_FILTER" ]; then
757ec681f3Smrg        sed -ni "/$DEQP_CASELIST_FILTER/p" /tmp/case-list.txt
767ec681f3Smrg    fi
777ec681f3Smrg
787ec681f3Smrg    if [ -n "$DEQP_CASELIST_INV_FILTER" ]; then
797ec681f3Smrg        sed -ni "/$DEQP_CASELIST_INV_FILTER/!p" /tmp/case-list.txt
807ec681f3Smrg    fi
817ec681f3Smrg
827ec681f3Smrg    if [ ! -s /tmp/case-list.txt ]; then
837ec681f3Smrg        echo "Caselist generation failed"
847ec681f3Smrg        exit 1
857ec681f3Smrg    fi
867ec681f3Smrgfi
877ec681f3Smrg
887ec681f3Smrgif [ -e "$INSTALL/$GPU_VERSION-fails.txt" ]; then
897ec681f3Smrg    DEQP_RUNNER_OPTIONS="$DEQP_RUNNER_OPTIONS --baseline $INSTALL/$GPU_VERSION-fails.txt"
907ec681f3Smrgfi
917ec681f3Smrg
927ec681f3Smrg# Default to an empty known flakes file if it doesn't exist.
937ec681f3Smrgtouch $INSTALL/$GPU_VERSION-flakes.txt
947ec681f3Smrg
957ec681f3Smrg
967ec681f3Smrgif [ -n "$VK_DRIVER" ] && [ -e "$INSTALL/$VK_DRIVER-skips.txt" ]; then
977ec681f3Smrg    DEQP_SKIPS="$DEQP_SKIPS $INSTALL/$VK_DRIVER-skips.txt"
987ec681f3Smrgfi
997ec681f3Smrg
1007ec681f3Smrgif [ -n "$GALLIUM_DRIVER" ] && [ -e "$INSTALL/$GALLIUM_DRIVER-skips.txt" ]; then
1017ec681f3Smrg    DEQP_SKIPS="$DEQP_SKIPS $INSTALL/$GALLIUM_DRIVER-skips.txt"
1027ec681f3Smrgfi
1037ec681f3Smrg
1047ec681f3Smrgif [ -n "$DRIVER_NAME" ] && [ -e "$INSTALL/$DRIVER_NAME-skips.txt" ]; then
1057ec681f3Smrg    DEQP_SKIPS="$DEQP_SKIPS $INSTALL/$DRIVER_NAME-skips.txt"
1067ec681f3Smrgfi
1077ec681f3Smrg
1087ec681f3Smrgif [ -e "$INSTALL/$GPU_VERSION-skips.txt" ]; then
1097ec681f3Smrg    DEQP_SKIPS="$DEQP_SKIPS $INSTALL/$GPU_VERSION-skips.txt"
1107ec681f3Smrgfi
1117ec681f3Smrg
1127ec681f3Smrgset +e
1137ec681f3Smrg
1147ec681f3Smrgreport_load() {
1157ec681f3Smrg    echo "System load: $(cut -d' ' -f1-3 < /proc/loadavg)"
1167ec681f3Smrg    echo "# of CPU cores: $(cat /proc/cpuinfo | grep processor | wc -l)"
1177ec681f3Smrg}
1187ec681f3Smrg
1197ec681f3Smrg# wrapper to supress +x to avoid spamming the log
1207ec681f3Smrgquiet() {
1217ec681f3Smrg    set +x
1227ec681f3Smrg    "$@"
1237ec681f3Smrg    set -x
1247ec681f3Smrg}
1257ec681f3Smrg
1267ec681f3Smrgif [ "$GALLIUM_DRIVER" = "virpipe" ]; then
1277ec681f3Smrg    # deqp is to use virpipe, and virgl_test_server llvmpipe
1287ec681f3Smrg    export GALLIUM_DRIVER="$GALLIUM_DRIVER"
1297ec681f3Smrg
1307ec681f3Smrg    VTEST_ARGS="--use-egl-surfaceless"
1317ec681f3Smrg    if [ "$VIRGL_HOST_API" = "GLES" ]; then
1327ec681f3Smrg        VTEST_ARGS="$VTEST_ARGS --use-gles"
1337ec681f3Smrg    fi
1347ec681f3Smrg
1357ec681f3Smrg    GALLIUM_DRIVER=llvmpipe \
1367ec681f3Smrg    GALLIVM_PERF="nopt" \
1377ec681f3Smrg    virgl_test_server $VTEST_ARGS >$RESULTS/vtest-log.txt 2>&1 &
1387ec681f3Smrg
1397ec681f3Smrg    sleep 1
1407ec681f3Smrgfi
1417ec681f3Smrg
1427ec681f3Smrgif [ -z "$DEQP_SUITE" ]; then
1437ec681f3Smrg    if [ -n "$DEQP_EXPECTED_RENDERER" ]; then
1447ec681f3Smrg        export DEQP_RUNNER_OPTIONS="$DEQP_RUNNER_OPTIONS --renderer-check "$DEQP_EXPECTED_RENDERER""
1457ec681f3Smrg    fi
1467ec681f3Smrg    if [ $DEQP_VER != vk -a $DEQP_VER != egl ]; then
1477ec681f3Smrg        export DEQP_RUNNER_OPTIONS="$DEQP_RUNNER_OPTIONS --version-check `cat $INSTALL/VERSION | sed 's/[() ]/./g'`"
1487ec681f3Smrg    fi
1497ec681f3Smrg
1507ec681f3Smrg    deqp-runner \
1517ec681f3Smrg        run \
1527ec681f3Smrg        --deqp $DEQP \
1537ec681f3Smrg        --output $RESULTS \
1547ec681f3Smrg        --caselist /tmp/case-list.txt \
1557ec681f3Smrg        --skips $INSTALL/all-skips.txt $DEQP_SKIPS \
1567ec681f3Smrg        --flakes $INSTALL/$GPU_VERSION-flakes.txt \
1577ec681f3Smrg        --testlog-to-xml /deqp/executor/testlog-to-xml \
1587ec681f3Smrg        --jobs ${FDO_CI_CONCURRENT:-4} \
1597ec681f3Smrg	$DEQP_RUNNER_OPTIONS \
1607ec681f3Smrg        -- \
1617ec681f3Smrg        $DEQP_OPTIONS
1627ec681f3Smrgelse
1637ec681f3Smrg    deqp-runner \
1647ec681f3Smrg        suite \
1657ec681f3Smrg        --suite $INSTALL/deqp-$DEQP_SUITE.toml \
1667ec681f3Smrg        --output $RESULTS \
1677ec681f3Smrg        --skips $INSTALL/all-skips.txt $DEQP_SKIPS \
1687ec681f3Smrg        --flakes $INSTALL/$GPU_VERSION-flakes.txt \
1697ec681f3Smrg        --testlog-to-xml /deqp/executor/testlog-to-xml \
1707ec681f3Smrg        --fraction-start $CI_NODE_INDEX \
1717ec681f3Smrg        --fraction $CI_NODE_TOTAL \
1727ec681f3Smrg        --jobs ${FDO_CI_CONCURRENT:-4} \
1737ec681f3Smrg	$DEQP_RUNNER_OPTIONS
1747ec681f3Smrgfi
1757ec681f3Smrg
1767ec681f3SmrgDEQP_EXITCODE=$?
1777ec681f3Smrg
1787ec681f3Smrgquiet report_load
1797ec681f3Smrg
1807ec681f3Smrg# Remove all but the first 50 individual XML files uploaded as artifacts, to
1817ec681f3Smrg# save fd.o space when you break everything.
1827ec681f3Smrgfind $RESULTS -name \*.xml | \
1837ec681f3Smrg    sort -n |
1847ec681f3Smrg    sed -n '1,+49!p' | \
1857ec681f3Smrg    xargs rm -f
1867ec681f3Smrg
1877ec681f3Smrg# If any QPA XMLs are there, then include the XSL/CSS in our artifacts.
1887ec681f3Smrgfind $RESULTS -name \*.xml \
1897ec681f3Smrg    -exec cp /deqp/testlog.css /deqp/testlog.xsl "$RESULTS/" ";" \
1907ec681f3Smrg    -quit
1917ec681f3Smrg
1927ec681f3Smrgdeqp-runner junit \
1937ec681f3Smrg   --testsuite dEQP \
1947ec681f3Smrg   --results $RESULTS/failures.csv \
1957ec681f3Smrg   --output $RESULTS/junit.xml \
1967ec681f3Smrg   --limit 50 \
1977ec681f3Smrg   --template "See https://$CI_PROJECT_ROOT_NAMESPACE.pages.freedesktop.org/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/results/{{testcase}}.xml"
1987ec681f3Smrg
1997ec681f3Smrg# Report the flakes to the IRC channel for monitoring (if configured):
2007ec681f3Smrgif [ -n "$FLAKES_CHANNEL" ]; then
2017ec681f3Smrg  python3 $INSTALL/report-flakes.py \
2027ec681f3Smrg         --host irc.oftc.net \
2037ec681f3Smrg         --port 6667 \
2047ec681f3Smrg         --results $RESULTS/results.csv \
2057ec681f3Smrg         --known-flakes $INSTALL/$GPU_VERSION-flakes.txt \
2067ec681f3Smrg         --channel "$FLAKES_CHANNEL" \
2077ec681f3Smrg         --runner "$CI_RUNNER_DESCRIPTION" \
2087ec681f3Smrg         --job "$CI_JOB_ID" \
2097ec681f3Smrg         --url "$CI_JOB_URL" \
2107ec681f3Smrg         --branch "${CI_MERGE_REQUEST_SOURCE_BRANCH_NAME:-$CI_COMMIT_BRANCH}" \
2117ec681f3Smrg         --branch-title "${CI_MERGE_REQUEST_TITLE:-$CI_COMMIT_TITLE}"
2127ec681f3Smrgfi
2137ec681f3Smrg
2147ec681f3Smrgexit $DEQP_EXITCODE
215