~mmach/netext73/mesa-haswell

« back to all changes in this revision

Viewing changes to .gitlab-ci/piglit/run.sh

  • Committer: mmach
  • Date: 2022-09-22 19:56:13 UTC
  • Revision ID: netbit73@gmail.com-20220922195613-wtik9mmy20tmor0i
2022-09-22 21:17:09

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/bin/sh
2
 
 
3
 
set -ex
4
 
 
5
 
INSTALL=$(realpath -s "$PWD"/install)
6
 
MINIO_ARGS="--credentials=/tmp/.minio_credentials"
7
 
 
8
 
RESULTS=$(realpath -s "$PWD"/results)
9
 
mkdir -p "$RESULTS"
10
 
 
11
 
# Set up the driver environment.
12
 
# Modifiying here directly LD_LIBRARY_PATH may cause problems when
13
 
# using a command wrapper. Hence, we will just set it when running the
14
 
# command.
15
 
export __LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$INSTALL/lib/"
16
 
 
17
 
# Sanity check to ensure that our environment is sufficient to make our tests
18
 
# run against the Mesa built by CI, rather than any installed distro version.
19
 
MESA_VERSION=$(head -1 "$INSTALL/VERSION" | sed 's/\./\\./g')
20
 
 
21
 
print_red() {
22
 
    RED='\033[0;31m'
23
 
    NC='\033[0m' # No Color
24
 
    printf "${RED}"
25
 
    "$@"
26
 
    printf "${NC}"
27
 
}
28
 
 
29
 
# wrapper to supress +x to avoid spamming the log
30
 
quiet() {
31
 
    set +x
32
 
    "$@"
33
 
    set -x
34
 
}
35
 
 
36
 
if [ "$VK_DRIVER" ]; then
37
 
 
38
 
    ### VULKAN ###
39
 
 
40
 
    # Set the Vulkan driver to use.
41
 
    export VK_ICD_FILENAMES="$INSTALL/share/vulkan/icd.d/${VK_DRIVER}_icd.x86_64.json"
42
 
 
43
 
    if [ "x$PIGLIT_PROFILES" = "xreplay" ]; then
44
 
        # Set environment for Wine.
45
 
        export WINEDEBUG="-all"
46
 
        export WINEPREFIX="/dxvk-wine64"
47
 
        export WINEESYNC=1
48
 
 
49
 
        # Set environment for DXVK.
50
 
        export DXVK_LOG_LEVEL="none"
51
 
        export DXVK_STATE_CACHE=0
52
 
 
53
 
        # Set environment for gfxreconstruct executables.
54
 
        export PATH="/gfxreconstruct/build/bin:$PATH"
55
 
    fi
56
 
 
57
 
    SANITY_MESA_VERSION_CMD="vulkaninfo"
58
 
 
59
 
    HANG_DETECTION_CMD="/parallel-deqp-runner/build/bin/hang-detection"
60
 
 
61
 
 
62
 
    # Set up the Window System Interface (WSI)
63
 
 
64
 
    if [ ${TEST_START_XORG:-0} -eq 1 ]; then
65
 
        "$INSTALL"/common/start-x.sh "$INSTALL"
66
 
        export DISPLAY=:0
67
 
    else
68
 
        # Run vulkan against the host's running X server (xvfb doesn't
69
 
        # have DRI3 support).
70
 
        # Set the DISPLAY env variable in each gitlab-runner's
71
 
        # configuration file:
72
 
        # https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-section
73
 
        quiet printf "%s%s\n" "Running against the hosts' X server. " \
74
 
              "DISPLAY is \"$DISPLAY\"."
75
 
    fi
76
 
else
77
 
 
78
 
    ### GL/ES ###
79
 
 
80
 
    if [ "x$PIGLIT_PROFILES" = "xreplay" ]; then
81
 
        # Set environment for apitrace executable.
82
 
        export PATH="/apitrace/build:$PATH"
83
 
 
84
 
        # Our rootfs may not have "less", which apitrace uses during
85
 
        # apitrace dump
86
 
        export PAGER=cat
87
 
    fi
88
 
 
89
 
    SANITY_MESA_VERSION_CMD="wflinfo"
90
 
 
91
 
    HANG_DETECTION_CMD=""
92
 
 
93
 
 
94
 
    # Set up the platform windowing system.
95
 
 
96
 
    if [ "x$EGL_PLATFORM" = "xsurfaceless" ]; then
97
 
 
98
 
        # Use the surfaceless EGL platform.
99
 
        export DISPLAY=
100
 
        export WAFFLE_PLATFORM="surfaceless_egl"
101
 
 
102
 
        SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform surfaceless_egl --api gles2"
103
 
 
104
 
        if [ "x$GALLIUM_DRIVER" = "xvirpipe" ]; then
105
 
            # piglit is to use virpipe, and virgl_test_server llvmpipe
106
 
            export GALLIUM_DRIVER="$GALLIUM_DRIVER"
107
 
 
108
 
            LD_LIBRARY_PATH="$__LD_LIBRARY_PATH" \
109
 
            GALLIUM_DRIVER=llvmpipe \
