llvmpipe: add infrastructure for disk cache support
[mesa.git] / .gitlab-ci / deqp-runner.sh
index d2c29071121cc799430bde7fbb9575f7c4c862f7..b9f14fe25b46515216ed4b8d483068e3304cb4b3 100755 (executable)
@@ -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.
@@ -140,7 +138,13 @@ 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"
@@ -162,7 +166,7 @@ extract_xml_result() {
                 return 1
             fi
         done < $qpa
-    done
+    fi
 }
 
 extract_xml_results() {
@@ -211,7 +215,7 @@ 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
@@ -220,6 +224,17 @@ check_renderer() {
     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
@@ -240,7 +255,9 @@ if [ "$GALLIUM_DRIVER" = "virpipe" ]; then
     sleep 1
 fi
 
-if [ $DEQP_VER != vk ]; then
+if [ $DEQP_VER = vk ]; then
+    quiet check_vk_device_name
+else
     quiet check_renderer
 fi