radeonsi: implement mechanism for IBs without partial flushes at the end (v6)
authorMarek Olšák <marek.olsak@amd.com>
Fri, 16 Jun 2017 12:25:34 +0000 (14:25 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 16 Apr 2018 20:58:10 +0000 (16:58 -0400)
commit1b3199d14d5ca96cb794dca4213bf5c17d1e264b
tree57bd896decbdb21206473fbe4f9e7d975ab00731
parentd19b488339be4b908dbd3b1636a677d11a2232f0
radeonsi: implement mechanism for IBs without partial flushes at the end (v6)

(This patch doesn't enable the behavior. It will be enabled in a later
commit.)

Draw calls from multiple IBs can be executed in parallel.

v2: do emit partial flushes on SI
v3: invalidate all shader caches at the beginning of IBs
v4: don't call si_emit_cache_flush in si_flush_gfx_cs if not needed,
    only do this for flushes invoked internally
v5: empty IBs should wait for idle if the flush requires it
v6: split the commit

If we artificially limit the number of draw calls per IB to 5, we'll get
a lot more IBs, leading to a lot more partial flushes. Let's see how
the removal of partial flushes changes GPU utilization in that scenario:

With partial flushes (time busy):
    CP: 99%
    SPI: 86%
    CB: 73:

Without partial flushes (time busy):
    CP: 99%
    SPI: 93%
    CB: 81%

Tested-by: Benedikt Schemmer <ben@besd.de>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeon/radeon_winsys.h
src/gallium/drivers/radeonsi/si_gfx_cs.c
src/gallium/drivers/radeonsi/si_pipe.h