Mesa (master): panfrost: Make sure we always add a reader -> write dependency when needed
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Dec 9 16:28:30 UTC 2020
Module: Mesa
Branch: master
Commit: 387221e4f2b9339633f84d8b91774ddd302ed60a
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=387221e4f2b9339633f84d8b91774ddd302ed60a
Author: Boris Brezillon <boris.brezillon at collabora.com>
Date: Mon Nov 30 10:23:32 2020 +0100
panfrost: Make sure we always add a reader -> write dependency when needed
We shouldn't reset the ->writer field when a reader comes in because we
want subsequent readers to have a dependency on the writer too. Let's
add a new field encoding the last access type and use it to replace the
writer != NULL test.
Reported-by: Roman Elshin
Fixes: c6ebff3ecdde ("panfrost: Remove panfrost_bo_access type")
Signed-off-by: Boris Brezillon <boris.brezillon at collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7831>
---
src/gallium/drivers/panfrost/pan_job.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c
index e226b4cc92a..9f215f2b743 100644
--- a/src/gallium/drivers/panfrost/pan_job.c
+++ b/src/gallium/drivers/panfrost/pan_job.c
@@ -46,7 +46,7 @@
* better GPU utilization.
*
* Each accessed BO has a corresponding entry in the ->accessed_bos hash table.
- * A BO is either being written or read at any time (see if writer != NULL).
+ * A BO is either being written or read at any time (see last_is_write).
* When the last access is a write, the batch writing the BO might have read
* dependencies (readers that have not been executed yet and want to read the
* previous BO content), and when the last access is a read, all readers might
@@ -60,6 +60,7 @@
struct panfrost_bo_access {
struct util_dynarray readers;
struct panfrost_batch_fence *writer;
+ bool last_is_write;
};
static struct panfrost_batch_fence *
@@ -399,7 +400,7 @@ panfrost_batch_update_bo_access(struct panfrost_batch *batch,
entry = _mesa_hash_table_search(ctx->accessed_bos, bo);
access = entry ? entry->data : NULL;
if (access) {
- old_writes = access->writer != NULL;
+ old_writes = access->last_is_write;
} else {
access = rzalloc(ctx, struct panfrost_bo_access);
util_dynarray_init(&access->readers, access);
@@ -479,7 +480,6 @@ panfrost_batch_update_bo_access(struct panfrost_batch *batch,
util_dynarray_append(&access->readers,
struct panfrost_batch_fence *,
batch->out_sync);
- access->writer = NULL;
}
} else {
/* We already accessed this BO before, so we should already be
@@ -504,6 +504,8 @@ panfrost_batch_update_bo_access(struct panfrost_batch *batch,
if (access->writer)
panfrost_batch_add_dep(batch, access->writer);
}
+
+ access->last_is_write = writes;
}
void
More information about the mesa-commit
mailing list