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