2023-04-16 00:49:40 +01:00
#!/usr/bin/env bash
2023-05-20 23:47:05 +01:00
# shellcheck disable=SC2086 # we want word splitting
2019-06-29 00:35:32 +01:00
2022-12-11 16:46:41 +00:00
section_start test_setup "deqp: preparing test setup"
2022-03-10 20:53:22 +00:00
2019-06-29 00:35:32 +01:00
set -ex
2021-09-08 06:38:59 +01:00
# Needed so configuration files can contain paths to files in /install
2023-04-16 00:49:40 +01:00
ln -sf " $CI_PROJECT_DIR " /install /install
2021-09-08 06:38:59 +01:00
2020-12-17 19:08:42 +00:00
if [ -z " $GPU_VERSION " ] ; then
2021-10-25 18:27:10 +01:00
echo 'GPU_VERSION must be set to something like "llvmpipe" or "freedreno-a630" (the name used in .gitlab-ci/gpu-version-*.txt)'
2019-06-29 00:35:32 +01:00
exit 1
fi
2023-04-16 00:49:40 +01:00
INSTALL = $( realpath -s " $PWD " /install)
2019-06-29 00:35:32 +01:00
# Set up the driver environment.
2023-04-24 17:39:09 +01:00
export LD_LIBRARY_PATH = " $INSTALL " /lib/:$LD_LIBRARY_PATH
2019-06-29 00:35:32 +01:00
export EGL_PLATFORM = surfaceless
2024-05-14 15:57:43 +01:00
ARCH = $( uname -m)
export VK_DRIVER_FILES = " $PWD " /install/share/vulkan/icd.d/" $VK_DRIVER " _icd." $ARCH " .json
2023-04-16 00:49:40 +01:00
export OCL_ICD_VENDORS = " $PWD " /install/etc/OpenCL/vendors/
2019-06-29 00:35:32 +01:00
2022-12-01 19:54:03 +00:00
if [ -n " $USE_ANGLE " ] ; then
export LD_LIBRARY_PATH = /angle:$LD_LIBRARY_PATH
fi
2023-04-16 00:49:40 +01:00
RESULTS = " $PWD / ${ DEQP_RESULTS_DIR :- results } "
mkdir -p " $RESULTS "
2019-06-29 00:35:32 +01:00
2022-02-07 09:43:57 +00:00
# Ensure Mesa Shader Cache resides on tmpfs.
2022-03-14 17:50:26 +00:00
SHADER_CACHE_HOME = ${ XDG_CACHE_HOME :- ${ HOME } /.cache }
SHADER_CACHE_DIR = ${ MESA_SHADER_CACHE_DIR :- ${ SHADER_CACHE_HOME } /mesa_shader_cache }
2022-02-07 09:43:57 +00:00
2022-03-14 17:50:26 +00:00
findmnt -n tmpfs ${ SHADER_CACHE_HOME } || findmnt -n tmpfs ${ SHADER_CACHE_DIR } || {
mkdir -p ${ SHADER_CACHE_DIR }
mount -t tmpfs -o nosuid,nodev,size= 2G,mode= 1755 tmpfs ${ SHADER_CACHE_DIR }
2022-02-07 09:43:57 +00:00
}
2021-07-21 21:12:29 +01:00
if [ -z " $DEQP_SUITE " ] ; then
2021-10-14 22:05:20 +01:00
if [ -z " $DEQP_VER " ] ; then
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'
exit 1
fi
DEQP_WIDTH = ${ DEQP_WIDTH :- 256 }
DEQP_HEIGHT = ${ DEQP_HEIGHT :- 256 }
DEQP_CONFIG = ${ DEQP_CONFIG :- rgba8888d24s8ms0 }
DEQP_OPTIONS = " $DEQP_OPTIONS --deqp-surface-width= $DEQP_WIDTH --deqp-surface-height= $DEQP_HEIGHT "
DEQP_OPTIONS = " $DEQP_OPTIONS --deqp-surface-type= ${ DEQP_SURFACE_TYPE :- pbuffer } "
DEQP_OPTIONS = " $DEQP_OPTIONS --deqp-gl-config-name= $DEQP_CONFIG "
DEQP_OPTIONS = " $DEQP_OPTIONS --deqp-visibility=hidden "
2023-05-20 23:47:05 +01:00
if [ " $DEQP_VER " = "vk" ] && [ -z " $VK_DRIVER " ] ; then
2021-10-14 22:05:20 +01:00
echo 'VK_DRIVER must be to something like "radeon" or "intel" for the test run'
exit 1
fi
2021-10-12 00:27:25 +01:00
# Generate test case list file.
if [ " $DEQP_VER " = "vk" ] ; then
2024-04-15 15:59:36 +01:00
MUSTPASS = /deqp/mustpass/vk-main.txt
2021-10-12 00:27:25 +01:00
DEQP = /deqp/external/vulkancts/modules/vulkan/deqp-vk
2023-05-20 23:47:05 +01:00
elif [ " $DEQP_VER " = "gles2" ] || [ " $DEQP_VER " = "gles3" ] || [ " $DEQP_VER " = "gles31" ] || [ " $DEQP_VER " = "egl" ] ; then
2024-02-14 14:50:53 +00:00
MUSTPASS = /deqp/mustpass/$DEQP_VER -main.txt
2021-10-12 00:27:25 +01:00
DEQP = /deqp/modules/$DEQP_VER /deqp-$DEQP_VER
2023-05-20 23:47:05 +01:00
elif [ " $DEQP_VER " = "gles2-khr" ] || [ " $DEQP_VER " = "gles3-khr" ] || [ " $DEQP_VER " = "gles31-khr" ] || [ " $DEQP_VER " = "gles32-khr" ] ; then
2024-02-14 14:50:53 +00:00
MUSTPASS = /deqp/mustpass/$DEQP_VER -main.txt
2021-10-12 00:27:25 +01:00
DEQP = /deqp/external/openglcts/modules/glcts
else
2024-02-14 14:50:53 +00:00
MUSTPASS = /deqp/mustpass/$DEQP_VER -main.txt
2021-10-12 00:27:25 +01:00
DEQP = /deqp/external/openglcts/modules/glcts
fi
2021-07-21 21:12:29 +01:00
cp $MUSTPASS /tmp/case-list.txt
2020-11-06 23:55:24 +00:00
2021-07-21 21:12:29 +01:00
# If the caselist is too long to run in a reasonable amount of time, let the job
# specify what fraction (1/n) of the caselist we should run. Note: N~M is a gnu
# sed extension to match every nth line (first line is #1).
if [ -n " $DEQP_FRACTION " ] ; then
sed -ni 1~$DEQP_FRACTION "p" /tmp/case-list.txt
fi
2019-06-29 00:35:32 +01:00
2021-07-21 21:12:29 +01:00
# If the job is parallel at the gitab job level, take the corresponding fraction
# of the caselist.
if [ -n " $CI_NODE_INDEX " ] ; then
sed -ni $CI_NODE_INDEX ~$CI_NODE_TOTAL "p" /tmp/case-list.txt
fi
2020-04-17 20:02:37 +01:00
2021-07-21 21:12:29 +01:00
if [ ! -s /tmp/case-list.txt ] ; then
echo "Caselist generation failed"
exit 1
fi
2019-06-29 00:35:32 +01:00
fi
2021-10-25 18:27:10 +01:00
if [ -e " $INSTALL / $GPU_VERSION -fails.txt " ] ; then
DEQP_RUNNER_OPTIONS = " $DEQP_RUNNER_OPTIONS --baseline $INSTALL / $GPU_VERSION -fails.txt "
2020-10-29 17:29:28 +00:00
fi
2021-05-26 18:45:33 +01:00
# Default to an empty known flakes file if it doesn't exist.
2021-10-25 18:27:10 +01:00
touch $INSTALL /$GPU_VERSION -flakes.txt
2020-12-17 19:08:42 +00:00
2021-06-16 15:59:15 +01:00
2021-10-25 18:27:10 +01:00
if [ -n " $VK_DRIVER " ] && [ -e " $INSTALL / $VK_DRIVER -skips.txt " ] ; then
DEQP_SKIPS = " $DEQP_SKIPS $INSTALL / $VK_DRIVER -skips.txt "
2021-06-16 15:59:15 +01:00
fi
2021-10-25 18:27:10 +01:00
if [ -n " $GALLIUM_DRIVER " ] && [ -e " $INSTALL / $GALLIUM_DRIVER -skips.txt " ] ; then
DEQP_SKIPS = " $DEQP_SKIPS $INSTALL / $GALLIUM_DRIVER -skips.txt "
2021-06-16 15:59:15 +01:00
fi
2021-10-25 18:27:10 +01:00
if [ -n " $DRIVER_NAME " ] && [ -e " $INSTALL / $DRIVER_NAME -skips.txt " ] ; then
DEQP_SKIPS = " $DEQP_SKIPS $INSTALL / $DRIVER_NAME -skips.txt "
2021-06-16 15:59:15 +01:00
fi
2021-10-25 18:27:10 +01:00
if [ -e " $INSTALL / $GPU_VERSION -skips.txt " ] ; then
DEQP_SKIPS = " $DEQP_SKIPS $INSTALL / $GPU_VERSION -skips.txt "
2019-06-29 00:35:32 +01:00
fi
2023-01-03 20:25:19 +00:00
if [ " $PIGLIT_PLATFORM " != "gbm" ] ; then
DEQP_SKIPS = " $DEQP_SKIPS $INSTALL /x11-skips.txt "
fi
2023-01-19 20:18:58 +00:00
if [ " $PIGLIT_PLATFORM " = "gbm" ] ; then
DEQP_SKIPS = " $DEQP_SKIPS $INSTALL /gbm-skips.txt "
fi
2023-10-12 12:27:29 +01:00
if [ -n " $VK_DRIVER " ] && [ -z " $DEQP_SUITE " ] ; then
# Bump the number of tests per group to reduce the startup time of VKCTS.
DEQP_RUNNER_OPTIONS = " $DEQP_RUNNER_OPTIONS --tests-per-group ${ DEQP_RUNNER_TESTS_PER_GROUP :- 5000 } "
fi
2023-04-05 20:31:51 +01:00
# Set the path to VK validation layer settings (in case it ends up getting loaded)
2023-11-10 13:44:36 +00:00
# Note: If you change the format of this filename, look through the rest of the
# tree for other places that need to be kept in sync (e.g.
# src/gallium/drivers/zink/ci/gitlab-ci-inc.yml)
2023-04-05 20:31:51 +01:00
export VK_LAYER_SETTINGS_PATH = $INSTALL /$GPU_VERSION -validation-settings.txt
2020-12-21 19:25:10 +00:00
report_load( ) {
echo " System load: $( cut -d' ' -f1-3 < /proc/loadavg) "
2023-05-20 23:47:05 +01:00
echo " # of CPU cores: $( grep -c processor /proc/cpuinfo) "
2020-12-21 19:25:10 +00:00
}
2020-04-01 08:17:25 +01:00
if [ " $GALLIUM_DRIVER " = "virpipe" ] ; then
# deqp is to use virpipe, and virgl_test_server llvmpipe
export GALLIUM_DRIVER = " $GALLIUM_DRIVER "
2020-05-12 09:18:48 +01:00
VTEST_ARGS = "--use-egl-surfaceless"
if [ " $VIRGL_HOST_API " = "GLES" ] ; then
VTEST_ARGS = " $VTEST_ARGS --use-gles "
fi
2020-04-01 08:17:25 +01:00
GALLIUM_DRIVER = llvmpipe \
2020-05-12 09:18:48 +01:00
virgl_test_server $VTEST_ARGS >$RESULTS /vtest-log.txt 2>& 1 &
2020-04-01 08:17:25 +01:00
sleep 1
fi
2021-07-21 21:12:29 +01:00
if [ -z " $DEQP_SUITE " ] ; then
2021-10-12 00:27:25 +01:00
if [ -n " $DEQP_EXPECTED_RENDERER " ] ; then
2023-05-20 23:47:05 +01:00
export DEQP_RUNNER_OPTIONS = " $DEQP_RUNNER_OPTIONS --renderer-check $DEQP_EXPECTED_RENDERER "
2021-10-12 00:27:25 +01:00
fi
2023-05-20 23:47:05 +01:00
if [ $DEQP_VER != vk ] && [ $DEQP_VER != egl ] ; then
2023-08-16 19:44:37 +01:00
VER = $( sed 's/[() ]/./g' " $INSTALL /VERSION " )
2023-05-20 23:47:05 +01:00
export DEQP_RUNNER_OPTIONS = " $DEQP_RUNNER_OPTIONS --version-check $VER "
2021-10-12 00:27:25 +01:00
fi
2022-03-10 20:53:22 +00:00
fi
2022-12-11 16:46:41 +00:00
uncollapsed_section_switch deqp "deqp: deqp-runner"
2021-10-12 00:27:25 +01:00
2024-01-21 18:10:21 +00:00
# Print the detailed version with the list of backports and local patches
2024-03-22 19:07:17 +00:00
for api in vk gl gles; do
2024-01-21 18:10:21 +00:00
deqp_version_log = /deqp/version-$api
if [ -r " $deqp_version_log " ] ; then
cat " $deqp_version_log "
fi
done
2023-03-09 11:33:53 +00:00
2023-11-21 13:31:21 +00:00
set +e
2022-03-10 20:53:22 +00:00
if [ -z " $DEQP_SUITE " ] ; then
2021-07-21 21:12:29 +01:00
deqp-runner \
run \
--deqp $DEQP \
--output $RESULTS \
--caselist /tmp/case-list.txt \
2021-10-25 18:27:10 +01:00
--skips $INSTALL /all-skips.txt $DEQP_SKIPS \
--flakes $INSTALL /$GPU_VERSION -flakes.txt \
2021-07-21 21:12:29 +01:00
--testlog-to-xml /deqp/executor/testlog-to-xml \
2021-10-12 00:03:47 +01:00
--jobs ${ FDO_CI_CONCURRENT :- 4 } \
2023-08-16 19:44:37 +01:00
$DEQP_RUNNER_OPTIONS \
2021-07-21 21:12:29 +01:00
-- \
$DEQP_OPTIONS
else
2023-11-09 11:23:44 +00:00
# If you change the format of the suite toml filenames or the
# $GPU_VERSION-{fails,flakes,skips}.txt filenames, look through the rest
# of the tree for other places that need to be kept in sync (e.g.
2023-11-10 13:44:36 +00:00
# src/**/ci/gitlab-ci*.yml)
2021-07-21 21:12:29 +01:00
deqp-runner \
suite \
--suite $INSTALL /deqp-$DEQP_SUITE .toml \
--output $RESULTS \
2021-10-25 18:27:10 +01:00
--skips $INSTALL /all-skips.txt $DEQP_SKIPS \
--flakes $INSTALL /$GPU_VERSION -flakes.txt \
2021-07-21 21:12:29 +01:00
--testlog-to-xml /deqp/executor/testlog-to-xml \
--fraction-start $CI_NODE_INDEX \
2023-08-16 19:44:37 +01:00
--fraction $(( CI_NODE_TOTAL * ${ DEQP_FRACTION :- 1 } )) \
2021-10-12 00:03:47 +01:00
--jobs ${ FDO_CI_CONCURRENT :- 4 } \
2023-08-16 19:44:37 +01:00
$DEQP_RUNNER_OPTIONS
2023-11-21 13:31:21 +00:00
fi
2021-07-21 21:12:29 +01:00
2023-11-21 13:31:21 +00:00
DEQP_EXITCODE = $?
set -e
2019-08-26 20:57:16 +01:00
2022-03-10 20:53:22 +00:00
set +x
report_load
2022-12-11 16:46:41 +00:00
section_switch test_post_process "deqp: post-processing test results"
2022-03-10 20:53:22 +00:00
set -x
2020-07-28 07:22:34 +01:00
2020-12-19 00:47:51 +00:00
# Remove all but the first 50 individual XML files uploaded as artifacts, to
# save fd.o space when you break everything.
find $RESULTS -name \* .xml | \
sort -n |
sed -n '1,+49!p' | \
xargs rm -f
# If any QPA XMLs are there, then include the XSL/CSS in our artifacts.
find $RESULTS -name \* .xml \
-exec cp /deqp/testlog.css /deqp/testlog.xsl " $RESULTS / " ";" \
-quit
2021-10-14 22:02:40 +01:00
deqp-runner junit \
2021-10-12 00:27:25 +01:00
--testsuite dEQP \
2020-12-19 00:47:51 +00:00
--results $RESULTS /failures.csv \
--output $RESULTS /junit.xml \
--limit 50 \
2023-12-13 17:39:11 +00:00
--template " See $ARTIFACTS_BASE_URL /results/{{testcase}}.xml "
2019-11-17 19:16:09 +00:00
2020-10-29 17:29:28 +00:00
# Report the flakes to the IRC channel for monitoring (if configured):
2021-05-26 18:45:33 +01:00
if [ -n " $FLAKES_CHANNEL " ] ; then
python3 $INSTALL /report-flakes.py \
2021-05-26 22:13:47 +01:00
--host irc.oftc.net \
2021-05-26 18:45:33 +01:00
--port 6667 \
2021-10-12 18:37:43 +01:00
--results $RESULTS /results.csv \
2021-10-25 18:27:10 +01:00
--known-flakes $INSTALL /$GPU_VERSION -flakes.txt \
2021-05-26 18:45:33 +01:00
--channel " $FLAKES_CHANNEL " \
--runner " $CI_RUNNER_DESCRIPTION " \
--job " $CI_JOB_ID " \
--url " $CI_JOB_URL " \
--branch " ${ CI_MERGE_REQUEST_SOURCE_BRANCH_NAME :- $CI_COMMIT_BRANCH } " \
2023-10-07 20:05:07 +01:00
--branch-title " ${ CI_MERGE_REQUEST_TITLE :- $CI_COMMIT_TITLE } " || true
2021-05-26 18:45:33 +01:00
fi
2020-10-29 17:29:28 +00:00
2023-01-12 11:49:02 +00:00
# Compress results.csv to save on bandwidth during the upload of artifacts to
# GitLab. This reduces the size in a VKCTS run from 135 to 7.6MB, and takes
# 0.17s on a Ryzen 5950X (16 threads, 0.95s when limited to 1 thread).
2023-08-12 17:24:44 +01:00
zstd --rm -T0 -8q " $RESULTS /results.csv " -o " $RESULTS /results.csv.zst "
2023-01-12 11:49:02 +00:00
2022-12-11 16:46:41 +00:00
section_end test_post_process
2022-03-10 20:53:22 +00:00
2019-11-17 19:16:09 +00:00
exit $DEQP_EXITCODE