Module: Mesa
Branch: main
Commit: 82e2802b7d69c4b64ba40868466aaf23630d949c
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=82e2802b7d69c4b64ba40868466aaf23630d949c

Author: Samuel Pitoiset <[email protected]>
Date:   Wed Jun 21 13:45:01 2023 +0200

radv/amdgpu: add a helper to get a new IB

Signed-off-by: Samuel Pitoiset <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23727>

---

 src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c | 52 +++++++++++++++++----------
 1 file changed, 33 insertions(+), 19 deletions(-)

diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c 
b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
index 97a6a974050..6a697da1cfa 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
@@ -246,6 +246,38 @@ radv_amdgpu_cs_bo_create(struct radv_amdgpu_cs *cs, 
uint32_t ib_size)
                             &cs->ib_buffer);
 }
 
+static VkResult
+radv_amdgpu_cs_get_new_ib(struct radeon_cmdbuf *_cs, uint32_t ib_size)
+{
+   struct radv_amdgpu_cs *cs = radv_amdgpu_cs(_cs);
+   VkResult result;
+
+   result = radv_amdgpu_cs_bo_create(cs, ib_size);
+   if (result != VK_SUCCESS)
+      return result;
+
+   cs->ib_mapped = cs->ws->base.buffer_map(cs->ib_buffer);
+   if (!cs->ib_mapped) {
+      cs->ws->base.buffer_destroy(&cs->ws->base, cs->ib_buffer);
+      return VK_ERROR_OUT_OF_HOST_MEMORY;
+   }
+
+   cs->ib.ib_mc_address = radv_amdgpu_winsys_bo(cs->ib_buffer)->base.va;
+   cs->base.buf = (uint32_t *)cs->ib_mapped;
+   cs->base.cdw = 0;
+   cs->base.reserved_dw = 0;
+   cs->base.max_dw = ib_size / 4 - 4;
+   cs->ib.size = 0;
+   cs->ib.ip_type = cs->hw_ip;
+
+   if (cs->use_ib)
+      cs->ib_size_ptr = &cs->ib.size;
+
+   cs->ws->base.cs_add_buffer(&cs->base, cs->ib_buffer);
+
+   return VK_SUCCESS;
+}
+
 static struct radeon_cmdbuf *
 radv_amdgpu_cs_create(struct radeon_winsys *ws, enum amd_ip_type ip_type, bool 
is_secondary)
 {
@@ -262,30 +294,12 @@ radv_amdgpu_cs_create(struct radeon_winsys *ws, enum 
amd_ip_type ip_type, bool i
 
    cs->use_ib = ring_can_use_ib_bos(cs->ws, ip_type);
 
-   VkResult result = radv_amdgpu_cs_bo_create(cs, ib_size);
+   VkResult result = radv_amdgpu_cs_get_new_ib(&cs->base, ib_size);
    if (result != VK_SUCCESS) {
       free(cs);
       return NULL;
    }
 
-   cs->ib_mapped = ws->buffer_map(cs->ib_buffer);
-   if (!cs->ib_mapped) {
-      ws->buffer_destroy(ws, cs->ib_buffer);
-      free(cs);
-      return NULL;
-   }
-
-   cs->ib.ib_mc_address = radv_amdgpu_winsys_bo(cs->ib_buffer)->base.va;
-   cs->base.buf = (uint32_t *)cs->ib_mapped;
-   cs->base.max_dw = ib_size / 4 - 4;
-   cs->ib.size = 0;
-   cs->ib.ip_type = ip_type;
-
-   if (cs->use_ib)
-      cs->ib_size_ptr = &cs->ib.size;
-
-   ws->cs_add_buffer(&cs->base, cs->ib_buffer);
-
    return &cs->base;
 }
 

Reply via email to