xref: /aosp_15_r20/external/crosvm/third_party/virglrenderer/ci/run_tests.sh (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1#!/bin/bash
2
3run_setup()
4{
5   set -x
6
7   use_meson=$1
8
9   if [ "x$2" = "xfuzzer" ]; then
10      use_clang_fuzzer=1
11   fi
12
13   if [ "x$2" = "xtrace_stderr" ]; then
14      use_trace_stderr=1
15   fi
16
17   if [ "x$2" = "xvenus" ]; then
18      use_venus=1
19   fi
20
21   # Let .gitlab-ci or local ci runner set
22   # desired thread count
23   NUM_THREADS=${NUM_THREADS:-$(expr $(expr $(nproc) / 8) + 1)}
24   export NUM_THREADS
25   echo "Using $NUM_THREADS threads"
26
27   export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/local/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
28
29   export CCACHE_BASEDIR="$(pwd)"
30   export CCACHE_DIR="$(pwd)/ccache"
31   export PATH="/usr/lib/ccache:$PATH"
32   mkdir -p $CCACHE_DIR
33   ccache -s
34
35   # To prevent hitting assertions such as the below:
36   # sb/sb_sched.cpp:1207:schedule_alu: Assertion '!"unscheduled pending instructions"' failed.
37   export R600_DEBUG=nosb
38
39   # If render node, like /dev/dri/renderD128, has not been set
40   # or exists use llvmpipe instead of HW GPU.
41   if [[ ! -c $RENDER_DEVICE ]]; then
42      export SOFTWARE_ONLY=1
43   fi
44
45   if [[ $LOCAL_MESA ]]; then
46      pushd $LOCAL_MESA
47      mkdir -p build  && \
48      meson build/ && \
49      meson configure build/ -Dprefix=/usr/local -Dplatforms=x11,wayland -Ddri-drivers= -Dgallium-drivers=swrast,virgl,radeonsi,iris -Dbuildtype=debugoptimized -Dllvm=true -Dglx=dri -Dgallium-vdpau=false -Dgallium-va=false -Dvulkan-drivers=[] -Dlibdir=lib && \
50      ninja -C build/ install -j $NUM_THREADS
51      if [ $? -ne 0 ]; then
52        meson setup --wipe build/
53        ninja -C build/ install -j $NUM_THREADS || exit 1
54      fi
55      popd
56   fi
57
58   rm -rf ./results/
59   mkdir -p ./results/
60
61   mkdir -p build
62   if [ "x$use_clang_fuzzer" = "x1" ]; then
63      export CC=clang
64      export FUZZER=-Dfuzzer=true
65   fi
66
67   if [ "x$use_trace_stderr" = "x1" ]; then
68       export TRACING=-Dtracing=stderr
69   fi
70
71   if [ "x$use_venus" = "x1" ]; then
72       export VENUS=-Dvenus-experimental=true
73   fi
74
75   pwd | grep virglrenderer >/dev/null || pushd /virglrenderer && pushd $(pwd)
76   meson build/ -Dprefix=/usr/local -Ddebug=true -Dtests=true --fatal-meson-warnings $FUZZER $TRACING $VENUS
77   ninja -C build -j$NUM_THREADS install
78   popd
79}
80
81run_make_check_meson()
82{
83   run_setup meson
84   (
85      mkdir -p ./results/make_check_meson
86      VRENDTEST_USE_EGL_SURFACELESS=1 ninja -Cbuild -j$NUM_THREADS test
87      RET=$?
88      cp ./build/meson-logs/testlog.txt ./results/make_check_meson/
89      return $RET
90   )
91}
92
93run_make_check_clang_fuzzer()
94{
95   run_setup meson fuzzer
96   (
97      mkdir -p ./results/make_check_clang_fuzzer
98      pushd ./build
99      VRENDTEST_USE_EGL_SURFACELESS=1 ninja -j$NUM_THREADS test
100      RET=$?
101      cp ./meson-logs/testlog.txt ../results/make_check_clang_fuzzer/
102      popd
103      return $RET
104   )
105}
106
107run_make_check_trace_stderr()
108{
109   run_setup meson trace_stderr
110   (
111      mkdir -p ./results/make_check_trace_stderr
112      pushd ./build
113      VRENDTEST_USE_EGL_SURFACELESS=1 ninja -j$NUM_THREADS test
114      RET=$?
115      cp ./meson-logs/testlog.txt ../results/make_check_trace_stderr/
116      popd
117      return $RET
118   )
119}
120
121run_make_check_venus()
122{
123   run_setup meson venus
124   (
125      mkdir -p ./results/make_check_venus
126      VRENDTEST_USE_EGL_SURFACELESS=1 ninja -Cbuild -j$NUM_THREADS test
127      RET=$?
128      cp ./build/meson-logs/testlog.txt ./results/make_check_venus/
129      return $RET
130   )
131}
132
133run_deqp()
134{
135   local retval=0
136   run_setup meson
137   OGL_BACKEND="$1"
138   SUITE="$2"
139
140   if [ "$SUITE" = "gl" ]; then
141      TEST_SUITE="--gl30 --gl31 --gl32"
142   fi
143
144   if [ "$SUITE" = "gles" ]; then
145      TEST_SUITE="--gles2 --gles3 --gles31"
146   fi
147
148   if [ "$SUITE" = "gles2" ]; then
149      TEST_SUITE="--gles2"
150   fi
151
152   if [ "$SUITE" = "gles3" ]; then
153      TEST_SUITE="--gles3"
154   fi
155
156   if [ "$SUITE" = "gles31" ]; then
157      TEST_SUITE="--gles31"
158   fi
159
160   BACKENDS=""
161   if [[ -z "$HARDWARE_ONLY" ]]; then
162      BACKENDS="${BACKENDS} --backend vtest-llvmpipe"
163   fi
164
165   if [[ -z "$SOFTWARE_ONLY" ]]; then
166      BACKENDS="${BACKENDS} --backend vtest-gpu"
167   fi
168
169   pwd | grep virglrenderer >/dev/null || pushd /virglrenderer/ci && pushd ci
170   ./run_test_suite.sh --deqp ${TEST_SUITE} \
171      --host-${OGL_BACKEND} \
172      ${BACKENDS}
173   retval=$?
174   popd
175
176   return $retval
177}
178
179run_piglit()
180{
181   local retval=0
182   run_setup meson
183
184   OGL_BACKEND="$1"
185
186   BACKENDS=""
187   if [[ -z "$HARDWARE_ONLY" ]]; then
188      BACKENDS="${BACKENDS} --backend vtest-llvmpipe"
189   fi
190
191   if [[ -z "$SOFTWARE_ONLY" ]]; then
192      BACKENDS="${BACKENDS} --backend vtest-gpu"
193   fi
194
195   pwd | grep virglrenderer >/dev/null || pushd /virglrenderer/ci && pushd ci
196   ./run_test_suite.sh --piglit --gles2 --gles3 \
197      --host-${OGL_BACKEND} \
198      ${BACKENDS}
199   retval=$?
200   popd
201
202   return $retval
203}
204
205parse_input()
206{
207   RET=0
208   while  [ -n "$1" ]; do
209      echo ""
210
211      case $1 in
212         --make-check-meson)
213         run_make_check_meson
214         ;;
215
216         --make-check-clang-fuzzer)
217         run_make_check_clang_fuzzer
218         ;;
219
220         --make-check-trace-stderr)
221         run_make_check_trace_stderr
222         ;;
223
224         --make-check-venus)
225         run_make_check_venus
226         ;;
227
228         --deqp-gl-gl-tests)
229         run_deqp gl gl
230         ;;
231
232         --deqp-gl-gles-tests)
233         run_deqp gl gles
234         ;;
235
236         --deqp-gl-gles2-tests)
237         run_deqp gl gles2
238         ;;
239
240         --deqp-gl-gles3-tests)
241         run_deqp gl gles3
242         ;;
243
244         --deqp-gl-gles31-tests)
245         run_deqp gl gles31
246         ;;
247
248         --deqp-gles-gl-tests)
249         run_deqp gles gl
250         ;;
251
252         --deqp-gles-gles-tests)
253         run_deqp gles gles
254         ;;
255
256         --deqp-gles-gles2-tests)
257         run_deqp gles gles2
258         ;;
259
260         --deqp-gles-gles3-tests)
261         run_deqp gles gles3
262         ;;
263
264         --deqp-gles-gles31-tests)
265         run_deqp gles gles31
266         ;;
267
268         --piglit-gl)
269         run_piglit gl
270         ;;
271
272         --piglit-gles)
273         run_piglit gles
274         ;;
275
276         *)
277         echo "Unknown test option $1"
278         exit 1
279      esac
280
281      if [ $? -ne 0 ]; then
282         RET=1
283      fi
284
285      shift
286   done
287
288   exit $RET
289}
290
291parse_input $@
292