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

Author: Friedrich Vock <[email protected]>
Date:   Wed Jul  5 11:55:44 2023 +0200

radv: Add radv_shader_free_list

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23516>

---

 src/amd/vulkan/radv_private.h |  8 ++++++--
 src/amd/vulkan/radv_shader.c  | 17 +++++++++--------
 2 files changed, 15 insertions(+), 10 deletions(-)

diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index a0c8949c011..38cc0362ee5 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -857,6 +857,11 @@ void radv_queue_finish(struct radv_queue *queue);
 
 enum radeon_ctx_priority radv_get_queue_global_priority(const 
VkDeviceQueueGlobalPriorityCreateInfoKHR *pObj);
 
+struct radv_shader_free_list {
+   uint8_t size_mask;
+   struct list_head free_lists[RADV_SHADER_ALLOC_NUM_FREE_LISTS];
+};
+
 struct radv_shader_dma_submission {
    struct list_head list;
 
@@ -999,8 +1004,7 @@ struct radv_device {
 
    struct list_head shader_arenas;
    unsigned shader_arena_shift;
-   uint8_t shader_free_list_mask;
-   struct list_head shader_free_lists[RADV_SHADER_ALLOC_NUM_FREE_LISTS];
+   struct radv_shader_free_list shader_free_list;
    struct list_head shader_block_obj_pool;
    mtx_t shader_arena_mutex;
 
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index c441f2ac001..8eaadb1b7f3 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -917,16 +917,16 @@ remove_hole(struct radv_device *device, union 
radv_shader_arena_block *hole)
 {
    unsigned size_class = get_size_class(hole->size, false);
    list_del(&hole->freelist);
-   if (list_is_empty(&device->shader_free_lists[size_class]))
-      device->shader_free_list_mask &= ~(1u << size_class);
+   if (list_is_empty(&device->shader_free_list.free_lists[size_class]))
+      device->shader_free_list.size_mask &= ~(1u << size_class);
 }
 
 static void
 add_hole(struct radv_device *device, union radv_shader_arena_block *hole)
 {
    unsigned size_class = get_size_class(hole->size, false);
-   list_addtail(&hole->freelist, &device->shader_free_lists[size_class]);
-   device->shader_free_list_mask |= 1u << size_class;
+   list_addtail(&hole->freelist, 
&device->shader_free_list.free_lists[size_class]);
+   device->shader_free_list.size_mask |= 1u << size_class;
 }
 
 static union radv_shader_arena_block *
@@ -986,11 +986,12 @@ radv_alloc_shader_memory(struct radv_device *device, 
uint32_t size, void *ptr)
     * at the first one available.
     */
    unsigned free_list_mask = BITFIELD_MASK(RADV_SHADER_ALLOC_NUM_FREE_LISTS);
-   unsigned size_class = ffs(device->shader_free_list_mask & (free_list_mask 
<< get_size_class(size, true)));
+   unsigned size_class = ffs(device->shader_free_list.size_mask & 
(free_list_mask << get_size_class(size, true)));
    if (size_class) {
       size_class--;
 
-      list_for_each_entry (union radv_shader_arena_block, hole, 
&device->shader_free_lists[size_class], freelist) {
+      list_for_each_entry (union radv_shader_arena_block, hole, 
&device->shader_free_list.free_lists[size_class],
+                           freelist) {
          if (hole->size < size)
             continue;
 
@@ -1156,12 +1157,12 @@ radv_init_shader_arenas(struct radv_device *device)
 {
    mtx_init(&device->shader_arena_mutex, mtx_plain);
 
-   device->shader_free_list_mask = 0;
+   device->shader_free_list.size_mask = 0;
 
    list_inithead(&device->shader_arenas);
    list_inithead(&device->shader_block_obj_pool);
    for (unsigned i = 0; i < RADV_SHADER_ALLOC_NUM_FREE_LISTS; i++)
-      list_inithead(&device->shader_free_lists[i]);
+      list_inithead(&device->shader_free_list.free_lists[i]);
 }
 
 void

Reply via email to