Hello, This is the third attempt at supporting batch pipelining. This time I implemented it using a dependency graph (as suggested by Alyssa and Steven) so that batch submission can be delayed even more: the only time we flush batches now is when we have an explicit flush or when the CPU needs to access a BO (we might want to tweak that a bit to avoid the extra latency incurred by this solution). With that in place we hope to increase GPU utilization.
Patches 15 and 16 are optional, but I remember reading (I think it was Steven who mentioned that) that draw order matters when queueing render operations for different frames (frame N should ideally be ready before frame N+1). Not sure if enforcing draw call order is enough to guarantee that rendering of frame N always finishes before frame N+1 though. If that's something you don't want to merge, I can drop it. Regards, Boris Boris Brezillon (17): panfrost: Extend the panfrost_batch_add_bo() API to pass access flags panfrost: Make panfrost_batch->bos a hash table panfrost: Add a batch fence panfrost: Use the per-batch fences to wait on the last submitted batch panfrost: Add a panfrost_freeze_batch() helper panfrost: Start tracking inter-batch dependencies panfrost: Prepare panfrost_fence for batch pipelining panfrost: Add a panfrost_flush_all_batches() helper panfrost: Add a panfrost_flush_batches_accessing_bo() helper panfrost: Kill the explicit serialization in panfrost_batch_submit() panfrost: Get rid of the flush in panfrost_set_framebuffer_state() panfrost: Add flags to reflect the BO imported/exported state panfrost: Make sure the BO is 'ready' when picked from the cache panfrost: Do fine-grained flushing when preparing BO for CPU accesses panfrost: Rename ctx->batches into ctx->fbo_to_batch panfrost: Take draw call order into account panfrost/ci: New tests are passing .../drivers/panfrost/ci/expected-failures.txt | 4 - src/gallium/drivers/panfrost/pan_allocate.c | 14 +- src/gallium/drivers/panfrost/pan_blend_cso.c | 6 +- src/gallium/drivers/panfrost/pan_bo.c | 116 ++- src/gallium/drivers/panfrost/pan_bo.h | 44 ++ src/gallium/drivers/panfrost/pan_compute.c | 2 +- src/gallium/drivers/panfrost/pan_context.c | 121 ++-- src/gallium/drivers/panfrost/pan_context.h | 15 +- src/gallium/drivers/panfrost/pan_instancing.c | 5 +- src/gallium/drivers/panfrost/pan_job.c | 668 ++++++++++++++++-- src/gallium/drivers/panfrost/pan_job.h | 58 +- src/gallium/drivers/panfrost/pan_resource.c | 27 +- src/gallium/drivers/panfrost/pan_screen.c | 65 +- src/gallium/drivers/panfrost/pan_screen.h | 3 +- src/gallium/drivers/panfrost/pan_varyings.c | 10 +- 15 files changed, 956 insertions(+), 202 deletions(-) -- 2.21.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev