radv: add support for MRTs compaction to avoid holes
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 11 Jun 2020 19:54:01 +0000 (21:54 +0200)
committerMarge Bot <eric+marge@anholt.net>
Mon, 29 Jun 2020 08:43:14 +0000 (08:43 +0000)
commit7a5e6fd25f2e132ef4cacc3a5b714c4e153227b0
tree3e3b6b92a75bca71595c2ea37f1b26b5ba8aced9
parent4e0dcbb880855167d09010f948419a3857879a82
radv: add support for MRTs compaction to avoid holes

SPI_SHADER_COL_FORMAT allocates export memory and CB_SHADER_MASK
map them to higher MRTs if necessary. The hardware allows to remap
MRTs to avoid holes somehow.

For example, if we have a scenario where MRT0 is unused and only
MRT1 and MRT2 are used, SPI_SHADER_COL_FORMAT is 0x77 and
CB_SHADER_MASK/CB_TARGET_MASK are 0x770 (this assumes
SPI_SHADER_UINT16_ABGR is set).

This allows us to remove one workaround that was added for fixing
GPU hangs with DXVK. I think this is because SPI_SHADER_COL_FORMAT
expects contiguous MRTs to be allocated.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5434>
src/amd/compiler/aco_instruction_selection.cpp
src/amd/vulkan/radv_nir_to_llvm.c
src/amd/vulkan/radv_pipeline.c
src/amd/vulkan/radv_shader_info.c