panfrost/ci: Use Volt-based runner for dEQP tests

It's able to run tests in parallel, fully utilizing the HW and
shortening considerable the time it takes.

Needed to disable tests in RK3288 for now because Volt doesn't support
armhf yet, though this should be fixed soon.

Tests are now run with --deqp-gl-config-name=rgba8888d24s8ms0, so we are
hitting a few more failures in tests that previously were being skipped.

The time to run the tests decreases from around 8 minutes to 1:45
minutes, allowing for extending coverage without increasing CI times too
much.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
Tomeu Vizoso 2019-08-15 10:41:21 +02:00
parent 29834fe8a2
commit 76af465e57
6 changed files with 1029 additions and 389 deletions

View File

@ -15,9 +15,9 @@ ln -s /bin/sh /init
rm -rf /etc/localtime
cp /usr/share/zoneinfo/Etc/UTC /etc/localtime
UNNEEDED_PACKAGES=" libfdisk1"\
" tzdata"\
UNNEEDED_PACKAGES="libfdisk1
tzdata
diffutils"
export DEBIAN_FRONTEND=noninteractive
@ -182,4 +182,4 @@ rm usr/lib/*/libdb-5.3.so
rm usr/lib/*/libnss_hesiod*
rm usr/lib/*/libnss_nis*
rm usr/bin/tar
rm bin/tar

View File

@ -42,6 +42,13 @@ apt-get -y install --no-install-recommends \
procps \
qemu-user-static \
cpio \
clang-8 \
llvm-8 \
libclang-8-dev \
llvm-8-dev \
gdc-9 \
lld-8 \
nasm \
\
libdrm-dev:${DEBIAN_ARCH} \
libx11-dev:${DEBIAN_ARCH} \
@ -65,12 +72,12 @@ apt-get -y install --no-install-recommends \
libelf-dev:${DEBIAN_ARCH} \
libwayland-dev:${DEBIAN_ARCH} \
libwayland-egl-backend-dev:${DEBIAN_ARCH} \
libclang-7-dev:${DEBIAN_ARCH} \
zlib1g-dev:${DEBIAN_ARCH} \
libglvnd-core-dev:${DEBIAN_ARCH} \
wayland-protocols:${DEBIAN_ARCH} \
libpng-dev:${DEBIAN_ARCH}
############### Cross-build dEQP
mkdir -p /artifacts/rootfs/deqp
@ -89,7 +96,6 @@ cmake -DDEQP_TARGET=wayland \
/VK-GL-CTS-opengl-es-cts-3.2.5.0
make -j$(nproc)
rm -rf /artifacts/rootfs/deqp/external
rm -rf /artifacts/rootfs/deqp/modules/gles3
rm -rf /artifacts/rootfs/deqp/modules/gles31
rm -rf /artifacts/rootfs/deqp/modules/internal
rm -rf /artifacts/rootfs/deqp/executor
@ -102,6 +108,32 @@ du -sh *
rm -rf /VK-GL-CTS-opengl-es-cts-3.2.5.0
############### Cross-build Volt dEQP runner
mkdir -p /battery
cd /battery
wget https://github.com/VoltLang/Battery/releases/download/v0.1.22/battery-0.1.22-x86_64-linux.tar.gz
tar xzvf battery-0.1.22-x86_64-linux.tar.gz
rm battery-0.1.22-x86_64-linux.tar.gz
mv battery /usr/local/bin
rm -rf /battery
mkdir -p /volt
cd /volt
git clone --depth=1 https://github.com/VoltLang/Watt.git
git clone --depth=1 https://github.com/VoltLang/Volta.git
git clone --depth=1 https://github.com/Wallbraker/dEQP.git
battery config --release --lto Volta Watt
battery build
battery config --arch aarch64 --cmd-volta Volta/volta Volta/rt Watt dEQP
battery build
cp dEQP/deqp /artifacts/rootfs/deqp/deqp-volt
rm -rf /volt
############### Remove LLVM now, so the container image is smaller
apt-get -y remove \*llvm\*
############### Cross-build kernel
KERNEL_URL="https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/snapshot/linux-5.2.tar.gz"
export ARCH=${KERNEL_ARCH}

View File

@ -1,7 +1,5 @@
#!/bin/sh
set -x
DEQP_OPTIONS="--deqp-surface-width=256 --deqp-surface-height=256"
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-visibility=hidden"
DEQP_OPTIONS="$DEQP_OPTIONS --deqp-log-images=disable"
@ -24,26 +22,86 @@ sleep 1 # Give some time for Weston to start up
./deqp-gles2 $DEQP_OPTIONS --deqp-runmode=stdout-caselist | grep "TEST: dEQP-GLES2" | cut -d ' ' -f 2 > /tmp/case-list.txt
# Disable for now tests that are very slow, either by just using lots of CPU or by crashing
sed -i '/dEQP-GLES2.performance/d' /tmp/case-list.txt
sed -i '/dEQP-GLES2.stress/d' /tmp/case-list.txt
sed -i '/dEQP-GLES2.functional.fbo.render.depth./d' /tmp/case-list.txt
sed -i '/dEQP-GLES2.functional.flush_finish./d' /tmp/case-list.txt
FLIP_FLOPS="
dEQP-GLES2.performance
dEQP-GLES2.stress
dEQP-GLES2.functional.fbo.render.depth.
dEQP-GLES2.functional.flush_finish.
"
# Cannot use tee because dash doesn't have pipefail
touch /tmp/result.txt
tail -f /tmp/result.txt &
# These pass or fail seemingly at random
FLIP_FLOPS="$FLIP_FLOPS
dEQP-GLES2.performance
dEQP-GLES2.stress
dEQP-GLES2.functional.fbo.render.depth.
dEQP-GLES2.functional.flush_finish.
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_pos_y_pos_z_and_neg_x_neg_y_pos_z_and_pos_x_pos_y_neg_z
dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1
dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1_depth_component16
dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4
dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4_depth_component16
dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1
dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1_depth_component16
dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4
dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4_depth_component16
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_depth_component16
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_stencil_index8
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_depth_component16
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_stencil_index8
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.
dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgb5_a1
dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgba4
dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.tex2d_rgb
dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.tex2d_rgba
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
dEQP-GLES2.functional.fbo.render.stencil_clear.rbo_rgb5_a1_stencil_index8
dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgb5_a1_stencil_index8
dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgba4_stencil_index8
dEQP-GLES2.functional.fbo.render.stencil.rbo_rgb5_a1_stencil_index8
dEQP-GLES2.functional.fbo.render.stencil.rbo_rgba4_stencil_index8
dEQP-GLES2.functional.lifetime.attach.deleted_input.renderbuffer_framebuffer
dEQP-GLES2.functional.lifetime.attach.deleted_output.renderbuffer_framebuffer
dEQP-GLES2.functional.polygon_offset.fixed16_factor_0_slope
dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope
dEQP-GLES2.functional.shaders.invariance.highp.loop_4
dEQP-GLES2.functional.shaders.matrix.mul.dynamic_highp_mat4_vec4_vertex
dEQP-GLES2.functional.shaders.matrix.mul.dynamic_highp_vec4_mat4_fragment
dEQP-GLES2.functional.shaders.operator.common_functions.smoothstep.mediump_vec3_vertex
dEQP-GLES2.functional.shaders.random.all_features.fragment.12
dEQP-GLES2.functional.shaders.random.all_features.fragment.37
dEQP-GLES2.functional.texture.units.2_units.mixed.1
dEQP-GLES2.functional.texture.units.2_units.mixed.3
dEQP-GLES2.functional.texture.units.2_units.only_2d.2
dEQP-GLES2.functional.texture.units.4_units.mixed.5
dEQP-GLES2.functional.texture.units.4_units.only_2d.0
dEQP-GLES2.functional.texture.units.8_units.only_cube.2
dEQP-GLES2.functional.texture.units.all_units.mixed.6
dEQP-GLES2.functional.texture.units.all_units.only_cube.4
dEQP-GLES2.functional.texture.units.all_units.only_cube.7
dEQP-GLES2.functional.texture.units.all_units.only_cube.8
"
while [ -s /tmp/case-list.txt ]; do
./deqp-gles2 $DEQP_OPTIONS --deqp-log-filename=/dev/null --deqp-caselist-file=/tmp/case-list.txt >> /tmp/result.txt
if [ $? -ne 0 ]; then
# Continue from the subtest after the failing one
crashed_test=$(grep "Test case" /tmp/result.txt | tail -1 | sed "s/Test case '\(.*\)'\.\./\1/")
sed -i "0,/^$crashed_test$/d" /tmp/case-list.txt
for test in $FLIP_FLOPS; do sed -i "/$test/d" /tmp/case-list.txt; done
# So LAVA knows what happened
echo "Test case '$crashed_test'..
Crash"
else
break
fi
done
/deqp/deqp-volt --cts-build-dir=/deqp \
--threads=8 \
--test-names-file=/tmp/case-list.txt \
--results-file=/tmp/results.txt \
--no-passed-results \
--regression-file=/deqp/expected-failures.txt \
--no-rerun-tests
if [ $? -ne 0 ]; then
echo "Regressions detected, printing results:"
cat /tmp/results.txt
echo "deqp: fail"
else
echo "No regressions detected"
echo "deqp: pass"
fi

File diff suppressed because it is too large Load Diff

View File

@ -16,7 +16,7 @@
variables:
UPSTREAM_REPO: mesa/mesa
DEBIAN_VERSION: testing-slim
IMAGE_TAG: "2019-07-25-1"
IMAGE_TAG: "2019-08-21-1"
include:
- project: 'wayland/ci-templates'
@ -51,15 +51,15 @@ stages:
KERNEL_IMAGE_NAME=${KERNEL_IMAGE_NAME}
bash src/gallium/drivers/panfrost/ci/debian-install.sh'
container:armhf:
extends: .container
variables:
DEBIAN_ARCH: "armhf"
GCC_ARCH: "arm-linux-gnueabihf"
KERNEL_ARCH: "arm"
DEFCONFIG: "arch/arm/configs/multi_v7_defconfig"
DEVICE_TREES: "arch/arm/boot/dts/rk3288-veyron-jaq.dtb"
KERNEL_IMAGE_NAME: "zImage"
#container:armhf:
# extends: .container
# variables:
# DEBIAN_ARCH: "armhf"
# GCC_ARCH: "arm-linux-gnueabihf"
# KERNEL_ARCH: "arm"
# DEFCONFIG: "arch/arm/configs/multi_v7_defconfig"
# DEVICE_TREES: "arch/arm/boot/dts/rk3288-veyron-jaq.dtb"
# KERNEL_IMAGE_NAME: "zImage"
container:arm64:
extends: .container
@ -101,6 +101,7 @@ container:arm64:
# Pack rootfs
- cp src/gallium/drivers/panfrost/ci/deqp-runner.sh /artifacts/rootfs/deqp/.
- cp src/gallium/drivers/panfrost/ci/expected-failures.txt /artifacts/rootfs/deqp/.
- du -sh /artifacts/rootfs/deqp/*
- find /artifacts/rootfs/ -type f -printf "%s\t%p\n" | sort -n
- cd /artifacts/rootfs/ ; find -H | cpio -H newc -v -o | gzip -c - > $CI_PROJECT_DIR/results/panfrost-rootfs-${DEBIAN_ARCH}.cpio.gz
@ -123,13 +124,13 @@ container:arm64:
paths:
- results/
build:armhf:
extends: .build
variables:
DEBIAN_ARCH: "armhf"
GCC_ARCH: "arm-linux-gnueabihf"
DEVICE_TYPE: "rk3288-veyron-jaq"
KERNEL_IMAGE_NAME: "zImage"
#build:armhf:
# extends: .build
# variables:
# DEBIAN_ARCH: "armhf"
# GCC_ARCH: "arm-linux-gnueabihf"
# DEVICE_TYPE: "rk3288-veyron-jaq"
# KERNEL_IMAGE_NAME: "zImage"
build:arm64:
extends: .build
@ -155,107 +156,22 @@ build:arm64:
username: jenkins-fdo
token: $LAVA_TOKEN
" > ~/.config/lavacli.yaml
- lava_job_id=`lavacli jobs submit $CI_PROJECT_DIR/results/lava-deqp.yml` || echo $lava_job_id
- lava_job_id=`lavacli jobs submit $CI_PROJECT_DIR/results/lava-deqp.yml`
- echo $lava_job_id
- lavacli jobs logs $lava_job_id | grep -a -v "{'case':" | tee results/lava-deqp-$lava_job_id.log
- lavacli jobs show $lava_job_id
- curl "https://lava.collabora.co.uk/results/$lava_job_id/csv?user=jenkins-fdo&token=$LAVA_TOKEN" > raw_results.csv
- cat raw_results.csv | csvcut -c 12,3 | grep dEQP-GLES2 | sort > results/results-$lava_job_id.csv
# FIXME: Remove flip-flops from comparison files
- |
FLIP_FLOPS="
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_pos_y_pos_z_and_neg_x_neg_y_pos_z_and_pos_x_pos_y_neg_z
dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1
dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1_depth_component16
dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4
dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4_depth_component16
dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1
dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1_depth_component16
dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4
dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4_depth_component16
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_depth_component16
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_stencil_index8
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_depth_component16
dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_stencil_index8
dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.
dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.
dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgb5_a1
dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgba4
dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.tex2d_rgb
dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.tex2d_rgba
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1
dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
dEQP-GLES2.functional.fbo.render.stencil_clear.rbo_rgb5_a1_stencil_index8
dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgb5_a1_stencil_index8
dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgba4_stencil_index8
dEQP-GLES2.functional.fbo.render.stencil.rbo_rgb5_a1_stencil_index8
dEQP-GLES2.functional.fbo.render.stencil.rbo_rgba4_stencil_index8
dEQP-GLES2.functional.lifetime.attach.deleted_input.renderbuffer_framebuffer
dEQP-GLES2.functional.lifetime.attach.deleted_output.renderbuffer_framebuffer
dEQP-GLES2.functional.polygon_offset.fixed16_factor_0_slope
dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope
dEQP-GLES2.functional.shaders.invariance.highp.loop_4
dEQP-GLES2.functional.shaders.matrix.mul.dynamic_highp_mat4_vec4_vertex
dEQP-GLES2.functional.shaders.matrix.mul.dynamic_highp_vec4_mat4_fragment
dEQP-GLES2.functional.shaders.operator.common_functions.smoothstep.mediump_vec3_vertex
dEQP-GLES2.functional.shaders.random.all_features.fragment.12
dEQP-GLES2.functional.shaders.random.all_features.fragment.37
dEQP-GLES2.functional.texture.units.2_units.mixed.1
dEQP-GLES2.functional.texture.units.2_units.mixed.3
dEQP-GLES2.functional.texture.units.2_units.only_2d.2
dEQP-GLES2.functional.texture.units.4_units.mixed.5
dEQP-GLES2.functional.texture.units.4_units.only_2d.0
dEQP-GLES2.functional.texture.units.8_units.only_cube.2
dEQP-GLES2.functional.texture.units.all_units.mixed.6
dEQP-GLES2.functional.texture.units.all_units.only_cube.4
dEQP-GLES2.functional.texture.units.all_units.only_cube.7
dEQP-GLES2.functional.texture.units.all_units.only_cube.8
"
# FIXME: These tests fail in RK3288 but pass on RK3399
- |
FLIP_FLOPS="$FLIP_FLOPS
dEQP-GLES2.functional.fragment_ops.blend.*
dEQP-GLES2.functional.shaders.builtin_variable.max_draw_buffers_vertex
dEQP-GLES2.functional.shaders.matrix.div.const_lowp_mat2_mat2_vertex
dEQP-GLES2.functional.shaders.operator.unary_operator.pre_increment_effect.highp_ivec4_vertex
dEQP-GLES2.functional.shaders.texture_functions.vertex.texture2dprojlod_vec3
dEQP-GLES2.functional.shaders.swizzles.vector_swizzles.mediump_ivec3_stts_fragment
dEQP-GLES2.functional.texture.filtering.2d.nearest_mipmap_nearest_linear_repeat_rgba8888
dEQP-GLES2.functional.shaders.swizzles.vector_swizzles.mediump_ivec3_stts_fragment
dEQP-GLES2.functional.shaders.loops.do_while_constant_iterations.only_continue_vertex
dEQP-GLES2.functional.fbo.render.resize.tex2d_rgb_depth_component16
dEQP-GLES2.functional.fbo.render.resize.tex2d_rgba_depth_component16
dEQP-GLES2.functional.texture.filtering.2d.linear_mipmap_nearest_nearest_clamp_rgba8888
"
- for test in $FLIP_FLOPS; do sed -i "/$test/d" results/expected-failures.txt results/results-$lava_job_id.csv; done
- PASSED=$(grep pass$ results/results-$lava_job_id.csv | wc -l)
- FAILED=$(grep fail$ results/results-$lava_job_id.csv | wc -l)
- TOTAL=$(wc -l < results/results-$lava_job_id.csv)
- 'echo "Passed: $PASSED ($(expr $PASSED \* 100 / $TOTAL)%)"'
- 'echo "Failed: $FAILED ($(expr $FAILED \* 100 / $TOTAL)%)"'
- 'echo "Total: $TOTAL"'
- 'if [ $TOTAL != 16374 ]; then echo "WARNING: Unexpected count of results. Incomplete run?"; fi'
- sed '/,pass/d' results/results-$lava_job_id.csv | sed 's/,fail//' > results/failures-$lava_job_id.txt
# Don't error out on RK3288
- diff -u results/expected-failures.txt results/failures-$lava_job_id.txt || [ -f results/rk3288-veyron-jaq.dtb ]
- result=`lavacli results $lava_job_id 0_deqp deqp | head -1`
- echo $result
- '[[ "$result" == "pass" ]]'
artifacts:
when: always
paths:
- results/
test:armhf:
extends: .test
dependencies:
- build:armhf
#test:armhf:
# extends: .test
# dependencies:
# - build:armhf
test:arm64:
extends: .test

View File

@ -50,21 +50,11 @@ actions:
- mount -t devtmpfs none /dev
- mkdir -p /dev/pts
- mount -t devpts devpts /dev/pts
- echo 1 > /proc/sys/kernel/printk
# - echo performance > /sys/devices/platform/ff9a0000.gpu/devfreq/devfreq0/governor
- echo 3 > /proc/sys/kernel/printk
- echo performance > /sys/devices/platform/ff9a0000.gpu/devfreq/devfreq0/governor
- sh /deqp/deqp-runner.sh
parse:
pattern: 'Test case ''(?P<test_case_id>\S*)''..\s+(?P<result>(Pass|NotSupported|QualityWarning|CompatibilityWarning|Fail|ResourceError|Crash|Timeout|InternalError))'
fixupdict:
Pass: pass
NotSupported: pass
QualityWarning: pass
CompatibilityWarning: pass
Fail: fail
ResourceError: fail
Crash: fail
Timeout: fail
InternalError: fail
pattern: '(?P<test_case_id>\S*):\s+(?P<result>(pass|fail))'
from: inline
name: deqp
path: inline/lava-deqp.yaml