diff --git a/src/freedreno/.gitlab-ci/genoutput.sh b/src/freedreno/.gitlab-ci/genoutput.sh deleted file mode 100755 index 66f23dbda0b..00000000000 --- a/src/freedreno/.gitlab-ci/genoutput.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash - -# This file contains all of the cmdlines used to generate output -# for the test step in the CI pipeline. It can also be used to -# regenerate reference output - -set -x -set -e - -# input/output directories: -base=src/freedreno -traces=$base/.gitlab-ci/traces -reference=$base/.gitlab-ci/reference -output=$base/.gitlab-ci/out - -# use the --update arg to update reference output: -if [ "$1" = "--update" ]; then - output=$reference -fi - -mkdir -p $output - -# binary locations: -cffdump=./install/bin/cffdump -crashdec=./install/bin/crashdec -asm=./install/bin/afuc-asm -disasm=./install/bin/afuc-disasm - -# helper to filter out paths that can change depending on -# who is building and assert messages that can change -# depending on unrelated code changes: -basepath=`dirname $0` -basepath=`dirname $basepath` -basepath=`pwd $basepath` -filter() { - out=$1 - grep -vF "$basepath" | sed "s/.*: Assertion /Assertion /" > $out -} - -# -# The Tests: -# - -# dump only a single frame, and single tile pass, to keep the -# reference output size managable -$cffdump --frame 0 --once $traces/fd-clouds.rd.gz | filter $output/fd-clouds.log -$cffdump --frame 0 --once $traces/es2gears-a320.rd.gz | filter $output/es2gears-a320.log -$cffdump --frame 1 --once $traces/glxgears-a420.rd.gz | filter $output/glxgears-a420.log -$cffdump --once $traces/dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d.rd.gz | filter $output/dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d.log -$cffdump --frame 0 --once $traces/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.rd.gz | filter $output/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log - -# test a lua script to ensure we don't break scripting API: -$cffdump --script $base/decode/scripts/parse-submits.lua $traces/shadow.rd.gz | filter $output/shadow.log - -$crashdec -sf $traces/crash.devcore | filter $output/crash.log diff --git a/src/freedreno/.gitlab-ci/reference/dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d.log b/src/freedreno/.gitlab-ci/reference/dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d.log index e8a201d2e7c..e1163bc36d3 100644 --- a/src/freedreno/.gitlab-ci/reference/dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d.log +++ b/src/freedreno/.gitlab-ci/reference/dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d.log @@ -1,4 +1,3 @@ -Reading src/freedreno/.gitlab-ci/traces/dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d.rd.gz... gpu_id: 201 cmd: deqp-gles2/185: fence=1250 ############################################################ diff --git a/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log b/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log index b9a579d0894..647c45edc3a 100644 --- a/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log +++ b/src/freedreno/.gitlab-ci/reference/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.log @@ -1,4 +1,3 @@ -Reading src/freedreno/.gitlab-ci/traces/dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list.rd.gz... gpu_id: 640 cmd: deqp-vk/74711: fence=247337 ############################################################ diff --git a/src/freedreno/.gitlab-ci/reference/es2gears-a320.log b/src/freedreno/.gitlab-ci/reference/es2gears-a320.log index f40871704ff..a8f46dc8b83 100644 --- a/src/freedreno/.gitlab-ci/reference/es2gears-a320.log +++ b/src/freedreno/.gitlab-ci/reference/es2gears-a320.log @@ -1,4 +1,3 @@ -Reading src/freedreno/.gitlab-ci/traces/es2gears-a320.rd.gz... gpu_id: 330 cmd: es2gears/628: fence=276 ############################################################ diff --git a/src/freedreno/.gitlab-ci/reference/fd-clouds.log b/src/freedreno/.gitlab-ci/reference/fd-clouds.log index 296f62ba64d..1ac9b28ce33 100644 --- a/src/freedreno/.gitlab-ci/reference/fd-clouds.log +++ b/src/freedreno/.gitlab-ci/reference/fd-clouds.log @@ -1,4 +1,3 @@ -Reading src/freedreno/.gitlab-ci/traces/fd-clouds.rd.gz... gpu_id: 630 cmd: null_platform_t/2995: fence=1855 ############################################################ diff --git a/src/freedreno/.gitlab-ci/reference/glxgears-a420.log b/src/freedreno/.gitlab-ci/reference/glxgears-a420.log index 91664ba7573..10c32649b65 100644 --- a/src/freedreno/.gitlab-ci/reference/glxgears-a420.log +++ b/src/freedreno/.gitlab-ci/reference/glxgears-a420.log @@ -1,4 +1,3 @@ -Reading src/freedreno/.gitlab-ci/traces/glxgears-a420.rd.gz... gpu_id: 420 cmd: X/23360: fence=1029603 cmd: glxgears/23375: fence=1029604 diff --git a/src/freedreno/.gitlab-ci/reference/shadow.log b/src/freedreno/.gitlab-ci/reference/shadow.log index 47c7f2e2e5e..2b619e5bfd9 100644 --- a/src/freedreno/.gitlab-ci/reference/shadow.log +++ b/src/freedreno/.gitlab-ci/reference/shadow.log @@ -1,6 +1,4 @@ Analyzing Data... -Reading src/freedreno/.gitlab-ci/traces/shadow.rd.gz... -Parsing src/freedreno/.gitlab-ci/traces/shadow.rd.gz Blit: ----- diff --git a/src/freedreno/.gitlab-ci/run-fdtools.sh b/src/freedreno/.gitlab-ci/run-fdtools.sh index 261969a7510..15c8d7d9730 100755 --- a/src/freedreno/.gitlab-ci/run-fdtools.sh +++ b/src/freedreno/.gitlab-ci/run-fdtools.sh @@ -3,12 +3,6 @@ set -e set -x -p=`dirname $0` - -# Run cffdump/crashdec tests: -$p/genoutput.sh -diff -r $p/reference $p/out - # Also, while we are still using headergen2 for generating kernel # headers, make sure that doesn't break: headergen="_build/src/freedreno/rnn/headergen2" diff --git a/src/freedreno/decode/cffdec.h b/src/freedreno/decode/cffdec.h index 1d0a05d8bdb..a21cf9f0698 100644 --- a/src/freedreno/decode/cffdec.h +++ b/src/freedreno/decode/cffdec.h @@ -64,6 +64,11 @@ struct cffdec_options { */ int once; + /* In unit_test mode, suppress pathnames in output so that we can have references + * independent of the build dir. + */ + int unit_test; + /* for crashdec, where we know CP_IBx_REM_SIZE, we can use this * to highlight the cmdstream not parsed yet, to make it easier * to see how far along the CP is. diff --git a/src/freedreno/decode/cffdump.c b/src/freedreno/decode/cffdump.c index 098ba4b7905..0ed1989798a 100644 --- a/src/freedreno/decode/cffdump.c +++ b/src/freedreno/decode/cffdump.c @@ -106,6 +106,7 @@ print_usage(const char *name) "\t which can be useful when looking at state that does\n" "\t not change per tile\n" "\t--not-once - decode cmdstream for each IB (default)\n" + "\t--unit-test - make reproducible output for unit testing\n" "\t-h, --help - show this message\n" , name); /* clang-format on */ @@ -128,6 +129,7 @@ static const struct option opts[] = { { "query-compare", no_argument, &options.query_compare, 1 }, { "once", no_argument, &options.once, 1 }, { "not-once", no_argument, &options.once, 0 }, + { "unit-test", no_argument, &options.unit_test, 1 }, /* Long opts with short alias: */ { "verbose", no_argument, 0, 'v' }, @@ -263,7 +265,8 @@ handle_file(const char *filename, int start, int end, int draw) cffdec_init(&options); - printf("Reading %s...\n", filename); + if (!options.unit_test) + printf("Reading %s...\n", filename); script_start_cmdstream(filename); diff --git a/src/freedreno/decode/meson.build b/src/freedreno/decode/meson.build index b1feea2adab..de38ed5c1da 100644 --- a/src/freedreno/decode/meson.build +++ b/src/freedreno/decode/meson.build @@ -153,3 +153,49 @@ if dep_libarchive.found() install: false, ) endif + +if with_tests + diff = find_program('diff') + + crashdec_output = custom_target('crashdec.txt', + output: 'crashdec.txt', + command: [crashdec, '-sf', files('../.gitlab-ci/traces/crash.devcore')], + capture: true + ) + test('crashdec', + diff, + args: ['-u', files('../.gitlab-ci/reference/crash.log'), crashdec_output], + suite: 'freedreno', + workdir: meson.source_root() + ) + + # dump only a single frame, and single tile pass, to keep the + # reference output size managable + cffdump_tests = [ + ['fd-clouds', ['--frame', '0', '--once']], + ['es2gears-a320', ['--frame', '0', '--once']], + ['glxgears-a420', ['--frame', '1', '--once']], + ['dEQP-GLES2.functional.texture.specification.basic_teximage2d.rgba16f_2d', ['--once']], + ['dEQP-VK.draw.indirect_draw.indexed.indirect_draw_count.triangle_list', ['--frame', '0', '--once']], + # Test a lua script to ensure we don't break scripting API + ['shadow', ['--script', files(join_paths(meson.current_source_dir(), 'scripts', 'parse-submits.lua'))]], + ] + foreach cffdump_test: cffdump_tests + name = cffdump_test[0] + args = cffdump_test[1] + + log = custom_target(name + '.log', + output: name + '.log', + command: [cffdump, '--unit-test', args, files('../.gitlab-ci/traces/' + name + '.rd.gz')], + capture: true, + ) + test('cffdump-' + name, + diff, + args: ['-u', files('../.gitlab-ci/reference/' + name + '.log'), log], + suite: 'freedreno', + workdir: meson.source_root() + ) + + endforeach + +endif diff --git a/src/freedreno/decode/scripts/parse-submits.lua b/src/freedreno/decode/scripts/parse-submits.lua index 96fa66957dd..cd20b680d3a 100644 --- a/src/freedreno/decode/scripts/parse-submits.lua +++ b/src/freedreno/decode/scripts/parse-submits.lua @@ -64,10 +64,6 @@ local depthwrite local stenciltest local stencilwrite -function start_cmdstream(name) - printf("Parsing %s\n", name) -end - function reset() dbg("reset\n") mrts = {}