[Mesa-dev] [PATCH 0/8] Add DCC support.

Bas Nieuwenhuizen bas at basnieuwenhuizen.nl
Fri Sep 4 12:47:07 PDT 2015


This patch series enables delta color compression (DCC) for Vulcanic
Islands GPU's. This should reduce memory bandwidth to increase
performance.

I have found no documentation on this feature, so most of the work is
based on guesswork, register names and Catalyst traces.

Some benchmarks I've ran:

nexuiz    68.83 -> 81.62
openarena 50.90 -> 50.80
heaven     5.47 ->  6.26
valley     9.58 -> 10.40
xonotic   60.32 -> 60.27

Note that DCC for SCANOUT surfaces is still disabled, as the X server
can be rendering to it as front buffer, which has no resource flush.

As a side effect, the main framebuffers of clients (at least on DRI2)
are also not DCC enabled. As passing a surface to the X server and
display are the most common reasons for decompressing, games should not
pretty much never trigger the DCC decompression path. We therefore
should have only very minor performance regressions. If I enable DCC
for SCANOUT buffers in applications I get

nexuiz    68.83 -> 78.81
openarena 50.90 -> 56.10
heaven     5.47 ->  6.28
valley     9.58 -> 10.54
xonotic   60.32 -> 56.26

This change would have somewhat mixed results, with a regression for
xonotic.

As for testing, I run this systemwide for a few days now and a piglit
test minus a few tests that locked up on the baseline or
seemingly gave random results, did not result in regressions.


Bas Nieuwenhuizen (8):
  radeonsi: Allocate buffers for DCC.
  radeonsi: Add DCC compression tracking machinery.
  radeonsi: Enable DCC.
  radeonsi: Add DCC fast clear.
  radeonsi: Invalidate the L2 cache on framebuffer change.
  radeonsi: Add sampling of DCC compressed textures.
  radeonsi: Do not decompress DCC textures for sampling.
  radeonsi: Add DCC for multisampled textures.

 src/gallium/drivers/radeon/r600_buffer_common.c | 20 +++++++
 src/gallium/drivers/radeon/r600_pipe_common.h   |  9 ++++
 src/gallium/drivers/radeon/r600_texture.c       | 69 +++++++++++++++++++++----
 src/gallium/drivers/radeon/r600d_common.h       |  1 +
 src/gallium/drivers/radeon/radeon_winsys.h      |  5 ++
 src/gallium/drivers/radeonsi/cik_sdma.c         |  6 ++-
 src/gallium/drivers/radeonsi/si_blit.c          | 39 +++++++++-----
 src/gallium/drivers/radeonsi/si_descriptors.c   |  5 ++
 src/gallium/drivers/radeonsi/si_dma.c           |  6 ++-
 src/gallium/drivers/radeonsi/si_pipe.c          |  2 +
 src/gallium/drivers/radeonsi/si_pipe.h          |  3 ++
 src/gallium/drivers/radeonsi/si_state.c         | 47 ++++++++++++++---
 src/gallium/drivers/radeonsi/si_state_draw.c    | 14 +++++
 src/gallium/drivers/radeonsi/sid.h              |  1 +
 src/gallium/winsys/amdgpu/drm/amdgpu_surface.c  | 47 +++++++++++++++--
 15 files changed, 237 insertions(+), 37 deletions(-)

-- 
2.5.1



More information about the mesa-dev mailing list