iris: Enable MCS init with ISL_AUX_OP_AMBIGUATE
authorNanley Chery <nanley.g.chery@intel.com>
Fri, 14 Apr 2023 00:46:13 +0000 (17:46 -0700)
committerMarge Bot <emma+marge@anholt.net>
Thu, 11 May 2023 23:41:16 +0000 (23:41 +0000)
commitf53638fa1ac2d606729fa3095535243acff6b695
tree34afd676b4826e98a2aeef4f60907f6b4247c85e
parentbba4d850c22a6657729616d11c428870cce5b565
iris: Enable MCS init with ISL_AUX_OP_AMBIGUATE

Add support for using BLORP's ambiguate pass to initialize MCS instead
of mapping and memsetting it on the CPU. Note that this won't be used if
the first operation on the MSAA layer is a fast clear.

Since we're no longer mapping, this removes a blocker towards getting
MCS_CCS enabled in small-BAR mode.

This functionality is difficult to test because of the way iris is set
up. It always tries to compress writes. So, a test would only read the
ambiguated MCS element if it tries to read from undefined samples.

To test this, I locally disabled fast clears and rendering with MCS (via
iris_resource_render_aux_usage). I continued to allow sampling with MCS
in iris_resource_texture_aux_usage. So, writes go directly to the main
surface and reads go through the ambiguated MCS surface.

When I then ran the test group, dEQP-GLES3.functional.multisample.*, all
48/64 supported tests passed on my Ice Lake. If I slightly changed
BLORP's ambiguate pass, I observed several tests failing.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22545>
src/gallium/drivers/iris/iris_resolve.c
src/gallium/drivers/iris/iris_resource.c