X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=.gitlab-ci%2Fdeqp-runner.sh;h=fb3e87bd55c9665cb9b4324d961923b22e8eb50d;hb=624b8b4a9281979a42692a87e82914fd3875d948;hp=0749fc917f35d435ae0f542087570388e96a259c;hpb=2637961d29b3828e07953159d075f8544ce3fae5;p=mesa.git diff --git a/.gitlab-ci/deqp-runner.sh b/.gitlab-ci/deqp-runner.sh index 0749fc917f3..fb3e87bd55c 100755 --- a/.gitlab-ci/deqp-runner.sh +++ b/.gitlab-ci/deqp-runner.sh @@ -7,12 +7,10 @@ DEQP_OPTIONS="$DEQP_OPTIONS --deqp-surface-type=pbuffer" DEQP_OPTIONS="$DEQP_OPTIONS --deqp-gl-config-name=rgba8888d24s8ms0" DEQP_OPTIONS="$DEQP_OPTIONS --deqp-visibility=hidden" -# It would be nice to be able to enable the watchdog, so that hangs in a test -# don't need to wait the full hour for the run to time out. However, some -# shaders end up taking long enough to compile -# (dEQP-GLES31.functional.ubo.random.all_per_block_buffers.20 for example) -# that they'll sporadically trigger the watchdog. -#DEQP_OPTIONS="$DEQP_OPTIONS --deqp-watchdog=enable" +# deqp's shader cache (for vulkan) is not multiprocess safe for a common +# filename, see: +# https://gitlab.freedesktop.org/mesa/parallel-deqp-runner/-/merge_requests/13 +DEQP_OPTIONS="$DEQP_OPTIONS --deqp-shadercache=disable" if [ -z "$DEQP_VER" ]; then echo 'DEQP_VER must be set to something like "gles2", "gles31" or "vk" for the test run' @@ -36,7 +34,7 @@ INSTALL=`pwd`/install # Set up the driver environment. export LD_LIBRARY_PATH=`pwd`/install/lib/ export EGL_PLATFORM=surfaceless -export VK_ICD_FILENAMES=`pwd`/install/share/vulkan/icd.d/"$VK_DRIVER"_icd.x86_64.json +export VK_ICD_FILENAMES=`pwd`/install/share/vulkan/icd.d/"$VK_DRIVER"_icd.`uname -m`.json # the runner was failing to look for libkms in /usr/local/lib for some reason # I never figured out. @@ -49,9 +47,14 @@ mkdir -p $RESULTS if [ "$DEQP_VER" = "vk" ]; then cp /deqp/mustpass/vk-master.txt /tmp/case-list.txt DEQP=/deqp/external/vulkancts/modules/vulkan/deqp-vk -else +elif [ "$DEQP_VER" = "gles2" -o "$DEQP_VER" = "gles3" -o "$DEQP_VER" = "gles31" ]; then cp /deqp/mustpass/$DEQP_VER-master.txt /tmp/case-list.txt DEQP=/deqp/modules/$DEQP_VER/deqp-$DEQP_VER + SUITE=dEQP +else + cp /deqp/mustpass/$DEQP_VER-master.txt /tmp/case-list.txt + DEQP=/deqp/external/openglcts/modules/glcts + SUITE=KHR fi # If the job is parallel, take the corresponding fraction of the caselist. @@ -61,7 +64,7 @@ if [ -n "$CI_NODE_INDEX" ]; then fi if [ -n "$DEQP_CASELIST_FILTER" ]; then - sed -i "/$DEQP_CASELIST_FILTER/p" /tmp/case-list.txt + sed -ni "/$DEQP_CASELIST_FILTER/p" /tmp/case-list.txt fi if [ ! -s /tmp/case-list.txt ]; then @@ -140,15 +143,21 @@ extract_xml_result() { shift 1 qpas=$* start="#beginTestCaseResult $testcase" - for qpa in $qpas; do + + # Pick the first QPA mentioning our testcase + qpa=`grep -l "$start" $qpas | head -n 1` + + # If we found one, go extract just that testcase's contents from the QPA + # to a new QPA, then do testlog-to-xml on that. + if [ -n "$qpa" ]; then while IFS= read -r line; do if [ "$line" = "$start" ]; then dst="$testcase.qpa" echo "#beginSession" > $dst - echo $line >> $dst + echo "$line" >> $dst while IFS= read -r line; do if [ "$line" = "#endTestCaseResult" ]; then - echo $line >> $dst + echo "$line" >> $dst echo "#endSession" >> $dst /deqp/executor/testlog-to-xml $dst "$RESULTS/$testcase$DEQP_RUN_SUFFIX.xml" # copy the stylesheets here so they only end up in artifacts @@ -157,12 +166,12 @@ extract_xml_result() { cp /deqp/testlog.xsl "$RESULTS/" return 0 fi - echo $line >> $dst + echo "$line" >> $dst done return 1 fi done < $qpa - done + fi } extract_xml_results() { @@ -211,15 +220,26 @@ parse_renderer() { } check_renderer() { - echo "Capturing renderer info for driver sanity checks" + echo "Capturing renderer info for GLES driver sanity checks" # If you're having trouble loading your driver, uncommenting this may help # debug. # export EGL_LOG_LEVEL=debug VERSION=`echo $DEQP_VER | tr '[a-z]' '[A-Z]'` - $DEQP $DEQP_OPTIONS --deqp-case=dEQP-$VERSION.info.\* --deqp-log-filename=$RESULTS/deqp-info.qpa + $DEQP $DEQP_OPTIONS --deqp-case=$SUITE-$VERSION.info.\* --deqp-log-filename=$RESULTS/deqp-info.qpa parse_renderer } +check_vk_device_name() { + echo "Capturing device info for VK driver sanity checks" + $DEQP $DEQP_OPTIONS --deqp-case=dEQP-VK.info.device --deqp-log-filename=$RESULTS/deqp-info.qpa + DEVICENAME=`grep deviceName $RESULTS/deqp-info.qpa | sed 's|deviceName: ||g'` + echo "deviceName: $DEVICENAME" + if [ -n "$DEQP_EXPECTED_RENDERER" -a $DEVICENAME != "$DEQP_EXPECTED_RENDERER" ]; then + echo "Expected deviceName $DEQP_EXPECTED_RENDERER" + exit 1 + fi +} + # wrapper to supress +x to avoid spamming the log quiet() { set +x @@ -231,16 +251,21 @@ if [ "$GALLIUM_DRIVER" = "virpipe" ]; then # deqp is to use virpipe, and virgl_test_server llvmpipe export GALLIUM_DRIVER="$GALLIUM_DRIVER" + VTEST_ARGS="--use-egl-surfaceless" + if [ "$VIRGL_HOST_API" = "GLES" ]; then + VTEST_ARGS="$VTEST_ARGS --use-gles" + fi + GALLIUM_DRIVER=llvmpipe \ GALLIVM_PERF="nopt,no_filter_hacks" \ - VTEST_USE_EGL_SURFACELESS=1 \ - VTEST_USE_GLES=1 \ - virgl_test_server >$RESULTS/vtest-log.txt 2>&1 & + virgl_test_server $VTEST_ARGS >$RESULTS/vtest-log.txt 2>&1 & sleep 1 fi -if [ $DEQP_VER != vk ]; then +if [ $DEQP_VER = vk ]; then + quiet check_vk_device_name +else quiet check_renderer fi @@ -257,20 +282,20 @@ DEQP_EXITCODE=$? if [ $DEQP_EXITCODE -ne 0 ]; then # preserve caselist files in case of failures: cp /tmp/deqp_runner.*.txt $RESULTS/ - egrep -v ",Pass|,Skip|,ExpectedFail" $RESULTSFILE > $UNEXPECTED_RESULTSFILE.txt + egrep -v ",Pass|,Skip|,ExpectedFail" $RESULTSFILE > $UNEXPECTED_RESULTSFILE if [ -z "$DEQP_NO_SAVE_RESULTS" ]; then echo "Some unexpected results found (see cts-runner-results.txt in artifacts for full results):" - head -n 50 $UNEXPECTED_RESULTSFILE.txt + head -n 50 $UNEXPECTED_RESULTSFILE # Save the logs for up to the first 50 unexpected results: - head -n 50 $UNEXPECTED_RESULTSFILE.txt | quiet extract_xml_results /tmp/*.qpa + head -n 50 $UNEXPECTED_RESULTSFILE | quiet extract_xml_results /tmp/*.qpa else echo "Unexpected results found:" - cat $UNEXPECTED_RESULTSFILE.txt + cat $UNEXPECTED_RESULTSFILE fi - count=`cat $UNEXPECTED_RESULTSFILE.txt | wc -l` + count=`cat $UNEXPECTED_RESULTSFILE | wc -l` # Re-run fails to detect flakes. But use a small threshold, if # something was fundamentally broken, we don't want to re-run