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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev