panfrost: Add basic fixed-function blending tests
authorAlyssa Rosenzweig <alyssa@collabora.com>
Fri, 30 Jul 2021 22:43:48 +0000 (18:43 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 11 Aug 2021 18:15:52 +0000 (18:15 +0000)
commit95e306dc84c4964bb5ef84ff4099ae20a7ac53f1
tree74f0baeb961bd59a5415a8dca53097e93a63069c
parent95187c03f1f4db910dba0bb79cb80d2bb9823472
panfrost: Add basic fixed-function blending tests

Add unit tests for the fixed-function blending helpers in pan_blend.c.
Each test consists of a Porter-Duff blend mode and the associated
hardware state. In this commit, we add tests for the most common modes.

For motivation, this code has NOT been properly tested in CI. True,
functional correctness of the blend module as a whole is tested by
dEQP-GLES3.functional.fragment_ops.blend.* among other integration
tests. However, this testing is insufficient to check for regressions.
Crucially, the following broken patch would clear CI:

   bool pan_can_fixed_function(...) {
      return false;
   }

In that case, blend shaders are used 100% of the time, which will
regress performance horribly but still pass dEQP. The only clue
something went wrong would be some traces changing checksum due to the
fixed-function blender producing slightly different output than
equivalent blend shaders. By unit testing the fixed blend path, we
ensure we always use the fixed-function path when we expect it to.

Similarly, using incorrect values for the blend metadata may not affect
functional correctness but will increase power consumption. Let's check
all the data we export to drivers.

Note: due to additive commutativity, there are many pairs of equivalent
Mali blend modes. Unfortunately, the vendor is... inconsistent about how
to resolve ambiguous modes. Our algorithm for computing modes is
correct; the "preferred" values are left in comments since otherwise our
tests fail despite correct code. I want to blame Bifrost for this, but
Midgard was patient zero.

Signed-off-by: Alyssa Rosenzweig <alyssa@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12152>
src/panfrost/lib/meson.build
src/panfrost/lib/tests/test-blend.c [new file with mode: 0644]