summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Clark <robdclark@chromium.org>2021-02-15 12:50:26 -0800
committerMarge Bot <eric+marge@anholt.net>2021-02-18 00:27:49 +0000
commite7e19c6a4f433186b134ca796143c48c4c4f7792 (patch)
tree6e32dae9afd1e0be2263bca08d6191eb6dd32c56
parent8a54c4a335a45fb5781ef7ffe7de4471aa7ce180 (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.c26
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)