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

Author: Timur Kristóf <[email protected]>
Date:   Thu Mar 30 18:21:59 2023 +0200

radv/amdgpu: Walk chained CS objects for BO list.

Signed-off-by: Timur Kristóf <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Reviewed-by: Samuel Pitoiset <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22220>

---

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

diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c 
b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
index 4c88061669f..fb56d6fcdb9 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
@@ -878,10 +878,12 @@ radv_amdgpu_get_bo_list(struct radv_amdgpu_winsys *ws, 
struct radeon_cmdbuf **cs
       unsigned total_buffer_count = num_extra_bo;
       num_handles = num_extra_bo;
       for (unsigned i = 0; i < count; ++i) {
-         struct radv_amdgpu_cs *cs = (struct radv_amdgpu_cs *)cs_array[i];
-         total_buffer_count += cs->num_buffers;
-         for (unsigned j = 0; j < cs->num_virtual_buffers; ++j)
-            total_buffer_count += 
radv_amdgpu_winsys_bo(cs->virtual_buffers[j])->bo_count;
+         struct radv_amdgpu_cs *start_cs = (struct radv_amdgpu_cs 
*)cs_array[i];
+         for (struct radv_amdgpu_cs *cs = start_cs; cs; cs = cs->chained_to) {
+            total_buffer_count += cs->num_buffers;
+            for (unsigned j = 0; j < cs->num_virtual_buffers; ++j)
+               total_buffer_count += 
radv_amdgpu_winsys_bo(cs->virtual_buffers[j])->bo_count;
+         }
       }
 
       if (num_extra_cs) {
@@ -904,14 +906,12 @@ radv_amdgpu_get_bo_list(struct radv_amdgpu_winsys *ws, 
struct radeon_cmdbuf **cs
       }
 
       for (unsigned i = 0; i < count + num_extra_cs; ++i) {
-         struct radv_amdgpu_cs *cs;
-
-         if (i >= count)
-            cs = (struct radv_amdgpu_cs *)extra_cs_array[i - count];
-         else
-            cs = (struct radv_amdgpu_cs *)cs_array[i];
+         struct radv_amdgpu_cs *start_cs = i >= count
+                                              ? (struct radv_amdgpu_cs 
*)extra_cs_array[i - count]
+                                              : (struct radv_amdgpu_cs 
*)cs_array[i];
 
-         num_handles = radv_amdgpu_add_cs_to_bo_list(cs, handles, num_handles);
+         for (struct radv_amdgpu_cs *cs = start_cs; cs; cs = cs->chained_to)
+            num_handles = radv_amdgpu_add_cs_to_bo_list(cs, handles, 
num_handles);
       }
 
       unsigned unique_bo_so_far = num_handles;
@@ -975,7 +975,7 @@ radv_amdgpu_winsys_cs_submit_chained(struct radv_amdgpu_ctx 
*ctx, int queue_idx,
    u_rwlock_rdlock(&aws->global_bo_list.lock);
 
    /* Get the BO list. */
-   result = radv_amdgpu_get_bo_list(cs0->ws, cs_array, cs_count, NULL, 0, 
initial_preamble_cs,
+   result = radv_amdgpu_get_bo_list(cs0->ws, cs_array, 1, NULL, 0, 
initial_preamble_cs,
                                     preamble_count, &num_handles, &handles);
    if (result != VK_SUCCESS)
       goto fail;

Reply via email to