Mesa (master): v3dv: use a bitfield to implement a quick check for job BO tracking

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Apr 15 06:22:25 UTC 2021


Module: Mesa
Branch: master
Commit: b8403192edd267b99f0709cb73fe587c40492c5a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b8403192edd267b99f0709cb73fe587c40492c5a

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Wed Apr 14 09:08:36 2021 +0200

v3dv: use a bitfield to implement a quick check for job BO tracking

Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10210>

---

 src/broadcom/vulkan/v3dv_bo.c         | 1 +
 src/broadcom/vulkan/v3dv_bo.h         | 1 +
 src/broadcom/vulkan/v3dv_cmd_buffer.c | 8 ++++++--
 src/broadcom/vulkan/v3dv_private.h    | 1 +
 4 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/broadcom/vulkan/v3dv_bo.c b/src/broadcom/vulkan/v3dv_bo.c
index 459032990b2..71679ceec27 100644
--- a/src/broadcom/vulkan/v3dv_bo.c
+++ b/src/broadcom/vulkan/v3dv_bo.c
@@ -184,6 +184,7 @@ v3dv_bo_init(struct v3dv_bo *bo,
              bool private)
 {
    bo->handle = handle;
+   bo->handle_bit = 1ull << (handle % 64);
    bo->size = size;
    bo->offset = offset;
    bo->map = NULL;
diff --git a/src/broadcom/vulkan/v3dv_bo.h b/src/broadcom/vulkan/v3dv_bo.h
index fd6754c489f..ab2b8c7356d 100644
--- a/src/broadcom/vulkan/v3dv_bo.h
+++ b/src/broadcom/vulkan/v3dv_bo.h
@@ -30,6 +30,7 @@ struct v3dv_bo {
    struct list_head list_link;
 
    uint32_t handle;
+   uint64_t handle_bit;
    uint32_t size;
    uint32_t offset;
 
diff --git a/src/broadcom/vulkan/v3dv_cmd_buffer.c b/src/broadcom/vulkan/v3dv_cmd_buffer.c
index a4ace79257c..6a4e4476431 100644
--- a/src/broadcom/vulkan/v3dv_cmd_buffer.c
+++ b/src/broadcom/vulkan/v3dv_cmd_buffer.c
@@ -65,11 +65,14 @@ v3dv_job_add_bo(struct v3dv_job *job, struct v3dv_bo *bo)
    if (!bo)
       return;
 
-   if (_mesa_set_search(job->bos, bo))
-      return;
+   if (job->bo_handle_mask & bo->handle_bit) {
+      if (_mesa_set_search(job->bos, bo))
+         return;
+   }
 
    _mesa_set_add(job->bos, bo);
    job->bo_count++;
+   job->bo_handle_mask |= bo->handle_bit;
 }
 
 void
@@ -78,6 +81,7 @@ v3dv_job_add_bo_unchecked(struct v3dv_job *job, struct v3dv_bo *bo)
    assert(bo);
    _mesa_set_add(job->bos, bo);
    job->bo_count++;
+   job->bo_handle_mask |= bo->handle_bit;
 }
 
 static void
diff --git a/src/broadcom/vulkan/v3dv_private.h b/src/broadcom/vulkan/v3dv_private.h
index 67cbc244d60..5a9f0e2dac9 100644
--- a/src/broadcom/vulkan/v3dv_private.h
+++ b/src/broadcom/vulkan/v3dv_private.h
@@ -924,6 +924,7 @@ struct v3dv_job {
     */
    struct set *bos;
    uint32_t bo_count;
+   uint64_t bo_handle_mask;
 
    struct v3dv_bo *tile_alloc;
    struct v3dv_bo *tile_state;



More information about the mesa-commit mailing list