diff options
author | Rob Clark <robdclark@chromium.org> | 2021-02-15 12:50:26 -0800 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2021-02-18 00:27:49 +0000 |
commit | e7e19c6a4f433186b134ca796143c48c4c4f7792 (patch) | |
tree | 6e32dae9afd1e0be2263bca08d6191eb6dd32c56 | |
parent | 8a54c4a335a45fb5781ef7ffe7de4471aa7ce180 (diff) |
freedreno: Split batch_flush_reset_dependencies()
Flushing a batch needs to happen on driver thread, but the reset-but-
dont-actually-flush case does not. Decouple these two different cases
to prepare for thread-safety annotations.
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9061>
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_batch.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_batch.c b/src/gallium/drivers/freedreno/freedreno_batch.c index ceceb1953de..f27d495149b 100644 --- a/src/gallium/drivers/freedreno/freedreno_batch.c +++ b/src/gallium/drivers/freedreno/freedreno_batch.c @@ -225,14 +225,26 @@ batch_fini(struct fd_batch *batch) } static void -batch_flush_reset_dependencies(struct fd_batch *batch, bool flush) +batch_flush_dependencies(struct fd_batch *batch) { struct fd_batch_cache *cache = &batch->ctx->screen->batch_cache; struct fd_batch *dep; - foreach_batch(dep, cache, batch->dependents_mask) { - if (flush) - fd_batch_flush(dep); + foreach_batch (dep, cache, batch->dependents_mask) { + fd_batch_flush(dep); + fd_batch_reference(&dep, NULL); + } + + batch->dependents_mask = 0; +} + +static void +batch_reset_dependencies(struct fd_batch *batch) +{ + struct fd_batch_cache *cache = &batch->ctx->screen->batch_cache; + struct fd_batch *dep; + + foreach_batch (dep, cache, batch->dependents_mask) { fd_batch_reference(&dep, NULL); } @@ -267,7 +279,7 @@ batch_reset(struct fd_batch *batch) { DBG("%p", batch); - batch_flush_reset_dependencies(batch, false); + batch_reset_dependencies(batch); batch_reset_resources(batch); batch_fini(batch); @@ -301,7 +313,7 @@ __fd_batch_destroy(struct fd_batch *batch) _mesa_set_destroy(batch->resources, NULL); fd_screen_unlock(ctx->screen); - batch_flush_reset_dependencies(batch, false); + batch_reset_dependencies(batch); debug_assert(batch->dependents_mask == 0); util_copy_framebuffer_state(&batch->framebuffer, NULL); @@ -344,7 +356,7 @@ batch_flush(struct fd_batch *batch) */ fd_batch_finish_queries(batch); - batch_flush_reset_dependencies(batch, true); + batch_flush_dependencies(batch); batch->flushed = true; if (batch == batch->ctx->batch) |