xref: /aosp_15_r20/external/virglrenderer/ci/run_test_suite.sh (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1*bbecb9d1SAndroid Build Coastguard Worker#!/bin/bash
2*bbecb9d1SAndroid Build Coastguard Worker
3*bbecb9d1SAndroid Build Coastguard Workerset -x
4*bbecb9d1SAndroid Build Coastguard Worker
5*bbecb9d1SAndroid Build Coastguard Worker# Setup paths and import util functions
6*bbecb9d1SAndroid Build Coastguard Worker. $(dirname $(readlink -f "$0"))/util.sh
7*bbecb9d1SAndroid Build Coastguard Worker
8*bbecb9d1SAndroid Build Coastguard WorkerTESTS=""
9*bbecb9d1SAndroid Build Coastguard WorkerBACKENDS=""
10*bbecb9d1SAndroid Build Coastguard WorkerNUM_THREADS=${NUM_THREADS:-$(expr $(expr $(nproc) / 8) + 1)}
11*bbecb9d1SAndroid Build Coastguard Worker
12*bbecb9d1SAndroid Build Coastguard WorkerUSE_HOST_GLES=0
13*bbecb9d1SAndroid Build Coastguard WorkerTEST_APP="deqp"
14*bbecb9d1SAndroid Build Coastguard Worker
15*bbecb9d1SAndroid Build Coastguard Workerparse_input()
16*bbecb9d1SAndroid Build Coastguard Worker{
17*bbecb9d1SAndroid Build Coastguard Worker   while  [ -n "$1" ]; do
18*bbecb9d1SAndroid Build Coastguard Worker      case $1 in
19*bbecb9d1SAndroid Build Coastguard Worker
20*bbecb9d1SAndroid Build Coastguard Worker      -a|--all-backends)
21*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS=""
22*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS="$BACKENDS vtest-softpipe"
23*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS="$BACKENDS vtest-llvmpipe"
24*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS="$BACKENDS vtest-gpu"
25*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS="$BACKENDS softpipe"
26*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS="$BACKENDS llvmpipe"
27*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS="$BACKENDS gpu"
28*bbecb9d1SAndroid Build Coastguard Worker         ;;
29*bbecb9d1SAndroid Build Coastguard Worker
30*bbecb9d1SAndroid Build Coastguard Worker   	-v|--vtest)
31*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS=""
32*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS="$BACKENDS vtest-softpipe"
33*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS="$BACKENDS vtest-llvmpipe"
34*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS="$BACKENDS vtest-gpu"
35*bbecb9d1SAndroid Build Coastguard Worker         ;;
36*bbecb9d1SAndroid Build Coastguard Worker
37*bbecb9d1SAndroid Build Coastguard Worker      --host-gles)
38*bbecb9d1SAndroid Build Coastguard Worker         USE_HOST_GLES=1
39*bbecb9d1SAndroid Build Coastguard Worker         ;;
40*bbecb9d1SAndroid Build Coastguard Worker
41*bbecb9d1SAndroid Build Coastguard Worker      --host-gl)
42*bbecb9d1SAndroid Build Coastguard Worker         USE_HOST_GLES=0
43*bbecb9d1SAndroid Build Coastguard Worker         ;;
44*bbecb9d1SAndroid Build Coastguard Worker
45*bbecb9d1SAndroid Build Coastguard Worker      -b|--backend)
46*bbecb9d1SAndroid Build Coastguard Worker         NEW_BACKEND="$2"
47*bbecb9d1SAndroid Build Coastguard Worker         shift
48*bbecb9d1SAndroid Build Coastguard Worker         BACKENDS="$BACKENDS $NEW_BACKEND"
49*bbecb9d1SAndroid Build Coastguard Worker         ;;
50*bbecb9d1SAndroid Build Coastguard Worker
51*bbecb9d1SAndroid Build Coastguard Worker      -j|--threads)
52*bbecb9d1SAndroid Build Coastguard Worker         NUM_THREADS=$2
53*bbecb9d1SAndroid Build Coastguard Worker         shift
54*bbecb9d1SAndroid Build Coastguard Worker         ;;
55*bbecb9d1SAndroid Build Coastguard Worker
56*bbecb9d1SAndroid Build Coastguard Worker   	--gles2)
57*bbecb9d1SAndroid Build Coastguard Worker         TESTS="$TESTS gles2"
58*bbecb9d1SAndroid Build Coastguard Worker   	   ;;
59*bbecb9d1SAndroid Build Coastguard Worker
60*bbecb9d1SAndroid Build Coastguard Worker   	--gles3)
61*bbecb9d1SAndroid Build Coastguard Worker         TESTS="$TESTS gles3"
62*bbecb9d1SAndroid Build Coastguard Worker   	   ;;
63*bbecb9d1SAndroid Build Coastguard Worker
64*bbecb9d1SAndroid Build Coastguard Worker   	--gles31)
65*bbecb9d1SAndroid Build Coastguard Worker         TESTS="$TESTS gles31"
66*bbecb9d1SAndroid Build Coastguard Worker   	   ;;
67*bbecb9d1SAndroid Build Coastguard Worker
68*bbecb9d1SAndroid Build Coastguard Worker      --gl30)
69*bbecb9d1SAndroid Build Coastguard Worker         TESTS="$TESTS gl30"
70*bbecb9d1SAndroid Build Coastguard Worker         ;;
71*bbecb9d1SAndroid Build Coastguard Worker
72*bbecb9d1SAndroid Build Coastguard Worker      --gl31)
73*bbecb9d1SAndroid Build Coastguard Worker         TESTS="$TESTS gl31"
74*bbecb9d1SAndroid Build Coastguard Worker         ;;
75*bbecb9d1SAndroid Build Coastguard Worker
76*bbecb9d1SAndroid Build Coastguard Worker      --gl32)
77*bbecb9d1SAndroid Build Coastguard Worker         TESTS="$TESTS gl32"
78*bbecb9d1SAndroid Build Coastguard Worker         ;;
79*bbecb9d1SAndroid Build Coastguard Worker
80*bbecb9d1SAndroid Build Coastguard Worker      -d|--deqp)
81*bbecb9d1SAndroid Build Coastguard Worker         TEST_APP="deqp"
82*bbecb9d1SAndroid Build Coastguard Worker         ;;
83*bbecb9d1SAndroid Build Coastguard Worker
84*bbecb9d1SAndroid Build Coastguard Worker      -p|--piglit)
85*bbecb9d1SAndroid Build Coastguard Worker         TEST_APP="piglit"
86*bbecb9d1SAndroid Build Coastguard Worker         ;;
87*bbecb9d1SAndroid Build Coastguard Worker
88*bbecb9d1SAndroid Build Coastguard Worker   	*)
89*bbecb9d1SAndroid Build Coastguard Worker   	   echo "Unknown flag $1"
90*bbecb9d1SAndroid Build Coastguard Worker   	   exit 1
91*bbecb9d1SAndroid Build Coastguard Worker      esac
92*bbecb9d1SAndroid Build Coastguard Worker      shift
93*bbecb9d1SAndroid Build Coastguard Worker   done
94*bbecb9d1SAndroid Build Coastguard Worker
95*bbecb9d1SAndroid Build Coastguard Worker   if [[ -z $BACKENDS ]]; then
96*bbecb9d1SAndroid Build Coastguard Worker      BACKENDS="gpu"
97*bbecb9d1SAndroid Build Coastguard Worker   fi
98*bbecb9d1SAndroid Build Coastguard Worker}
99*bbecb9d1SAndroid Build Coastguard Worker
100*bbecb9d1SAndroid Build Coastguard Workercompare_previous()
101*bbecb9d1SAndroid Build Coastguard Worker{
102*bbecb9d1SAndroid Build Coastguard Worker   if [ ! -f $PREVIOUS_RESULTS_DIR/results.txt ]; then
103*bbecb9d1SAndroid Build Coastguard Worker      return 2
104*bbecb9d1SAndroid Build Coastguard Worker   fi
105*bbecb9d1SAndroid Build Coastguard Worker
106*bbecb9d1SAndroid Build Coastguard Worker   # Piglit tests use @ as separator for path/to/test
107*bbecb9d1SAndroid Build Coastguard Worker   IGNORE_TESTS=$(sed "s/\@/\//g" $IGNORE_TESTS_FILE 2>/dev/null)
108*bbecb9d1SAndroid Build Coastguard Worker
109*bbecb9d1SAndroid Build Coastguard Worker   # Avoid introducing changes while doing this comparison
110*bbecb9d1SAndroid Build Coastguard Worker   TMP_RESULTS=$(mktemp /tmp/virgl_ci_results.XXXXXX)
111*bbecb9d1SAndroid Build Coastguard Worker   TMP_PREV_RESULTS=$(mktemp /tmp/virgl_ci_previous_results.XXXXXX)
112*bbecb9d1SAndroid Build Coastguard Worker   cp $RESULTS_DIR/results.txt $TMP_RESULTS
113*bbecb9d1SAndroid Build Coastguard Worker   cp $PREVIOUS_RESULTS_DIR/results.txt $TMP_PREV_RESULTS
114*bbecb9d1SAndroid Build Coastguard Worker
115*bbecb9d1SAndroid Build Coastguard Worker   for TEST in $IGNORE_TESTS; do
116*bbecb9d1SAndroid Build Coastguard Worker      sed -i "\:$TEST:d" $TMP_RESULTS $TMP_PREV_RESULTS
117*bbecb9d1SAndroid Build Coastguard Worker   done
118*bbecb9d1SAndroid Build Coastguard Worker
119*bbecb9d1SAndroid Build Coastguard Worker   if [ "$TEST_APP" = "piglit" ]; then
120*bbecb9d1SAndroid Build Coastguard Worker      # This distinction adds too much variability
121*bbecb9d1SAndroid Build Coastguard Worker      sed -i "s/crash/fail/g" $TMP_RESULTS $TMP_PREV_RESULTS
122*bbecb9d1SAndroid Build Coastguard Worker   elif [ "$TEST_APP" = "deqp" ]; then
123*bbecb9d1SAndroid Build Coastguard Worker      # This distinction adds too much variability
124*bbecb9d1SAndroid Build Coastguard Worker      sed -i "s/QualityWarning/Pass/g" $TMP_RESULTS $TMP_PREV_RESULTS
125*bbecb9d1SAndroid Build Coastguard Worker      sed -i "s/CompatibilityWarning/Pass/g" $TMP_RESULTS $TMP_PREV_RESULTS
126*bbecb9d1SAndroid Build Coastguard Worker   fi
127*bbecb9d1SAndroid Build Coastguard Worker
128*bbecb9d1SAndroid Build Coastguard Worker   # Sort results files
129*bbecb9d1SAndroid Build Coastguard Worker   sort -V $TMP_RESULTS -o $TMP_RESULTS
130*bbecb9d1SAndroid Build Coastguard Worker   sort -V $TMP_PREV_RESULTS -o $TMP_PREV_RESULTS
131*bbecb9d1SAndroid Build Coastguard Worker
132*bbecb9d1SAndroid Build Coastguard Worker   diff -u $TMP_PREV_RESULTS $TMP_RESULTS 2>&1 > $RESULTS_DIR/regression_diff.txt
133*bbecb9d1SAndroid Build Coastguard Worker   if [ $? -ne 0 ]; then
134*bbecb9d1SAndroid Build Coastguard Worker      touch $VIRGL_PATH/results/regressions_detected
135*bbecb9d1SAndroid Build Coastguard Worker      return 1
136*bbecb9d1SAndroid Build Coastguard Worker   else
137*bbecb9d1SAndroid Build Coastguard Worker      rm -rf $RESULTS_DIR/regression_diff.txt
138*bbecb9d1SAndroid Build Coastguard Worker      return 0
139*bbecb9d1SAndroid Build Coastguard Worker   fi
140*bbecb9d1SAndroid Build Coastguard Worker}
141*bbecb9d1SAndroid Build Coastguard Worker
142*bbecb9d1SAndroid Build Coastguard Workerinterpret_results()
143*bbecb9d1SAndroid Build Coastguard Worker{
144*bbecb9d1SAndroid Build Coastguard Worker   PASSED_TESTS="$1"
145*bbecb9d1SAndroid Build Coastguard Worker   TOTAL_TESTS="$2"
146*bbecb9d1SAndroid Build Coastguard Worker   UNRELIABLE="$3"
147*bbecb9d1SAndroid Build Coastguard Worker
148*bbecb9d1SAndroid Build Coastguard Worker   # TODO: Add comparison for the unreliable tests
149*bbecb9d1SAndroid Build Coastguard Worker   if [ $UNRELIABLE -eq 0 ]; then
150*bbecb9d1SAndroid Build Coastguard Worker      compare_previous
151*bbecb9d1SAndroid Build Coastguard Worker      case $? in
152*bbecb9d1SAndroid Build Coastguard Worker         0)
153*bbecb9d1SAndroid Build Coastguard Worker         echo "Pass - matches previous results"
154*bbecb9d1SAndroid Build Coastguard Worker         return 0
155*bbecb9d1SAndroid Build Coastguard Worker         ;;
156*bbecb9d1SAndroid Build Coastguard Worker
157*bbecb9d1SAndroid Build Coastguard Worker         1)
158*bbecb9d1SAndroid Build Coastguard Worker         echo "Fail - diff against previous results: $RESULTS_DIR/regression_diff.txt"
159*bbecb9d1SAndroid Build Coastguard Worker         echo -n "Changes detected: "
160*bbecb9d1SAndroid Build Coastguard Worker         grep ^+ $RESULTS_DIR/regression_diff.txt | wc -l
161*bbecb9d1SAndroid Build Coastguard Worker         head -n20 $RESULTS_DIR/regression_diff.txt
162*bbecb9d1SAndroid Build Coastguard Worker         return 1
163*bbecb9d1SAndroid Build Coastguard Worker         ;;
164*bbecb9d1SAndroid Build Coastguard Worker
165*bbecb9d1SAndroid Build Coastguard Worker         2)
166*bbecb9d1SAndroid Build Coastguard Worker         echo "Pass - no previous results, but passed $PASSED_TESTS/$TOTAL_TESTS tests"
167*bbecb9d1SAndroid Build Coastguard Worker         return 0
168*bbecb9d1SAndroid Build Coastguard Worker         ;;
169*bbecb9d1SAndroid Build Coastguard Worker
170*bbecb9d1SAndroid Build Coastguard Worker         *)
171*bbecb9d1SAndroid Build Coastguard Worker         echo "BUG!"
172*bbecb9d1SAndroid Build Coastguard Worker         return 1
173*bbecb9d1SAndroid Build Coastguard Worker         ;;
174*bbecb9d1SAndroid Build Coastguard Worker      esac
175*bbecb9d1SAndroid Build Coastguard Worker   else
176*bbecb9d1SAndroid Build Coastguard Worker      if [ $PASSED_TESTS -eq $TOTAL_TESTS ] && [ $TOTAL_TESTS -ne 0 ]; then
177*bbecb9d1SAndroid Build Coastguard Worker         echo "Pass - passed $PASSED_TESTS/$TOTAL_TESTS tests"
178*bbecb9d1SAndroid Build Coastguard Worker         return 0
179*bbecb9d1SAndroid Build Coastguard Worker      else
180*bbecb9d1SAndroid Build Coastguard Worker         echo "Fail - passed $PASSED_TESTS/$TOTAL_TESTS tests: $RESULTS_DIR/results.txt"
181*bbecb9d1SAndroid Build Coastguard Worker         return 1
182*bbecb9d1SAndroid Build Coastguard Worker      fi
183*bbecb9d1SAndroid Build Coastguard Worker   fi
184*bbecb9d1SAndroid Build Coastguard Worker}
185*bbecb9d1SAndroid Build Coastguard Worker
186*bbecb9d1SAndroid Build Coastguard Workerrun_vtest_server()
187*bbecb9d1SAndroid Build Coastguard Worker{
188*bbecb9d1SAndroid Build Coastguard Worker   (
189*bbecb9d1SAndroid Build Coastguard Worker   if [ $USE_HOST_GLES -eq 1 ]; then
190*bbecb9d1SAndroid Build Coastguard Worker      VTEST_USE_EGL_SURFACELESS=1 \
191*bbecb9d1SAndroid Build Coastguard Worker      VTEST_USE_GLES=1 \
192*bbecb9d1SAndroid Build Coastguard Worker      virgl_test_server &>$VTEST_LOG_FILE &
193*bbecb9d1SAndroid Build Coastguard Worker   else
194*bbecb9d1SAndroid Build Coastguard Worker      VTEST_USE_EGL_SURFACELESS=1 \
195*bbecb9d1SAndroid Build Coastguard Worker      virgl_test_server &>$VTEST_LOG_FILE &
196*bbecb9d1SAndroid Build Coastguard Worker   fi
197*bbecb9d1SAndroid Build Coastguard Worker   )
198*bbecb9d1SAndroid Build Coastguard Worker}
199*bbecb9d1SAndroid Build Coastguard Worker
200*bbecb9d1SAndroid Build Coastguard Workerrun_test_suite()
201*bbecb9d1SAndroid Build Coastguard Worker{
202*bbecb9d1SAndroid Build Coastguard Worker   local BACKEND="$1"
203*bbecb9d1SAndroid Build Coastguard Worker   local TEST_NAME="$2"
204*bbecb9d1SAndroid Build Coastguard Worker   local UNRELIABLE="$3"
205*bbecb9d1SAndroid Build Coastguard Worker   local LOCAL_TEST_FILE="$4"
206*bbecb9d1SAndroid Build Coastguard Worker   local RES_FILE=$RESULTS_FILE
207*bbecb9d1SAndroid Build Coastguard Worker
208*bbecb9d1SAndroid Build Coastguard Worker#   echo "run_test_suite() OUTPUT_PATH: $OUTPUT_PATH"
209*bbecb9d1SAndroid Build Coastguard Worker#   echo "run_test_suite() LOG_FILE: $LOG_FILE"
210*bbecb9d1SAndroid Build Coastguard Worker#   echo "run_test_suite() RESULTS_FILE: $RESULTS_FILE"
211*bbecb9d1SAndroid Build Coastguard Worker
212*bbecb9d1SAndroid Build Coastguard Worker   UNRELIABLE_STRING=""
213*bbecb9d1SAndroid Build Coastguard Worker   if [ $UNRELIABLE -eq 1 ]; then
214*bbecb9d1SAndroid Build Coastguard Worker      UNRELIABLE_STRING="unreliable "
215*bbecb9d1SAndroid Build Coastguard Worker      RES_FILE="$RES_FILE.unreliable"
216*bbecb9d1SAndroid Build Coastguard Worker   fi
217*bbecb9d1SAndroid Build Coastguard Worker
218*bbecb9d1SAndroid Build Coastguard Worker   if [[ $BACKEND == *"vtest"* ]]; then
219*bbecb9d1SAndroid Build Coastguard Worker      printf "Running ${UNRELIABLE_STRING}$TEST_APP-$TEST_NAME on vtest-$DRIVER_NAME: "
220*bbecb9d1SAndroid Build Coastguard Worker   else
221*bbecb9d1SAndroid Build Coastguard Worker      printf "Running ${UNRELIABLE_STRING}$TEST_APP-$TEST_NAME on $DRIVER_NAME: "
222*bbecb9d1SAndroid Build Coastguard Worker   fi
223*bbecb9d1SAndroid Build Coastguard Worker
224*bbecb9d1SAndroid Build Coastguard Worker   if test $UNRELIABLE -eq 1; then
225*bbecb9d1SAndroid Build Coastguard Worker      LOCAL_TEST_FILE="$IGNORE_TESTS_FILE"
226*bbecb9d1SAndroid Build Coastguard Worker      if test ! -f $LOCAL_TEST_FILE -o $(wc -l $LOCAL_TEST_FILE | cut -f1 -d' ') -eq 0; then
227*bbecb9d1SAndroid Build Coastguard Worker         echo "Unreliable: no ignore tests."
228*bbecb9d1SAndroid Build Coastguard Worker         return 0
229*bbecb9d1SAndroid Build Coastguard Worker      fi
230*bbecb9d1SAndroid Build Coastguard Worker   fi
231*bbecb9d1SAndroid Build Coastguard Worker
232*bbecb9d1SAndroid Build Coastguard Worker   case $TEST_APP in
233*bbecb9d1SAndroid Build Coastguard Worker   piglit)
234*bbecb9d1SAndroid Build Coastguard Worker      # Don't run GLX tests
235*bbecb9d1SAndroid Build Coastguard Worker      PIGLIT_TESTS=" -x glx"
236*bbecb9d1SAndroid Build Coastguard Worker
237*bbecb9d1SAndroid Build Coastguard Worker      if test $UNRELIABLE -eq 1; then
238*bbecb9d1SAndroid Build Coastguard Worker         # XXX: Fold the glx exception?
239*bbecb9d1SAndroid Build Coastguard Worker         PIGLIT_TESTS_CMD="--test-list $LOCAL_TEST_FILE"
240*bbecb9d1SAndroid Build Coastguard Worker      else
241*bbecb9d1SAndroid Build Coastguard Worker         # TODO: create test_file for normal runs
242*bbecb9d1SAndroid Build Coastguard Worker         PIGLIT_TESTS_CMD="$PIGLIT_TESTS -t $TEST_NAME"
243*bbecb9d1SAndroid Build Coastguard Worker
244*bbecb9d1SAndroid Build Coastguard Worker      fi
245*bbecb9d1SAndroid Build Coastguard Worker
246*bbecb9d1SAndroid Build Coastguard Worker      EGL_PLATFORM=x11 \
247*bbecb9d1SAndroid Build Coastguard Worker      piglit run --platform x11_egl \
248*bbecb9d1SAndroid Build Coastguard Worker         -l verbose \
249*bbecb9d1SAndroid Build Coastguard Worker         --jobs $NUM_THREADS \
250*bbecb9d1SAndroid Build Coastguard Worker         $PIGLIT_TESTS_CMD \
251*bbecb9d1SAndroid Build Coastguard Worker         gpu \
252*bbecb9d1SAndroid Build Coastguard Worker         /tmp/  &> $LOG_FILE
253*bbecb9d1SAndroid Build Coastguard Worker
254*bbecb9d1SAndroid Build Coastguard Worker      piglit summary console /tmp/ | grep -B 999999 "summary:" | grep -v "summary:" > "$RES_FILE"
255*bbecb9d1SAndroid Build Coastguard Worker
256*bbecb9d1SAndroid Build Coastguard Worker      piglit summary html  $(dirname "$RES_FILE")/summary /tmp
257*bbecb9d1SAndroid Build Coastguard Worker
258*bbecb9d1SAndroid Build Coastguard Worker      TOTAL_TESTS=$(cat $RES_FILE | wc -l)
259*bbecb9d1SAndroid Build Coastguard Worker      PASSED_TESTS=$(grep " pass" $RES_FILE | wc -l)
260*bbecb9d1SAndroid Build Coastguard Worker      ;;
261*bbecb9d1SAndroid Build Coastguard Worker
262*bbecb9d1SAndroid Build Coastguard Worker   deqp)
263*bbecb9d1SAndroid Build Coastguard Worker      deqp  \
264*bbecb9d1SAndroid Build Coastguard Worker         --cts-build-dir $CTS_PATH/build \
265*bbecb9d1SAndroid Build Coastguard Worker         --test-names-file "$LOCAL_TEST_FILE" \
266*bbecb9d1SAndroid Build Coastguard Worker         --results-file "$RES_FILE" \
267*bbecb9d1SAndroid Build Coastguard Worker         --threads $NUM_THREADS &> $LOG_FILE
268*bbecb9d1SAndroid Build Coastguard Worker
269*bbecb9d1SAndroid Build Coastguard Worker      # Remove header
270*bbecb9d1SAndroid Build Coastguard Worker      sed -i "/#/d" $RES_FILE
271*bbecb9d1SAndroid Build Coastguard Worker
272*bbecb9d1SAndroid Build Coastguard Worker      # Sort results file to make diffs easier to read
273*bbecb9d1SAndroid Build Coastguard Worker      sort -V $RES_FILE -o $RES_FILE
274*bbecb9d1SAndroid Build Coastguard Worker
275*bbecb9d1SAndroid Build Coastguard Worker      TOTAL_TESTS=$(cat $RES_FILE | wc -l)
276*bbecb9d1SAndroid Build Coastguard Worker      PASSED_TESTS=$(grep " Pass" $RES_FILE | wc -l)
277*bbecb9d1SAndroid Build Coastguard Worker      ;;
278*bbecb9d1SAndroid Build Coastguard Worker   esac
279*bbecb9d1SAndroid Build Coastguard Worker
280*bbecb9d1SAndroid Build Coastguard Worker   interpret_results $PASSED_TESTS $TOTAL_TESTS $UNRELIABLE
281*bbecb9d1SAndroid Build Coastguard Worker   return $?
282*bbecb9d1SAndroid Build Coastguard Worker}
283*bbecb9d1SAndroid Build Coastguard Worker
284*bbecb9d1SAndroid Build Coastguard Workercreate_result_dir()
285*bbecb9d1SAndroid Build Coastguard Worker{
286*bbecb9d1SAndroid Build Coastguard Worker   if [[ -n $GALLIUM_DRIVER ]]; then
287*bbecb9d1SAndroid Build Coastguard Worker      HOST_DRIVER="_${GALLIUM_DRIVER}"
288*bbecb9d1SAndroid Build Coastguard Worker   elif [[ -n $DRIVER_NAME ]]; then
289*bbecb9d1SAndroid Build Coastguard Worker      HOST_DRIVER="_${DRIVER_NAME}"
290*bbecb9d1SAndroid Build Coastguard Worker   fi
291*bbecb9d1SAndroid Build Coastguard Worker
292*bbecb9d1SAndroid Build Coastguard Worker   if [ $USE_HOST_GLES -eq 0 ]; then
293*bbecb9d1SAndroid Build Coastguard Worker      HOST_GL="gl"
294*bbecb9d1SAndroid Build Coastguard Worker   else
295*bbecb9d1SAndroid Build Coastguard Worker      HOST_GL="es"
296*bbecb9d1SAndroid Build Coastguard Worker   fi
297*bbecb9d1SAndroid Build Coastguard Worker
298*bbecb9d1SAndroid Build Coastguard Worker   TEST_PATH=${HOST_GL}_host${HOST_DRIVER}/${TEST_APP}_${TEST_NAME}
299*bbecb9d1SAndroid Build Coastguard Worker   RESULTS_DIR=$VIRGL_PATH/results/${TEST_PATH}
300*bbecb9d1SAndroid Build Coastguard Worker
301*bbecb9d1SAndroid Build Coastguard Worker   if [ "$HOST_DRIVER" = "_softpipe" -o "$HOST_DRIVER" = "_llvmpipe" ]; then
302*bbecb9d1SAndroid Build Coastguard Worker      PREVIOUS_RESULTS_DIR=$VIRGL_PATH/ci/previous_results/${TEST_PATH}
303*bbecb9d1SAndroid Build Coastguard Worker   else
304*bbecb9d1SAndroid Build Coastguard Worker      echo WARNING: Results are not up-to-date!
305*bbecb9d1SAndroid Build Coastguard Worker      PREVIOUS_RESULTS_DIR=$VIRGL_PATH/ci/previous_results/archived/${TEST_PATH}
306*bbecb9d1SAndroid Build Coastguard Worker   fi
307*bbecb9d1SAndroid Build Coastguard Worker
308*bbecb9d1SAndroid Build Coastguard Worker   IGNORE_TESTS_FILE=$PREVIOUS_RESULTS_DIR/ignore_tests.txt
309*bbecb9d1SAndroid Build Coastguard Worker
310*bbecb9d1SAndroid Build Coastguard Worker   # Remove comments from test-list
311*bbecb9d1SAndroid Build Coastguard Worker   FILTERED_TEST_FILE=$(mktemp /tmp/virgl-ci.XXXXX)
312*bbecb9d1SAndroid Build Coastguard Worker   sed '/^#/d;/^$/d' $IGNORE_TESTS_FILE 2>/dev/null > $FILTERED_TEST_FILE
313*bbecb9d1SAndroid Build Coastguard Worker   IGNORE_TESTS_FILE=$FILTERED_TEST_FILE
314*bbecb9d1SAndroid Build Coastguard Worker
315*bbecb9d1SAndroid Build Coastguard Worker   mkdir -p "$RESULTS_DIR"
316*bbecb9d1SAndroid Build Coastguard Worker
317*bbecb9d1SAndroid Build Coastguard Worker   export OUTPUT_PATH="${RESULTS_DIR}"
318*bbecb9d1SAndroid Build Coastguard Worker   export RESULTS_FILE="${OUTPUT_PATH}/results.txt"
319*bbecb9d1SAndroid Build Coastguard Worker   export LOG_FILE="${OUTPUT_PATH}/log.txt"
320*bbecb9d1SAndroid Build Coastguard Worker   export VTEST_LOG_FILE="${OUTPUT_PATH}/vtest_log.txt"
321*bbecb9d1SAndroid Build Coastguard Worker}
322*bbecb9d1SAndroid Build Coastguard Worker
323*bbecb9d1SAndroid Build Coastguard Workerrun_test_on_backends()
324*bbecb9d1SAndroid Build Coastguard Worker{
325*bbecb9d1SAndroid Build Coastguard Worker   local BACKENDS="$1"
326*bbecb9d1SAndroid Build Coastguard Worker   local TEST_NAME="$2"
327*bbecb9d1SAndroid Build Coastguard Worker   local TEST_FILE="$3"
328*bbecb9d1SAndroid Build Coastguard Worker   local RET=0
329*bbecb9d1SAndroid Build Coastguard Worker
330*bbecb9d1SAndroid Build Coastguard Worker#   echo "run_test_on_backends() BACKENDS: $BACKENDS"
331*bbecb9d1SAndroid Build Coastguard Worker#   echo "run_test_on_backends() TEST_NAME: $TEST_NAME"
332*bbecb9d1SAndroid Build Coastguard Worker#   echo "run_test_on_backends() TEST_FILE: $TEST_FILE"
333*bbecb9d1SAndroid Build Coastguard Worker
334*bbecb9d1SAndroid Build Coastguard Worker   for BACKEND in $BACKENDS; do
335*bbecb9d1SAndroid Build Coastguard Worker         unset DRIVER_NAME
336*bbecb9d1SAndroid Build Coastguard Worker         unset GALLIUM_DRIVER
337*bbecb9d1SAndroid Build Coastguard Worker         unset GALLIVM_PERF
338*bbecb9d1SAndroid Build Coastguard Worker         unset LIBGL_ALWAYS_SOFTWARE
339*bbecb9d1SAndroid Build Coastguard Worker         unset VTEST_USE_EGL_SURFACELESS
340*bbecb9d1SAndroid Build Coastguard Worker
341*bbecb9d1SAndroid Build Coastguard Worker         case $BACKEND in
342*bbecb9d1SAndroid Build Coastguard Worker            vtest-softpipe|softpipe)
343*bbecb9d1SAndroid Build Coastguard Worker               export LIBGL_ALWAYS_SOFTWARE=1
344*bbecb9d1SAndroid Build Coastguard Worker               export GALLIUM_DRIVER=softpipe
345*bbecb9d1SAndroid Build Coastguard Worker               export DRIVER_NAME=$GALLIUM_DRIVER
346*bbecb9d1SAndroid Build Coastguard Worker               ;;
347*bbecb9d1SAndroid Build Coastguard Worker
348*bbecb9d1SAndroid Build Coastguard Worker            vtest-llvmpipe|llvmpipe)
349*bbecb9d1SAndroid Build Coastguard Worker               export GALLIVM_PERF=nopt,no_filter_hacks
350*bbecb9d1SAndroid Build Coastguard Worker               export LIBGL_ALWAYS_SOFTWARE=1
351*bbecb9d1SAndroid Build Coastguard Worker               export GALLIUM_DRIVER=llvmpipe
352*bbecb9d1SAndroid Build Coastguard Worker               export DRIVER_NAME=$GALLIUM_DRIVER
353*bbecb9d1SAndroid Build Coastguard Worker               ;;
354*bbecb9d1SAndroid Build Coastguard Worker
355*bbecb9d1SAndroid Build Coastguard Worker            vtest-gpu|gpu)
356*bbecb9d1SAndroid Build Coastguard Worker               DEVICE_NAME=$(basename /dev/dri/renderD128)
357*bbecb9d1SAndroid Build Coastguard Worker               export DRIVER_NAME="$(basename `readlink /sys/class/drm/${DEVICE_NAME}/device/driver`)"
358*bbecb9d1SAndroid Build Coastguard Worker               ;;
359*bbecb9d1SAndroid Build Coastguard Worker         esac
360*bbecb9d1SAndroid Build Coastguard Worker
361*bbecb9d1SAndroid Build Coastguard Worker         # This case statement is broken into two parts
362*bbecb9d1SAndroid Build Coastguard Worker         # because for the second part the LOG_FILE has
363*bbecb9d1SAndroid Build Coastguard Worker         # declared, which is needed to redirect FDs
364*bbecb9d1SAndroid Build Coastguard Worker         create_result_dir
365*bbecb9d1SAndroid Build Coastguard Worker
366*bbecb9d1SAndroid Build Coastguard Worker         case $BACKEND in
367*bbecb9d1SAndroid Build Coastguard Worker            vtest-*)
368*bbecb9d1SAndroid Build Coastguard Worker               run_vtest_server
369*bbecb9d1SAndroid Build Coastguard Worker               export GALLIUM_DRIVER=virpipe
370*bbecb9d1SAndroid Build Coastguard Worker               ;;
371*bbecb9d1SAndroid Build Coastguard Worker
372*bbecb9d1SAndroid Build Coastguard Worker            *)
373*bbecb9d1SAndroid Build Coastguard Worker               ;;
374*bbecb9d1SAndroid Build Coastguard Worker         esac
375*bbecb9d1SAndroid Build Coastguard Worker
376*bbecb9d1SAndroid Build Coastguard Worker         # Execute both mustpass and unstable tests
377*bbecb9d1SAndroid Build Coastguard Worker         # Only the former twigger an overall run fail
378*bbecb9d1SAndroid Build Coastguard Worker         run_test_suite "$BACKEND" "$TEST_NAME" 0 "$TEST_FILE"
379*bbecb9d1SAndroid Build Coastguard Worker         if [ $? -ne 0 ]; then
380*bbecb9d1SAndroid Build Coastguard Worker            RET=1
381*bbecb9d1SAndroid Build Coastguard Worker         fi
382*bbecb9d1SAndroid Build Coastguard Worker
383*bbecb9d1SAndroid Build Coastguard Worker         run_test_suite "$BACKEND" "$TEST_NAME" 1 "$TEST_FILE"
384*bbecb9d1SAndroid Build Coastguard Worker
385*bbecb9d1SAndroid Build Coastguard Worker         killall -q virgl_test_server
386*bbecb9d1SAndroid Build Coastguard Worker   done
387*bbecb9d1SAndroid Build Coastguard Worker
388*bbecb9d1SAndroid Build Coastguard Worker   return $RET
389*bbecb9d1SAndroid Build Coastguard Worker}
390*bbecb9d1SAndroid Build Coastguard Worker
391*bbecb9d1SAndroid Build Coastguard Workerrun_all_tests()
392*bbecb9d1SAndroid Build Coastguard Worker{
393*bbecb9d1SAndroid Build Coastguard Worker   local BACKENDS=$1
394*bbecb9d1SAndroid Build Coastguard Worker   local TESTS=$2
395*bbecb9d1SAndroid Build Coastguard Worker   local RET=0
396*bbecb9d1SAndroid Build Coastguard Worker
397*bbecb9d1SAndroid Build Coastguard Worker   if [ $USE_HOST_GLES -eq 0 ]; then
398*bbecb9d1SAndroid Build Coastguard Worker      echo "Running test(s) on GL Host"
399*bbecb9d1SAndroid Build Coastguard Worker      echo "--------------------------"
400*bbecb9d1SAndroid Build Coastguard Worker   else
401*bbecb9d1SAndroid Build Coastguard Worker      echo "Running test(s) on GLES Host"
402*bbecb9d1SAndroid Build Coastguard Worker      echo "----------------------------"
403*bbecb9d1SAndroid Build Coastguard Worker   fi
404*bbecb9d1SAndroid Build Coastguard Worker#   echo "run_all_tests() BACKENDS: $BACKENDS"
405*bbecb9d1SAndroid Build Coastguard Worker#   echo "run_all_tests() TESTS: $TESTS"
406*bbecb9d1SAndroid Build Coastguard Worker
407*bbecb9d1SAndroid Build Coastguard Worker
408*bbecb9d1SAndroid Build Coastguard Worker   # TODO: add similar must pass lists for piglit
409*bbecb9d1SAndroid Build Coastguard Worker   for TEST in $TESTS; do
410*bbecb9d1SAndroid Build Coastguard Worker      case $TEST in
411*bbecb9d1SAndroid Build Coastguard Worker      gles2|gles3|gles31)
412*bbecb9d1SAndroid Build Coastguard Worker         TEST_FILE="$CTS_PATH/android/cts/master/$TEST-master.txt"
413*bbecb9d1SAndroid Build Coastguard Worker         ;;
414*bbecb9d1SAndroid Build Coastguard Worker      gl30|gl31|gl32)
415*bbecb9d1SAndroid Build Coastguard Worker         TEST_FILE="$CTS_PATH/external/openglcts/data/mustpass/gl/khronos_mustpass/4.6.1.x/$TEST-master.txt"
416*bbecb9d1SAndroid Build Coastguard Worker         ;;
417*bbecb9d1SAndroid Build Coastguard Worker      esac
418*bbecb9d1SAndroid Build Coastguard Worker
419*bbecb9d1SAndroid Build Coastguard Worker      run_test_on_backends "$BACKENDS" "$TEST" "$TEST_FILE"
420*bbecb9d1SAndroid Build Coastguard Worker
421*bbecb9d1SAndroid Build Coastguard Worker      if [ $? -ne 0 ]; then
422*bbecb9d1SAndroid Build Coastguard Worker         RET=1
423*bbecb9d1SAndroid Build Coastguard Worker      fi
424*bbecb9d1SAndroid Build Coastguard Worker   done
425*bbecb9d1SAndroid Build Coastguard Worker
426*bbecb9d1SAndroid Build Coastguard Worker   exit $RET
427*bbecb9d1SAndroid Build Coastguard Worker}
428*bbecb9d1SAndroid Build Coastguard Worker
429*bbecb9d1SAndroid Build Coastguard Workersetup()
430*bbecb9d1SAndroid Build Coastguard Worker{
431*bbecb9d1SAndroid Build Coastguard Worker   Xvfb :0 -screen 0 1024x768x24 &>/dev/null &
432*bbecb9d1SAndroid Build Coastguard Worker   export DISPLAY=:0
433*bbecb9d1SAndroid Build Coastguard Worker   sleep 2
434*bbecb9d1SAndroid Build Coastguard Worker}
435*bbecb9d1SAndroid Build Coastguard Worker
436*bbecb9d1SAndroid Build Coastguard Workersetup
437*bbecb9d1SAndroid Build Coastguard Workerparse_input $@
438*bbecb9d1SAndroid Build Coastguard Workerrun_all_tests "$BACKENDS" "$TESTS"
439