110
 
            GALLIVM_PERF="nopt" \
111
 
            VTEST_USE_EGL_SURFACELESS=1 \
112
 
            VTEST_USE_GLES=1 \
113
 
            virgl_test_server >"$RESULTS"/vtest-log.txt 2>&1 &
114
 
 
115
 
            sleep 1
116
 
        fi
117
 
    elif [ "x$PIGLIT_PLATFORM" = "xgbm" ]; then
118
 
        SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform gbm --api gl"
119
 
    elif [ "x$PIGLIT_PLATFORM" = "xmixed_glx_egl" ]; then
120
 
        # It is assumed that you have already brought up your X server before
121
 
        # calling this script.
122
 
        SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform glx --api gl"
123
 
    else
124
 
        SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform glx --api gl --profile core"
125
 
        RUN_CMD_WRAPPER="xvfb-run --server-args=\"-noreset\" sh -c"
126
 
    fi
127
 
fi
128
 
 
129
 
if [ "$ZINK_USE_LAVAPIPE" ]; then
130
 
    export VK_ICD_FILENAMES="$INSTALL/share/vulkan/icd.d/lvp_icd.x86_64.json"
131
 
fi
132
 
 
133
 
# If the job is parallel at the  gitlab job level, will take the corresponding
134
 
# fraction of the caselist.
135
 
if [ -n "$CI_NODE_INDEX" ]; then
136
 
 
137
 
    if [ "$PIGLIT_PROFILES" != "${PIGLIT_PROFILES% *}" ]; then
138
 
        FAILURE_MESSAGE=$(printf "%s" "Can't parallelize piglit with multiple profiles")
139
 
        quiet print_red printf "%s\n" "$FAILURE_MESSAGE"
140
 
        exit 1
141
 
    fi
142
 
 
143
 
    USE_CASELIST=1
144
 
fi
145
 
 
146
 
replay_minio_upload_images() {
147
 
    find "$RESULTS/$__PREFIX" -type f -name "*.png" -printf "%P\n" \
148
 
        | while read -r line; do
149
 
 
150
 
        __TRACE="${line%-*-*}"
151
 
        if grep -q "^$__PREFIX/$__TRACE: pass$" ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.orig"; then
152
 
            if [ "x$CI_PROJECT_PATH" != "x$FDO_UPSTREAM_REPO" ]; then
153
 
                continue
154
 
            fi
155
 
            __MINIO_PATH="$PIGLIT_REPLAY_REFERENCE_IMAGES_BASE"
156
 
            __DESTINATION_FILE_PATH="${line##*-}"
157
 
            if wget -q --method=HEAD "https://${__MINIO_PATH}/${__DESTINATION_FILE_PATH}" 2>/dev/null; then
158
 
                continue
159
 
            fi
160
 
        else
161
 
            __MINIO_PATH="$JOB_ARTIFACTS_BASE"
162
 
            __DESTINATION_FILE_PATH="$__MINIO_TRACES_PREFIX/${line##*-}"
163
 
        fi
164
 
 
165
 
        ci-fairy minio cp $MINIO_ARGS "$RESULTS/$__PREFIX/$line" \
166
 
            "minio://${__MINIO_PATH}/${__DESTINATION_FILE_PATH}"
167
 
    done
168
 
}
169
 
 
170
 
SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD | tee /tmp/version.txt | grep \"Mesa $MESA_VERSION\(\s\|$\)\""
171
 
 
172
 
if [ -d results ]; then
173
 
    cd results && rm -rf ..?* .[!.]* *
174
 
fi
175
 
cd /piglit
176
 
 
177
 
if [ -n "$USE_CASELIST" ]; then
178
 
    PIGLIT_TESTS=$(printf "%s" "$PIGLIT_TESTS")
179
 
    PIGLIT_GENTESTS="./piglit print-cmd $PIGLIT_TESTS $PIGLIT_PROFILES --format \"{name}\" > /tmp/case-list.txt"
180
 
    RUN_GENTESTS="export LD_LIBRARY_PATH=$__LD_LIBRARY_PATH; $PIGLIT_GENTESTS"
181
 
 
182
 
    eval $RUN_GENTESTS
183
 
 
184
 
    sed -ni $CI_NODE_INDEX~$CI_NODE_TOTAL"p" /tmp/case-list.txt
185
 
 
186
 
    PIGLIT_TESTS="--test-list /tmp/case-list.txt"
187
 
fi
188
 
 
189
 
PIGLIT_OPTIONS=$(printf "%s" "$PIGLIT_OPTIONS")
190
 
 
191
 
PIGLIT_TESTS=$(printf "%s" "$PIGLIT_TESTS")
192
 
 
193
 
PIGLIT_CMD="./piglit run --timeout 300 -j${FDO_CI_CONCURRENT:-4} $PIGLIT_OPTIONS $PIGLIT_TESTS $PIGLIT_PROFILES "$(/usr/bin/printf "%q" "$RESULTS")
194
 
 
195
 
RUN_CMD="export LD_LIBRARY_PATH=$__LD_LIBRARY_PATH; $SANITY_MESA_VERSION_CMD && $HANG_DETECTION_CMD $PIGLIT_CMD"
196
 
 
197
 
