[Mesa-dev] i965: On-demand render target flushing
Francisco Jerez
currojerez at riseup.net
Thu Mar 30 20:41:20 UTC 2017
"Pohjolainen, Topi" <topi.pohjolainen at gmail.com> writes:
> Jason, Curro, do you have any opinion if this is worth pursuing?
> I need something for blorp blits at least - using blorp for texture
> uploads on top of current excessive flushing regresses perf.
>
I wouldn't be surprised if it improves throughput slightly for workloads
doing both compute and 3D rendering, but only testing will tell how
helpful it is in practice...
> When working on gpu hangs on SKL we also identified compute
> flushing caches it shouldn't. I think those could be addressed
> nicely here as well. I can respin if this is something we'd like
> to have.
>
> On Fri, Feb 17, 2017 at 09:32:03PM +0200, Topi Pohjolainen wrote:
>> Currently:
>>
>> 1) Blorp color clears and resolves emit unconditional render target
>> flush + command stream after every clear/resolve (including
>> regular non-fast clears).
>>
>> 2) Blorp color clears, resolves and blits emit texture and constant
>> cache resolves even in case only destination is dirty. This is
>> because brw_render_cache_set_check_flush() does both render target
>> flush as well as the top-of-pipe read cache flushes.
>>
>> 3) Similarly to item 2, 3D and compute paths also flush texture and
>> constant caches even if none of the texture surfaces are dirty.
>>
>> 4) In case of multiple surfaces needing resolves, all render paths
>> (blorp, 3D and compute) emit render target, texture and constant
>> cache flushes after each resolve instead of just once after all
>> resolves.
>>
>> This series addresses all four cases. Good news are that even though
>> the current setup isn't optimal, it doesn't actually get any better in
>> most cases performance wise. There is modest gain in OglDrvRes which
>> does heavy blorp blitting. I'm expecting this series also to make
>> blorp tex uploads and blorp mipmap generation more competitive.
>>
>> Bad news are in the final patch - it looks that current unconditional
>> flushing/stalling has been hiding bugs elsewhere. There are cases
>> which rely on the flushes after non-fast clears. Hunting the real
>> cause is, however, difficult. I only saw them in CI system within
>> full runs and was not able to reproduce them myself.
>>
>> As first steps the series introduces end-of-pipe synchronization.
>> This is a flush combined with stall and post-sync operation of
>> writing a double word (32 bits). Until now this wasn't really
>> needed as there was in many cases double flushing which in turn
>> looks to take long enough to hide the need for the sync. I also
>> noticed that one needs to be rather careful with it - performance
>> gets decreased noticeably when used unneeded.
>>
>> I don't really know if we want to go this way myself even. Current
>> logic - while not ideal - is rather simple.
>>
>> Topi Pohjolainen (16):
>> i965/miptree: Tell if anything got resolved
>> i965/gen6+: Implement end-of-pipe sync
>> i965: Hook end-of-pipe-sync after texture resolves
>> i965: Hook end-of-pipe-sync after image resolves
>> i965: Hook end-of-pipe-sync after framebuffer resolves
>> i965: Consider layered rt resolves along with other
>> i965: Add color resolve end-of-pipe-sync before switch to blit ring
>> i965/dri2: Add end-of-pipe-sync after color resolves
>> i965/miptree: Add color resolve end-of-pipe-sync before sharing
>> i965: Add end-of-pipe sync before non-gpu read of color resolves
>> i965/blorp: Do more fine grained flushing/syncing
>> i965/blorp/blit: Refactor hiz/ccs prep for blits
>> i965/blorp: Use conditional end-of-pipe-sync
>> i965: Consider surface resolves and sync after blorp ops
>> i965: Check if fast color clear state transition needs sync
>> i965/blorp: Drop unnecessary flushes after clear/resolve
>>
>> src/mesa/drivers/dri/i965/brw_blorp.c | 187 ++++++++++----
>> src/mesa/drivers/dri/i965/brw_compute.c | 2 +
>> src/mesa/drivers/dri/i965/brw_context.c | 333 +++++++++++++++++++------
>> src/mesa/drivers/dri/i965/brw_context.h | 3 +
>> src/mesa/drivers/dri/i965/brw_draw.c | 36 +--
>> src/mesa/drivers/dri/i965/brw_pipe_control.c | 91 +++++++
>> src/mesa/drivers/dri/i965/genX_blorp_exec.c | 11 -
>> src/mesa/drivers/dri/i965/intel_blit.c | 16 +-
>> src/mesa/drivers/dri/i965/intel_copy_image.c | 10 +-
>> src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 25 +-
>> src/mesa/drivers/dri/i965/intel_mipmap_tree.h | 2 +-
>> src/mesa/drivers/dri/i965/intel_pixel.c | 4 +
>> src/mesa/drivers/dri/i965/intel_pixel_bitmap.c | 5 +-
>> src/mesa/drivers/dri/i965/intel_pixel_read.c | 7 +-
>> src/mesa/drivers/dri/i965/intel_tex_image.c | 10 +-
>> src/mesa/drivers/dri/i965/intel_tex_subimage.c | 11 +-
>> 16 files changed, 557 insertions(+), 196 deletions(-)
>>
>> --
>> 2.5.5
>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170330/7868ca91/attachment.sig>
More information about the mesa-dev
mailing list