RADV is the only driver using VKCTS main. This bumps adds tests for maintenance9, unified_image_layout and VP9. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35540>
315 lines
9.6 KiB
Bash
Executable File
315 lines
9.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# shellcheck disable=SC2086 # we want word splitting
|
|
|
|
# When changing this file, you need to bump the following
|
|
# .gitlab-ci/image-tags.yml tags:
|
|
# DEBIAN_TEST_ANDROID_TAG
|
|
# DEBIAN_TEST_GL_TAG
|
|
# DEBIAN_TEST_VK_TAG
|
|
|
|
set -ue -o pipefail
|
|
|
|
# shellcheck disable=SC2153
|
|
deqp_api=${DEQP_API,,}
|
|
|
|
section_start deqp-$deqp_api "Building dEQP $DEQP_API"
|
|
|
|
set -x
|
|
|
|
# See `deqp_build_targets` below for which release is used to produce which
|
|
# binary. Unless this comment has bitrotten:
|
|
# - the commit from the main branch produces the deqp tools and `deqp-vk`,
|
|
# - the VK release produces `deqp-vk`,
|
|
# - the GL release produces `glcts`, and
|
|
# - the GLES release produces `deqp-gles*` and `deqp-egl`
|
|
|
|
DEQP_MAIN_COMMIT=9cc8e038994c32534b3d2c4ba88c1dc49ef53228
|
|
DEQP_VK_VERSION=1.4.1.1
|
|
DEQP_GL_VERSION=4.6.6.0
|
|
DEQP_GLES_VERSION=3.2.12.0
|
|
|
|
# Patches to VulkanCTS may come from commits in their repo (listed in
|
|
# cts_commits_to_backport) or patch files stored in our repo (in the patch
|
|
# directory `$OLDPWD/.gitlab-ci/container/patches/` listed in cts_patch_files).
|
|
# Both list variables would have comments explaining the reasons behind the
|
|
# patches.
|
|
|
|
# shellcheck disable=SC2034
|
|
main_cts_commits_to_backport=(
|
|
# If you find yourself wanting to add something in here, consider whether
|
|
# bumping DEQP_MAIN_COMMIT is not a better solution :)
|
|
)
|
|
|
|
# shellcheck disable=SC2034
|
|
main_cts_patch_files=(
|
|
)
|
|
|
|
# shellcheck disable=SC2034
|
|
vk_cts_commits_to_backport=(
|
|
# Stop querying device address from unbound buffers
|
|
046343f46f7d39d53b47842d7fd8ed3279528046
|
|
)
|
|
|
|
# shellcheck disable=SC2034
|
|
vk_cts_patch_files=(
|
|
)
|
|
|
|
# shellcheck disable=SC2034
|
|
gl_cts_commits_to_backport=(
|
|
# Add testing for GL_PRIMITIVES_SUBMITTED_ARB query.
|
|
e075ce73ddc5973aa46a5236c715bb281c9501fa
|
|
)
|
|
|
|
# shellcheck disable=SC2034
|
|
gl_cts_patch_files=(
|
|
build-deqp-gl_Build-Don-t-build-Vulkan-utilities-for-GL-builds.patch
|
|
build-deqp-gl_Revert-Add-missing-context-deletion.patch
|
|
build-deqp-gl_Revert-Fix-issues-with-GLX-reset-notification-strate.patch
|
|
build-deqp-gl_Revert-Fix-spurious-failures-when-using-a-config-wit.patch
|
|
)
|
|
|
|
# shellcheck disable=SC2034
|
|
# GLES builds also EGL
|
|
gles_cts_commits_to_backport=(
|
|
)
|
|
|
|
# shellcheck disable=SC2034
|
|
gles_cts_patch_files=(
|
|
build-deqp-gl_Build-Don-t-build-Vulkan-utilities-for-GL-builds.patch
|
|
build-deqp-gl_Revert-Add-missing-context-deletion.patch
|
|
build-deqp-gl_Revert-Fix-issues-with-GLX-reset-notification-strate.patch
|
|
build-deqp-gl_Revert-Fix-spurious-failures-when-using-a-config-wit.patch
|
|
)
|
|
|
|
|
|
### Careful editing anything below this line
|
|
|
|
|
|
git config --global user.email "mesa@example.com"
|
|
git config --global user.name "Mesa CI"
|
|
|
|
# shellcheck disable=SC2153
|
|
case "${DEQP_API}" in
|
|
tools) DEQP_VERSION="$DEQP_MAIN_COMMIT";;
|
|
*-main) DEQP_VERSION="$DEQP_MAIN_COMMIT";;
|
|
VK) DEQP_VERSION="vulkan-cts-$DEQP_VK_VERSION";;
|
|
GL) DEQP_VERSION="opengl-cts-$DEQP_GL_VERSION";;
|
|
GLES) DEQP_VERSION="opengl-es-cts-$DEQP_GLES_VERSION";;
|
|
*) echo "Unexpected DEQP_API value: $DEQP_API"; exit 1;;
|
|
esac
|
|
|
|
mkdir -p /VK-GL-CTS
|
|
pushd /VK-GL-CTS
|
|
[ -e .git ] || {
|
|
git init
|
|
git remote add origin https://github.com/KhronosGroup/VK-GL-CTS.git
|
|
}
|
|
git fetch --depth 1 origin "$DEQP_VERSION"
|
|
git checkout FETCH_HEAD
|
|
DEQP_COMMIT=$(git rev-parse FETCH_HEAD)
|
|
|
|
if [ "$DEQP_VERSION" = "$DEQP_MAIN_COMMIT" ]; then
|
|
merge_base="$(curl-with-retry -s https://api.github.com/repos/KhronosGroup/VK-GL-CTS/compare/main...$DEQP_MAIN_COMMIT | jq -r .merge_base_commit.sha)"
|
|
if [[ "$merge_base" != "$DEQP_MAIN_COMMIT" ]]; then
|
|
echo "VK-GL-CTS commit $DEQP_MAIN_COMMIT is not a commit from the main branch."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
mkdir -p /deqp-$deqp_api
|
|
|
|
if [ "$DEQP_VERSION" = "$DEQP_MAIN_COMMIT" ]; then
|
|
prefix="main"
|
|
else
|
|
prefix="$deqp_api"
|
|
fi
|
|
|
|
cts_commits_to_backport="${prefix}_cts_commits_to_backport[@]"
|
|
for commit in "${!cts_commits_to_backport}"
|
|
do
|
|
PATCH_URL="https://github.com/KhronosGroup/VK-GL-CTS/commit/$commit.patch"
|
|
echo "Apply patch to ${DEQP_API} CTS from $PATCH_URL"
|
|
curl-with-retry $PATCH_URL | GIT_COMMITTER_DATE=$(LC_TIME=C date -d@0) git am -
|
|
done
|
|
|
|
cts_patch_files="${prefix}_cts_patch_files[@]"
|
|
for patch in "${!cts_patch_files}"
|
|
do
|
|
echo "Apply patch to ${DEQP_API} CTS from $patch"
|
|
GIT_COMMITTER_DATE=$(LC_TIME=C date -d@0) git am < $OLDPWD/.gitlab-ci/container/patches/$patch
|
|
done
|
|
|
|
{
|
|
if [ "$DEQP_VERSION" = "$DEQP_MAIN_COMMIT" ]; then
|
|
commit_desc=$(git show --no-patch --format='commit %h on %ci' --abbrev=10 "$DEQP_COMMIT")
|
|
echo "dEQP $DEQP_API at $commit_desc"
|
|
else
|
|
echo "dEQP $DEQP_API version $DEQP_VERSION"
|
|
fi
|
|
if [ "$(git rev-parse HEAD)" != "$DEQP_COMMIT" ]; then
|
|
echo "The following local patches are applied on top:"
|
|
git log --reverse --oneline "$DEQP_COMMIT".. --format='- %s'
|
|
fi
|
|
} > /deqp-$deqp_api/deqp-$deqp_api-version
|
|
|
|
# --insecure is due to SSL cert failures hitting sourceforge for zlib and
|
|
# libpng (sigh). The archives get their checksums checked anyway, and git
|
|
# always goes through ssh or https.
|
|
python3 external/fetch_sources.py --insecure
|
|
|
|
case "${DEQP_API}" in
|
|
VK-main)
|
|
# Video tests rely on external files
|
|
python3 external/fetch_video_decode_samples.py
|
|
python3 external/fetch_video_encode_samples.py
|
|
;;
|
|
esac
|
|
|
|
if [[ "$DEQP_API" = tools ]]; then
|
|
# Save the testlog stylesheets:
|
|
cp doc/testlog-stylesheet/testlog.{css,xsl} /deqp-$deqp_api
|
|
fi
|
|
|
|
popd
|
|
|
|
deqp_build_targets=()
|
|
case "${DEQP_API}" in
|
|
VK|VK-main)
|
|
deqp_build_targets+=(deqp-vk)
|
|
;;
|
|
GL)
|
|
deqp_build_targets+=(glcts)
|
|
;;
|
|
GLES)
|
|
deqp_build_targets+=(deqp-gles{2,3,31})
|
|
deqp_build_targets+=(glcts) # needed for gles*-khr tests
|
|
# deqp-egl also comes from this build, but it is handled separately below.
|
|
;;
|
|
tools)
|
|
deqp_build_targets+=(testlog-to-xml)
|
|
deqp_build_targets+=(testlog-to-csv)
|
|
deqp_build_targets+=(testlog-to-junit)
|
|
;;
|
|
esac
|
|
|
|
OLD_IFS="$IFS"
|
|
IFS=";"
|
|
CMAKE_SBT="${deqp_build_targets[*]}"
|
|
IFS="$OLD_IFS"
|
|
|
|
pushd /deqp-$deqp_api
|
|
|
|
if [ "${DEQP_API}" = 'GLES' ]; then
|
|
if [ "${DEQP_TARGET}" = 'android' ]; then
|
|
cmake -S /VK-GL-CTS -B . -G Ninja \
|
|
-DDEQP_TARGET=android \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DSELECTED_BUILD_TARGETS="deqp-egl" \
|
|
${EXTRA_CMAKE_ARGS:-}
|
|
ninja modules/egl/deqp-egl
|
|
mv modules/egl/deqp-egl{,-android}
|
|
else
|
|
# When including EGL/X11 testing, do that build first and save off its
|
|
# deqp-egl binary.
|
|
cmake -S /VK-GL-CTS -B . -G Ninja \
|
|
-DDEQP_TARGET=x11_egl_glx \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DSELECTED_BUILD_TARGETS="deqp-egl" \
|
|
${EXTRA_CMAKE_ARGS:-}
|
|
ninja modules/egl/deqp-egl
|
|
mv modules/egl/deqp-egl{,-x11}
|
|
|
|
cmake -S /VK-GL-CTS -B . -G Ninja \
|
|
-DDEQP_TARGET=wayland \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DSELECTED_BUILD_TARGETS="deqp-egl" \
|
|
${EXTRA_CMAKE_ARGS:-}
|
|
ninja modules/egl/deqp-egl
|
|
mv modules/egl/deqp-egl{,-wayland}
|
|
fi
|
|
fi
|
|
|
|
cmake -S /VK-GL-CTS -B . -G Ninja \
|
|
-DDEQP_TARGET=${DEQP_TARGET} \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DSELECTED_BUILD_TARGETS="${CMAKE_SBT}" \
|
|
${EXTRA_CMAKE_ARGS:-}
|
|
|
|
# Make sure `default` doesn't silently stop detecting one of the platforms we care about
|
|
if [ "${DEQP_TARGET}" = 'default' ]; then
|
|
grep -q DEQP_SUPPORT_WAYLAND=1 build.ninja
|
|
grep -q DEQP_SUPPORT_X11=1 build.ninja
|
|
grep -q DEQP_SUPPORT_XCB=1 build.ninja
|
|
fi
|
|
|
|
ninja "${deqp_build_targets[@]}"
|
|
|
|
if [ "$DEQP_API" != tools ]; then
|
|
# Copy out the mustpass lists we want.
|
|
mkdir -p mustpass
|
|
|
|
if [ "${DEQP_API}" = 'VK' ] || [ "${DEQP_API}" = 'VK-main' ]; then
|
|
for mustpass in $(< /VK-GL-CTS/external/vulkancts/mustpass/main/vk-default.txt) ; do
|
|
cat /VK-GL-CTS/external/vulkancts/mustpass/main/$mustpass \
|
|
>> mustpass/vk-main.txt
|
|
done
|
|
fi
|
|
|
|
if [ "${DEQP_API}" = 'GL' ]; then
|
|
cp \
|
|
/VK-GL-CTS/external/openglcts/data/gl_cts/data/mustpass/gl/khronos_mustpass/main/*-main.txt \
|
|
mustpass/
|
|
cp \
|
|
/VK-GL-CTS/external/openglcts/data/gl_cts/data/mustpass/gl/khronos_mustpass_single/main/*-single.txt \
|
|
mustpass/
|
|
fi
|
|
|
|
if [ "${DEQP_API}" = 'GLES' ]; then
|
|
cp \
|
|
/VK-GL-CTS/external/openglcts/data/gl_cts/data/mustpass/gles/aosp_mustpass/main/*.txt \
|
|
mustpass/
|
|
cp \
|
|
/VK-GL-CTS/external/openglcts/data/gl_cts/data/mustpass/egl/aosp_mustpass/main/egl-main.txt \
|
|
mustpass/
|
|
cp \
|
|
/VK-GL-CTS/external/openglcts/data/gl_cts/data/mustpass/gles/khronos_mustpass/main/*-main.txt \
|
|
mustpass/
|
|
fi
|
|
|
|
# Compress the caselists, since Vulkan's in particular are gigantic; higher
|
|
# compression levels provide no real measurable benefit.
|
|
zstd -f -1 --rm mustpass/*.txt
|
|
fi
|
|
|
|
if [ "$DEQP_API" = tools ]; then
|
|
# Save *some* executor utils, but otherwise strip things down
|
|
# to reduct deqp build size:
|
|
mv executor/testlog-to-* .
|
|
rm -rf executor
|
|
fi
|
|
|
|
# Remove other mustpass files, since we saved off the ones we wanted to conventient locations above.
|
|
rm -rf assets/**/mustpass/
|
|
rm -rf external/**/mustpass/
|
|
rm -rf external/vulkancts/modules/vulkan/vk-main*
|
|
rm -rf external/vulkancts/modules/vulkan/vk-default
|
|
|
|
rm -rf external/openglcts/modules/cts-runner
|
|
rm -rf modules/internal
|
|
rm -rf execserver
|
|
rm -rf framework
|
|
find . -depth \( -iname '*cmake*' -o -name '*ninja*' -o -name '*.o' -o -name '*.a' \) -exec rm -rf {} \;
|
|
if [ "${DEQP_API}" = 'VK' ] || [ "${DEQP_API}" = 'VK-main' ]; then
|
|
${STRIP_CMD:-strip} external/vulkancts/modules/vulkan/deqp-vk
|
|
fi
|
|
if [ "${DEQP_API}" = 'GL' ] || [ "${DEQP_API}" = 'GLES' ]; then
|
|
${STRIP_CMD:-strip} external/openglcts/modules/glcts
|
|
fi
|
|
if [ "${DEQP_API}" = 'GLES' ]; then
|
|
${STRIP_CMD:-strip} modules/*/deqp-*
|
|
fi
|
|
du -sh ./*
|
|
popd
|
|
|
|
section_end deqp-$deqp_api
|