radeonsi: compact MRTs to save PS export memory space
authorMarek Olšák <marek.olsak@amd.com>
Wed, 17 Jun 2020 22:04:53 +0000 (18:04 -0400)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 23 Jun 2020 04:23:51 +0000 (00:23 -0400)
commit3fec2f67c3d9424c8c0fdfaeef5d906e27453cd6
tree349520b9603ff57c34fa7c4a37b46324d27fb43c
parent6ac99b9f39dc622d822a4ba54ae4bfad6ed30021
radeonsi: compact MRTs to save PS export memory space

If there are holes between color outputs (e.g. a shader exports MRT1, but
not MRT0), we can remove the holes by moving higher MRTs lower.

The hardware will remap the MRTs to their correct locations if we remove
holes in SPI_SHADER_COL_FORMAT but not CB_SHADER_MASK.

This is a performance optimization, but MRTs with holes are pretty rare,
so there is most likely no effect on any app.

Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5535>
src/gallium/drivers/radeonsi/si_shader_llvm_ps.c
src/gallium/drivers/radeonsi/si_state_shaders.c