Mesa (master): anv: Split code to add BO dependencies to execbuf.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jan 17 23:12:26 UTC 2019


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

Author: Rafael Antognolli <rafael.antognolli at intel.com>
Date:   Thu Dec 13 08:06:48 2018 -0800

anv: Split code to add BO dependencies to execbuf.

This part of the anv_execbuf_add_bo() code is totally independent of the
BO being added. Let's split it out, so we can reuse it later.

v3: rename to anv_execbuf_add_bo_set (Jason).

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>

---

 src/intel/vulkan/anv_batch_chain.c | 62 ++++++++++++++++++++++++--------------
 1 file changed, 39 insertions(+), 23 deletions(-)

diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c
index ff615bca01..1b92994a05 100644
--- a/src/intel/vulkan/anv_batch_chain.c
+++ b/src/intel/vulkan/anv_batch_chain.c
@@ -1036,6 +1036,12 @@ _compare_bo_handles(const void *_bo1, const void *_bo2)
 }
 
 static VkResult
+anv_execbuf_add_bo_set(struct anv_execbuf *exec,
+                       struct set *deps,
+                       uint32_t extra_flags,
+                       const VkAllocationCallbacks *alloc);
+
+static VkResult
 anv_execbuf_add_bo(struct anv_execbuf *exec,
                    struct anv_bo *bo,
                    struct anv_reloc_list *relocs,
@@ -1124,36 +1130,46 @@ anv_execbuf_add_bo(struct anv_execbuf *exec,
          }
       }
 
-      if (relocs->deps && relocs->deps->entries > 0) {
-         const uint32_t entries = relocs->deps->entries;
-         struct anv_bo **bos =
-            vk_alloc(alloc, entries * sizeof(*bos),
-                     8, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
-         if (bos == NULL)
-            return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
+      return anv_execbuf_add_bo_set(exec, relocs->deps, extra_flags, alloc);
+   }
 
-         struct anv_bo **bo = bos;
-         set_foreach(relocs->deps, entry) {
-            *bo++ = (void *)entry->key;
-         }
+   return VK_SUCCESS;
+}
 
-         qsort(bos, entries, sizeof(struct anv_bo*), _compare_bo_handles);
+/* Add BO dependencies to execbuf */
+static VkResult
+anv_execbuf_add_bo_set(struct anv_execbuf *exec,
+                       struct set *deps,
+                       uint32_t extra_flags,
+                       const VkAllocationCallbacks *alloc)
+{
+   if (!deps || deps->entries <= 0)
+      return VK_SUCCESS;
 
-         VkResult result = VK_SUCCESS;
-         for (bo = bos; bo < bos + entries; bo++) {
-            result = anv_execbuf_add_bo(exec, *bo, NULL, extra_flags, alloc);
-            if (result != VK_SUCCESS)
-               break;
-         }
+   const uint32_t entries = deps->entries;
+   struct anv_bo **bos =
+      vk_alloc(alloc, entries * sizeof(*bos),
+               8, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
+   if (bos == NULL)
+      return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
 
-         vk_free(alloc, bos);
+   struct anv_bo **bo = bos;
+   set_foreach(deps, entry) {
+      *bo++ = (void *)entry->key;
+   }
 
-         if (result != VK_SUCCESS)
-            return result;
-      }
+   qsort(bos, entries, sizeof(struct anv_bo*), _compare_bo_handles);
+
+   VkResult result = VK_SUCCESS;
+   for (bo = bos; bo < bos + entries; bo++) {
+      result = anv_execbuf_add_bo(exec, *bo, NULL, extra_flags, alloc);
+      if (result != VK_SUCCESS)
+         break;
    }
 
-   return VK_SUCCESS;
+   vk_free(alloc, bos);
+
+   return result;
 }
 
 static VkResult




More information about the mesa-commit mailing list