[Mesa-dev] [PATCH 00/20] MSAA support for Radeon SI and more

Hi everyone, This is MSAA support for the radeonsi driver. It implements MSAA rendering, texturing, and colorbuffer compression. The only missing feature is the MSAA fast color clear; other than that, it operates at maximum performance the hardware is capable of. I have some patches for the LLVM shader backend this work depends on. I'll send them soon. In order to support texturing with compressed colorbuffers on SI, a special FMASK texture which holds colorbuffer compression data has to be bound to a shader, which means shaders must support 16 FMASK textures in addition to 16 textures exposed to OpenGL. I came up with a new mechanism for setting up shader resource descriptors specifically for FMASK, because the current mechanism doesn't allow fine-grained resource updates. The descriptors are stored in a buffer and updated using the WRITE_DATA packet, and the state management is pretty much the same as in r600g - it's based on r600_atom. There's more info about why this is a lot better in the commit that adds it. I think we could eventually use it for all shader resources and sampler states. There are also some minor changes which are not related to MSAA. Also the whole r600_texture.c file from r600g is ported to radeonsi. Patches 1-2: One fix for TGSI and a small addition to tgsi_shader_info. Patches 3-7: Small cleanups of the radeonsi driver. Patches 8-18: These are the MSAA patches. Patches 19-20: Small unrelated radeonsi fixes. src/gallium/auxiliary/tgsi/tgsi_scan.c | 13 ++ src/gallium/auxiliary/tgsi/tgsi_scan.h | 1 + src/gallium/auxiliary/tgsi/tgsi_util.c | 4 +- src/gallium/drivers/r600/r600_blit.c | 3 - src/gallium/drivers/r600/r600_texture.c | 3 +- src/gallium/drivers/radeonsi/Makefile.sources | 1 + src/gallium/drivers/radeonsi/r600_blit.c | 327 +++++++++++++++++++++++++----- src/gallium/drivers/radeonsi/r600_hw_context.c | 22 +++ src/gallium/drivers/radeonsi/r600_resource.h | 38 +++- src/gallium/drivers/radeonsi/r600_texture.c | 649 ++++++++++++++++++++++++++++++++++++++++-------------------- src/gallium/drivers/radeonsi/radeonsi_pipe.c | 28 +-- src/gallium/drivers/radeonsi/radeonsi_pipe.h | 40 +++- src/gallium/drivers/radeonsi/radeonsi_pm4.c | 7 + src/gallium/drivers/radeonsi/radeonsi_pm4.h | 2 + src/gallium/drivers/radeonsi/radeonsi_shader.c | 164 ++++++++++++--- src/gallium/drivers/radeonsi/radeonsi_shader.h | 60 +++--- src/gallium/drivers/radeonsi/radeonsi_uvd.c | 12 +- src/gallium/drivers/radeonsi/si_commands.c | 9 + src/gallium/drivers/radeonsi/si_descriptors.c | 188 ++++++++++++++++++ src/gallium/drivers/radeonsi/si_state.c | 511 +++++++++++++++++++++++++++++++++++++++++------ src/gallium/drivers/radeonsi/si_state.h | 52 ++++- src/gallium/drivers/radeonsi/si_state_draw.c | 55 +++++- src/gallium/drivers/radeonsi/sid.h | 11 ++ 23 files changed, 1766 insertions(+), 434 deletions(-) Please review. Marek