mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-12-11 11:15:11 +08:00
d1c6185b5a
This commit adds support for Vulkan backend on a630_skqp job. = Needed changes - Needed to install libvulkan-dev package on system - Refactored the way the available skqp reports are printed tested in development builds with skia tools Piglit expectations had to be updated in various drivers due to !14750 not having bumped the tags when it tried to uprev. Signed-off-by: Guilherme Gallo <guilherme.gallo@collabora.com> Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14686>
154 lines
5.3 KiB
Bash
Executable File
154 lines
5.3 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (C) 2022 Collabora Limited
|
|
# Author: Guilherme Gallo <guilherme.gallo@collabora.com>
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
|
# copy of this software and associated documentation files (the "Software"),
|
|
# to deal in the Software without restriction, including without limitation
|
|
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
# and/or sell copies of the Software, and to permit persons to whom the
|
|
# Software is furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice (including the next
|
|
# paragraph) shall be included in all copies or substantial portions of the
|
|
# Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
# SOFTWARE.
|
|
|
|
|
|
copy_tests_files() (
|
|
# Copy either unit test or render test files from a specific driver given by
|
|
# GPU VERSION variable.
|
|
# If there is no test file at the expected location, this function will
|
|
# return error_code 1
|
|
SKQP_BACKEND="${1}"
|
|
SKQP_FILE_PREFIX="${INSTALL}/${GPU_VERSION}-skqp"
|
|
|
|
if echo "${SKQP_BACKEND}" | grep -qE 'vk|gl(es)?'
|
|
then
|
|
SKQP_RENDER_TESTS_FILE="${SKQP_FILE_PREFIX}-${SKQP_BACKEND}_rendertests.txt"
|
|
[ -f "${SKQP_RENDER_TESTS_FILE}" ] || return 1
|
|
cp "${SKQP_RENDER_TESTS_FILE}" "${SKQP_ASSETS_DIR}"/skqp/rendertests.txt
|
|
return 0
|
|
fi
|
|
|
|
# The unittests.txt path is hardcoded inside assets directory,
|
|
# that is why it needs to be a special case.
|
|
if echo "${SKQP_BACKEND}" | grep -qE "unitTest"
|
|
then
|
|
SKQP_UNIT_TESTS_FILE="${SKQP_FILE_PREFIX}_unittests.txt"
|
|
[ -f "${SKQP_UNIT_TESTS_FILE}" ] || return 1
|
|
cp "${SKQP_UNIT_TESTS_FILE}" "${SKQP_ASSETS_DIR}"/skqp/unittests.txt
|
|
fi
|
|
)
|
|
|
|
test_vk_backend() {
|
|
if echo "${SKQP_BACKENDS}" | grep -qE 'vk'
|
|
then
|
|
if [ -n "$VK_DRIVER" ]; then
|
|
return 0
|
|
fi
|
|
|
|
echo "VK_DRIVER environment variable is missing."
|
|
VK_DRIVERS=$(ls "$INSTALL"/share/vulkan/icd.d/ | cut -f 1 -d '_')
|
|
if [ -n "${VK_DRIVERS}" ]
|
|
then
|
|
echo "Please set VK_DRIVER to the correct driver from the list:"
|
|
echo "${VK_DRIVERS}"
|
|
fi
|
|
echo "No Vulkan tests will be executed, but it was requested in SKQP_BACKENDS variable. Exiting."
|
|
exit 2
|
|
fi
|
|
|
|
# Vulkan environment is not configured, but it was not requested by the job
|
|
return 1
|
|
}
|
|
|
|
setup_backends() {
|
|
if test_vk_backend
|
|
then
|
|
export VK_ICD_FILENAMES="$INSTALL"/share/vulkan/icd.d/"$VK_DRIVER"_icd."${VK_CPU:-$(uname -m)}".json
|
|
fi
|
|
}
|
|
|
|
set -ex
|
|
|
|
# Needed so configuration files can contain paths to files in /install
|
|
ln -sf "$CI_PROJECT_DIR"/install /install
|
|
INSTALL=${PWD}/install
|
|
|
|
if [ -z "$GPU_VERSION" ]; then
|
|
echo 'GPU_VERSION must be set to something like "llvmpipe" or
|
|
"freedreno-a630" (it will serve as a component to find the path for files
|
|
residing in src/**/ci/*.txt)'
|
|
exit 1
|
|
fi
|
|
|
|
LD_LIBRARY_PATH=$INSTALL:$LD_LIBRARY_PATH
|
|
setup_backends
|
|
|
|
SKQP_ASSETS_DIR=/skqp/assets
|
|
SKQP_RESULTS_DIR="${SKQP_RESULTS_DIR:-$PWD/results}"
|
|
|
|
mkdir -p "${SKQP_ASSETS_DIR}"/skqp
|
|
|
|
SKQP_EXITCODE=0
|
|
for SKQP_BACKEND in ${SKQP_BACKENDS}
|
|
do
|
|
set -e
|
|
if ! copy_tests_files "${SKQP_BACKEND}"
|
|
then
|
|
echo "No override test file found for ${SKQP_BACKEND}. Using the default one."
|
|
fi
|
|
|
|
set +e
|
|
SKQP_BACKEND_RESULTS_DIR="${SKQP_RESULTS_DIR}"/"${SKQP_BACKEND}"
|
|
mkdir -p "${SKQP_BACKEND_RESULTS_DIR}"
|
|
/skqp/skqp "${SKQP_ASSETS_DIR}" "${SKQP_BACKEND_RESULTS_DIR}" "${SKQP_BACKEND}_"
|
|
BACKEND_EXITCODE=$?
|
|
|
|
if [ ! $BACKEND_EXITCODE -eq 0 ]
|
|
then
|
|
echo "skqp failed on ${SKQP_BACKEND} tests with ${BACKEND_EXITCODE} exit code."
|
|
fi
|
|
|
|
# Propagate error codes to leverage the final job result
|
|
SKQP_EXITCODE=$(( SKQP_EXITCODE | BACKEND_EXITCODE ))
|
|
done
|
|
|
|
set +x
|
|
|
|
# Unit tests produce empty HTML reports, guide the user to check the TXT file.
|
|
if echo "${SKQP_BACKENDS}" | grep -qE "unitTest"
|
|
then
|
|
# Remove the empty HTML report to avoid confusion
|
|
rm -f "${SKQP_RESULTS_DIR}"/unitTest/report.html
|
|
|
|
echo "See skqp unit test results at:"
|
|
echo "https://$CI_PROJECT_ROOT_NAMESPACE.pages.freedesktop.org/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/${SKQP_RESULTS_DIR}/unitTest/unit_tests.txt"
|
|
fi
|
|
|
|
REPORT_FILES=$(mktemp)
|
|
find "${SKQP_RESULTS_DIR}"/**/report.html -type f > "${REPORT_FILES}"
|
|
while read -r REPORT
|
|
do
|
|
BACKEND_NAME=$(echo "${REPORT}" | sed 's@.*/\([^/]*\)/report.html@\1@')
|
|
echo "See skqp ${BACKEND_NAME} render tests report at:"
|
|
echo "https://$CI_PROJECT_ROOT_NAMESPACE.pages.freedesktop.org/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/${REPORT}"
|
|
done < "${REPORT_FILES}"
|
|
|
|
# If there is no report available, tell the user that something is wrong.
|
|
if [ ! -s "${REPORT_FILES}" ]
|
|
then
|
|
echo "No skqp report available. Probably some fatal error has occured during the skqp execution."
|
|
fi
|
|
|
|
exit $SKQP_EXITCODE
|