freedreno: Tell the kernel that all BOs are for writing.
authorEric Anholt <eric@anholt.net>
Fri, 8 May 2020 19:28:08 +0000 (12:28 -0700)
committerMarge Bot <eric+marge@anholt.net>
Tue, 12 May 2020 16:30:57 +0000 (16:30 +0000)
commit064f395a890158ea5502f685ef6c22e504e3f0df
tree01f1ec43339990bc9c5a869163b76d1ec95cf094
parentb2c23b1e48f043edee1a6aaa3c132c13edba032e
freedreno: Tell the kernel that all BOs are for writing.

Using non-write flags is pretty dubious -- it means the kernel tracking an
array of read-only consumers of the BO and having exclusive consumers wait
on each reader's fence.  It allows multiple readers through dma-bufs to do
work in parallel, but at the cost of kernel CPU time and memory management
of the shared array.  Other drivers have dropped this distinction since
dma-buf sharing is usually producer-consumer, not producer-two-consumers,
and the userspace and kernel space tracking is expensive.

For us, this lets us drop the flags passed in for relocs and tracked in
the ringbuffer reloc lists.  The end result of the flags reduction work is
drawoverhead uniforms test throughput 2.37195% +/- 0.365579% (n=15)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4967>
src/freedreno/drm/freedreno_ringbuffer.h
src/freedreno/drm/msm_ringbuffer.c
src/freedreno/drm/msm_ringbuffer_sp.c
src/gallium/drivers/freedreno/a6xx/fd6_pack.h