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