freedreno: Split batch_flush_reset_dependencies()
authorRob Clark <robdclark@chromium.org>
Mon, 15 Feb 2021 20:50:26 +0000 (12:50 -0800)
committerMarge Bot <eric+marge@anholt.net>
Thu, 18 Feb 2021 00:27:49 +0000 (00:27 +0000)
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>

src/gallium/drivers/freedreno/freedreno_batch.c

index ceceb1953deed2a1aecde50441e49487fb6bb186..f27d495149bad111d92d415446cc29b11fd471a2 100644 (file)
@@ -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)