if [ "$RUN_CMD_WRAPPER" ]; then
198
 
    RUN_CMD="set +e; $RUN_CMD_WRAPPER "$(/usr/bin/printf "%q" "$RUN_CMD")"; set -e"
199
 
fi
200
 
 
201
 
FAILURE_MESSAGE=$(printf "%s" "Unexpected change in results:")
202
 
 
203
 
if [ "x$PIGLIT_PROFILES" = "xreplay" ] \
204
 
       && [ ${PIGLIT_REPLAY_UPLOAD_TO_MINIO:-0} -eq 1 ]; then
205
 
    ci-fairy minio login $MINIO_ARGS $CI_JOB_JWT
206
 
fi
207
 
 
208
 
eval $RUN_CMD
209
 
 
210
 
if [ $? -ne 0 ]; then
211
 
    printf "%s\n" "Found $(cat /tmp/version.txt), expected $MESA_VERSION"
212
 
fi
213
 
 
214
 
ARTIFACTS_BASE_URL="https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-/${CI_PROJECT_NAME}/-/jobs/${CI_JOB_ID}/artifacts"
215
 
 
216
 
if [ ${PIGLIT_JUNIT_RESULTS:-0} -eq 1 ]; then
217
 
    ./piglit summary aggregate "$RESULTS" -o junit.xml
218
 
    FAILURE_MESSAGE=$(printf "${FAILURE_MESSAGE}\n%s" "Check the JUnit report for failures at: ${ARTIFACTS_BASE_URL}/results/junit.xml")
219
 
fi
220
 
 
221
 
PIGLIT_RESULTS="${PIGLIT_RESULTS:-$PIGLIT_PROFILES}"
222
 
RESULTSFILE="$RESULTS/$PIGLIT_RESULTS.txt"
223
 
mkdir -p .gitlab-ci/piglit
224
 
./piglit summary console "$RESULTS"/results.json.bz2 \
225
 
    | tee ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.orig" \
226
 
    | head -n -1 | grep -v ": pass" \
227
 
    | sed '/^summary:/Q' \
228
 
    > $RESULTSFILE
229
 
 
230
 
if [ "x$PIGLIT_PROFILES" = "xreplay" ] \
231
 
       && [ ${PIGLIT_REPLAY_UPLOAD_TO_MINIO:-0} -eq 1 ]; then
232
 
 
233
 
    __PREFIX="trace/$PIGLIT_REPLAY_DEVICE_NAME"
234
 
    __MINIO_PATH="$PIGLIT_REPLAY_ARTIFACTS_BASE_URL"
235
 
    __MINIO_TRACES_PREFIX="traces"
236
 
 
237
 
    if [ "x$PIGLIT_REPLAY_SUBCOMMAND" != "xprofile" ]; then
238
 
        quiet replay_minio_upload_images
239
 
    fi
240
 
fi
241
 
 
242
 
if [ -n "$USE_CASELIST" ]; then
243
 
    # Just filter the expected results based on the tests that were actually
244
 
    # executed, and switch to the version with no summary
245
 
    cat ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.orig" | sed '/^summary:/Q' | rev \
246
 
        | cut -f2- -d: | rev | sed "s/$/:/g" > /tmp/executed.txt
247
 
 
248
 
    grep -F -f /tmp/executed.txt "$INSTALL/$PIGLIT_RESULTS.txt" \
249
 
       > ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline" || true
250
 
elif [ -f "$INSTALL/$PIGLIT_RESULTS.txt" ]; then
251
 
    cp "$INSTALL/$PIGLIT_RESULTS.txt" \
252
 
       ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline"
253
 
else
254
 
    touch ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline"
255
 
fi
256
 
 
257
 
if diff -q ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline" $RESULTSFILE; then
258
 
    exit 0
259
 
fi
260
 
 
261
 
./piglit summary html --exclude-details=pass \
262
 
"$RESULTS"/summary "$RESULTS"/results.json.bz2
263
 
 
264
 
if [ "x$PIGLIT_PROFILES" = "xreplay" ]; then
265
 
find "$RESULTS"/summary -type f -name "*.html" -print0 \
266
 
        | xargs -0 sed -i 's%<img src="file://'"${RESULTS}"'.*-\([0-9a-f]*\)\.png%<img src="https://'"${JOB_ARTIFACTS_BASE}"'/traces/\1.png%g'
267
 
find "$RESULTS"/summary -type f -name "*.html" -print0 \
268
 
        | xargs -0 sed -i 's%<img src="file://%<img src="https://'"${PIGLIT_REPLAY_REFERENCE_IMAGES_BASE}"'/%g'
269
 
fi
270
 
 
271
 
FAILURE_MESSAGE=$(printf "${FAILURE_MESSAGE}\n%s" "Check the HTML summary for problems at: ${ARTIFACTS_BASE_URL}/results/summary/problems.html")
272
 
 
273
 
quiet print_red printf "%s\n" "$FAILURE_MESSAGE"
274
 
quiet diff --color=always -u ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline" $RESULTSFILE
275
 
exit 1