radv/winsys: remove the radv_amdgpu_winsys_bo::ws indirection
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Wed, 3 Feb 2021 13:11:49 +0000 (14:11 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Mon, 8 Feb 2021 07:45:38 +0000 (08:45 +0100)
This saves a 64-bit pointer from radv_amdgpu_winsys_bo and it's
also common to pass a winsys pointer as the first parameter.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8859>

15 files changed:
src/amd/vulkan/radv_android.c
src/amd/vulkan/radv_cmd_buffer.c
src/amd/vulkan/radv_debug.c
src/amd/vulkan/radv_descriptor_set.c
src/amd/vulkan/radv_device.c
src/amd/vulkan/radv_image.c
src/amd/vulkan/radv_query.c
src/amd/vulkan/radv_radeon_winsys.h
src/amd/vulkan/radv_shader.c
src/amd/vulkan/radv_sqtt.c
src/amd/vulkan/si_cmd_buffer.c
src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h
src/amd/vulkan/winsys/amdgpu/radv_amdgpu_cs.c
src/amd/vulkan/winsys/null/radv_null_bo.c

index abc8b86..76ab39c 100644 (file)
@@ -169,7 +169,7 @@ radv_image_from_gralloc(VkDevice device_h,
                return result;
 
        struct radeon_bo_metadata md;
-       device->ws->buffer_get_metadata(radv_device_memory_from_handle(memory_h)->bo, &md);
+       device->ws->buffer_get_metadata(device->ws, radv_device_memory_from_handle(memory_h)->bo, &md);
 
        VkImageCreateInfo updated_base_info = *base_info;
 
@@ -742,7 +742,7 @@ radv_import_ahb_memory(struct radv_device *device,
 
        if (mem->image) {
                struct radeon_bo_metadata metadata;
-               device->ws->buffer_get_metadata(mem->bo, &metadata);
+               device->ws->buffer_get_metadata(device->ws, mem->bo, &metadata);
 
                struct radv_image_create_info create_info = {
                        .no_metadata_planes = true,
@@ -751,19 +751,19 @@ radv_import_ahb_memory(struct radv_device *device,
 
                VkResult result = radv_image_create_layout(device, create_info, NULL, mem->image);
                if (result != VK_SUCCESS) {
-                       device->ws->buffer_destroy(mem->bo);
+                       device->ws->buffer_destroy(device->ws, mem->bo);
                        mem->bo = NULL;
                        return result;
                }
 
                if (alloc_size < mem->image->size) {
-                       device->ws->buffer_destroy(mem->bo);
+                       device->ws->buffer_destroy(device->ws, mem->bo);
                        mem->bo = NULL;
                        return VK_ERROR_INVALID_EXTERNAL_HANDLE;
                }
        } else if (mem->buffer) {
                if (alloc_size < mem->buffer->size) {
-                       device->ws->buffer_destroy(mem->bo);
+                       device->ws->buffer_destroy(device->ws, mem->bo);
                        mem->bo = NULL;
                        return VK_ERROR_INVALID_EXTERNAL_HANDLE;
                }
index a1bb8c5..c3af2b0 100644 (file)
@@ -358,13 +358,13 @@ radv_destroy_cmd_buffer(struct radv_cmd_buffer *cmd_buffer)
 
        list_for_each_entry_safe(struct radv_cmd_buffer_upload, up,
                                 &cmd_buffer->upload.list, list) {
-               cmd_buffer->device->ws->buffer_destroy(up->upload_bo);
+               cmd_buffer->device->ws->buffer_destroy(cmd_buffer->device->ws, up->upload_bo);
                list_del(&up->list);
                free(up);
        }
 
        if (cmd_buffer->upload.upload_bo)
-               cmd_buffer->device->ws->buffer_destroy(cmd_buffer->upload.upload_bo);
+               cmd_buffer->device->ws->buffer_destroy(cmd_buffer->device->ws, cmd_buffer->upload.upload_bo);
 
        if (cmd_buffer->cs)
                cmd_buffer->device->ws->cs_destroy(cmd_buffer->cs);
@@ -421,7 +421,7 @@ radv_reset_cmd_buffer(struct radv_cmd_buffer *cmd_buffer)
 
        list_for_each_entry_safe(struct radv_cmd_buffer_upload, up,
                                 &cmd_buffer->upload.list, list) {
-               cmd_buffer->device->ws->buffer_destroy(up->upload_bo);
+               cmd_buffer->device->ws->buffer_destroy(cmd_buffer->device->ws, up->upload_bo);
                list_del(&up->list);
                free(up);
        }
@@ -525,7 +525,7 @@ radv_cmd_buffer_resize_upload_buf(struct radv_cmd_buffer *cmd_buffer,
 
                if (!upload) {
                        cmd_buffer->record_result = VK_ERROR_OUT_OF_HOST_MEMORY;
-                       device->ws->buffer_destroy(bo);
+                       device->ws->buffer_destroy(device->ws, bo);
                        return false;
                }
 
index 6975159..c1b1f52 100644 (file)
@@ -873,7 +873,7 @@ radv_trap_handler_finish(struct radv_device *device)
                radv_shader_variant_destroy(device, device->trap_handler_shader);
 
        if (unlikely(device->tma_bo))
-               ws->buffer_destroy(device->tma_bo);
+               ws->buffer_destroy(ws, device->tma_bo);
 }
 
 static struct radv_shader_variant *
index a7dd239..8a07ea9 100644 (file)
@@ -710,7 +710,7 @@ static void radv_destroy_descriptor_pool(struct radv_device *device,
        }
 
        if (pool->bo)
-               device->ws->buffer_destroy(pool->bo);
+               device->ws->buffer_destroy(device->ws, pool->bo);
        if (pool->host_bo)
                vk_free2(&device->vk.alloc, pAllocator, pool->host_bo);
 
index 15a509a..fe4cba2 100644 (file)
@@ -2426,21 +2426,21 @@ radv_queue_finish(struct radv_queue *queue)
        if (queue->continue_preamble_cs)
                queue->device->ws->cs_destroy(queue->continue_preamble_cs);
        if (queue->descriptor_bo)
-               queue->device->ws->buffer_destroy(queue->descriptor_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, queue->descriptor_bo);
        if (queue->scratch_bo)
-               queue->device->ws->buffer_destroy(queue->scratch_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, queue->scratch_bo);
        if (queue->esgs_ring_bo)
-               queue->device->ws->buffer_destroy(queue->esgs_ring_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, queue->esgs_ring_bo);
        if (queue->gsvs_ring_bo)
-               queue->device->ws->buffer_destroy(queue->gsvs_ring_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, queue->gsvs_ring_bo);
        if (queue->tess_rings_bo)
-               queue->device->ws->buffer_destroy(queue->tess_rings_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, queue->tess_rings_bo);
        if (queue->gds_bo)
-               queue->device->ws->buffer_destroy(queue->gds_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, queue->gds_bo);
        if (queue->gds_oa_bo)
-               queue->device->ws->buffer_destroy(queue->gds_oa_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, queue->gds_oa_bo);
        if (queue->compute_scratch_bo)
-               queue->device->ws->buffer_destroy(queue->compute_scratch_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, queue->compute_scratch_bo);
 
        vk_object_base_finish(&queue->base);
 }
@@ -2594,7 +2594,7 @@ static VkResult radv_device_init_border_color(struct radv_device *device)
 static void radv_device_finish_border_color(struct radv_device *device)
 {
        if (device->border_color_data.bo) {
-               device->ws->buffer_destroy(device->border_color_data.bo);
+               device->ws->buffer_destroy(device->ws, device->border_color_data.bo);
 
                mtx_destroy(&device->border_color_data.mutex);
        }
@@ -2966,10 +2966,10 @@ fail:
        radv_trap_handler_finish(device);
 
        if (device->trace_bo)
-               device->ws->buffer_destroy(device->trace_bo);
+               device->ws->buffer_destroy(device->ws, device->trace_bo);
 
        if (device->gfx_init)
-               device->ws->buffer_destroy(device->gfx_init);
+               device->ws->buffer_destroy(device->ws, device->gfx_init);
 
        radv_device_finish_border_color(device);
 
@@ -2995,10 +2995,10 @@ void radv_DestroyDevice(
                return;
 
        if (device->trace_bo)
-               device->ws->buffer_destroy(device->trace_bo);
+               device->ws->buffer_destroy(device->ws, device->trace_bo);
 
        if (device->gfx_init)
-               device->ws->buffer_destroy(device->gfx_init);
+               device->ws->buffer_destroy(device->ws, device->gfx_init);
 
        radv_device_finish_border_color(device);
 
@@ -3904,7 +3904,7 @@ radv_get_preamble_cs(struct radv_queue *queue,
 
        if (scratch_bo != queue->scratch_bo) {
                if (queue->scratch_bo)
-                       queue->device->ws->buffer_destroy(queue->scratch_bo);
+                       queue->device->ws->buffer_destroy(queue->device->ws, queue->scratch_bo);
                queue->scratch_bo = scratch_bo;
        }
        queue->scratch_size_per_wave = scratch_size_per_wave;
@@ -3912,7 +3912,7 @@ radv_get_preamble_cs(struct radv_queue *queue,
 
        if (compute_scratch_bo != queue->compute_scratch_bo) {
                if (queue->compute_scratch_bo)
-                       queue->device->ws->buffer_destroy(queue->compute_scratch_bo);
+                       queue->device->ws->buffer_destroy(queue->device->ws, queue->compute_scratch_bo);
                queue->compute_scratch_bo = compute_scratch_bo;
        }
        queue->compute_scratch_size_per_wave = compute_scratch_size_per_wave;
@@ -3920,14 +3920,14 @@ radv_get_preamble_cs(struct radv_queue *queue,
 
        if (esgs_ring_bo != queue->esgs_ring_bo) {
                if (queue->esgs_ring_bo)
-                       queue->device->ws->buffer_destroy(queue->esgs_ring_bo);
+                       queue->device->ws->buffer_destroy(queue->device->ws, queue->esgs_ring_bo);
                queue->esgs_ring_bo = esgs_ring_bo;
                queue->esgs_ring_size = esgs_ring_size;
        }
 
        if (gsvs_ring_bo != queue->gsvs_ring_bo) {
                if (queue->gsvs_ring_bo)
-                       queue->device->ws->buffer_destroy(queue->gsvs_ring_bo);
+                       queue->device->ws->buffer_destroy(queue->device->ws, queue->gsvs_ring_bo);
                queue->gsvs_ring_bo = gsvs_ring_bo;
                queue->gsvs_ring_size = gsvs_ring_size;
        }
@@ -3949,7 +3949,7 @@ radv_get_preamble_cs(struct radv_queue *queue,
 
        if (descriptor_bo != queue->descriptor_bo) {
                if (queue->descriptor_bo)
-                       queue->device->ws->buffer_destroy(queue->descriptor_bo);
+                       queue->device->ws->buffer_destroy(queue->device->ws, queue->descriptor_bo);
 
                queue->descriptor_bo = descriptor_bo;
        }
@@ -3968,21 +3968,21 @@ fail:
                if (dest_cs[i])
                        queue->device->ws->cs_destroy(dest_cs[i]);
        if (descriptor_bo && descriptor_bo != queue->descriptor_bo)
-               queue->device->ws->buffer_destroy(descriptor_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, descriptor_bo);
        if (scratch_bo && scratch_bo != queue->scratch_bo)
-               queue->device->ws->buffer_destroy(scratch_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, scratch_bo);
        if (compute_scratch_bo && compute_scratch_bo != queue->compute_scratch_bo)
-               queue->device->ws->buffer_destroy(compute_scratch_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, compute_scratch_bo);
        if (esgs_ring_bo && esgs_ring_bo != queue->esgs_ring_bo)
-               queue->device->ws->buffer_destroy(esgs_ring_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, esgs_ring_bo);
        if (gsvs_ring_bo && gsvs_ring_bo != queue->gsvs_ring_bo)
-               queue->device->ws->buffer_destroy(gsvs_ring_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, gsvs_ring_bo);
        if (tess_rings_bo && tess_rings_bo != queue->tess_rings_bo)
-               queue->device->ws->buffer_destroy(tess_rings_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, tess_rings_bo);
        if (gds_bo && gds_bo != queue->gds_bo)
-               queue->device->ws->buffer_destroy(gds_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, gds_bo);
        if (gds_oa_bo && gds_oa_bo != queue->gds_oa_bo)
-               queue->device->ws->buffer_destroy(gds_oa_bo);
+               queue->device->ws->buffer_destroy(queue->device->ws, gds_oa_bo);
 
        return vk_error(queue->device->instance, VK_ERROR_OUT_OF_DEVICE_MEMORY);
 }
@@ -4199,7 +4199,8 @@ radv_sparse_buffer_bind_memory(struct radv_device *device,
                if (bind->pBinds[i].memory != VK_NULL_HANDLE)
                        mem = radv_device_memory_from_handle(bind->pBinds[i].memory);
 
-               result = device->ws->buffer_virtual_bind(buffer->bo,
+               result = device->ws->buffer_virtual_bind(device->ws,
+                                                        buffer->bo,
                                                         bind->pBinds[i].resourceOffset,
                                                         bind->pBinds[i].size,
                                                         mem ? mem->bo : NULL,
@@ -4224,7 +4225,8 @@ radv_sparse_image_opaque_bind_memory(struct radv_device *device,
                if (bind->pBinds[i].memory != VK_NULL_HANDLE)
                        mem = radv_device_memory_from_handle(bind->pBinds[i].memory);
 
-               result = device->ws->buffer_virtual_bind(image->bo,
+               result = device->ws->buffer_virtual_bind(device->ws,
+                                                        image->bo,
                                                         bind->pBinds[i].resourceOffset,
                                                         bind->pBinds[i].size,
                                                         mem ? mem->bo : NULL,
@@ -4287,7 +4289,8 @@ radv_sparse_image_bind_memory(struct radv_device *device,
                                                               surface->prt_tile_height);
 
                        uint32_t size = aligned_extent_width * aligned_extent_height * bs;
-                       result = device->ws->buffer_virtual_bind(image->bo,
+                       result = device->ws->buffer_virtual_bind(device->ws,
+                                                                image->bo,
                                                                 offset,
                                                                 size,
                                                                 mem ? mem->bo : NULL,
@@ -4299,7 +4302,8 @@ radv_sparse_image_bind_memory(struct radv_device *device,
                        uint32_t mem_increment = aligned_extent_width * bs;
                        uint32_t size = mem_increment * surface->prt_tile_height;
                        for (unsigned y = 0; y < bind_extent.height; y += surface->prt_tile_height) {
-                               result = device->ws->buffer_virtual_bind(image->bo,
+                               result = device->ws->buffer_virtual_bind(device->ws,
+                                                                        image->bo,
                                                                         offset + img_increment * y,
                                                                         size,
                                                                         mem ? mem->bo : NULL,
@@ -5179,7 +5183,7 @@ bool radv_get_memory_fd(struct radv_device *device,
        if (memory->image && memory->image->offset == 0) {
                struct radeon_bo_metadata metadata;
                radv_init_metadata(device, memory->image, &metadata);
-               device->ws->buffer_set_metadata(memory->bo, &metadata);
+               device->ws->buffer_set_metadata(device->ws, memory->bo, &metadata);
        }
 
        return device->ws->buffer_get_fd(device->ws, memory->bo,
@@ -5208,7 +5212,7 @@ radv_free_memory(struct radv_device *device,
                }
 
                radv_bo_list_remove(device, mem->bo);
-               device->ws->buffer_destroy(mem->bo);
+               device->ws->buffer_destroy(device->ws, mem->bo);
                mem->bo = NULL;
        }
 
@@ -5313,7 +5317,7 @@ static VkResult radv_alloc_memory(struct radv_device *device,
                    mem->image->info.samples == 1 &&
                    mem->image->tiling != VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT) {
                        struct radeon_bo_metadata metadata;
-                       device->ws->buffer_get_metadata(mem->bo, &metadata);
+                       device->ws->buffer_get_metadata(device->ws, mem->bo, &metadata);
 
                        struct radv_image_create_info create_info = {
                                .no_metadata_planes = true,
@@ -5326,7 +5330,7 @@ static VkResult radv_alloc_memory(struct radv_device *device,
                        result = radv_image_create_layout(device, create_info, NULL,
                                                          mem->image);
                        if (result != VK_SUCCESS) {
-                               device->ws->buffer_destroy(mem->bo);
+                               device->ws->buffer_destroy(device->ws, mem->bo);
                                goto fail;
                        }
                }
@@ -6456,7 +6460,7 @@ static void radv_destroy_event(struct radv_device *device,
                                struct radv_event *event)
 {
        if (event->bo)
-               device->ws->buffer_destroy(event->bo);
+               device->ws->buffer_destroy(device->ws, event->bo);
 
        vk_object_base_finish(&event->base);
        vk_free2(&device->vk.alloc, pAllocator, event);
@@ -6553,7 +6557,7 @@ radv_destroy_buffer(struct radv_device *device,
                    struct radv_buffer *buffer)
 {
        if ((buffer->flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) && buffer->bo)
-               device->ws->buffer_destroy(buffer->bo);
+               device->ws->buffer_destroy(device->ws, buffer->bo);
 
        vk_object_base_finish(&buffer->base);
        vk_free2(&device->vk.alloc, pAllocator, buffer);
index f03e6bb..c365495 100644 (file)
@@ -1447,7 +1447,7 @@ radv_destroy_image(struct radv_device *device,
                   struct radv_image *image)
 {
        if ((image->flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT) && image->bo)
-               device->ws->buffer_destroy(image->bo);
+               device->ws->buffer_destroy(device->ws, image->bo);
 
        if (image->owned_memory != VK_NULL_HANDLE) {
                RADV_FROM_HANDLE(radv_device_memory, mem, image->owned_memory);
index a2c062c..cef6c90 100644 (file)
@@ -1006,7 +1006,7 @@ radv_destroy_query_pool(struct radv_device *device,
                        struct radv_query_pool *pool)
 {
        if (pool->bo)
-               device->ws->buffer_destroy(pool->bo);
+               device->ws->buffer_destroy(device->ws, pool->bo);
        vk_object_base_finish(&pool->base);
        vk_free2(&device->vk.alloc, pAllocator, pool);
 }
index 2350efa..29437d9 100644 (file)
@@ -231,7 +231,8 @@ struct radeon_winsys {
                                                  enum radeon_bo_flag flags,
                                                  unsigned priority);
 
-       void (*buffer_destroy)(struct radeon_winsys_bo *bo);
+       void (*buffer_destroy)(struct radeon_winsys *ws,
+                              struct radeon_winsys_bo *bo);
        void *(*buffer_map)(struct radeon_winsys_bo *bo);
 
        struct radeon_winsys_bo *(*buffer_from_ptr)(struct radeon_winsys *ws,
@@ -254,12 +255,15 @@ struct radeon_winsys {
 
        void (*buffer_unmap)(struct radeon_winsys_bo *bo);
 
-       void (*buffer_set_metadata)(struct radeon_winsys_bo *bo,
+       void (*buffer_set_metadata)(struct radeon_winsys *ws,
+                                   struct radeon_winsys_bo *bo,
                                    struct radeon_bo_metadata *md);
-       void (*buffer_get_metadata)(struct radeon_winsys_bo *bo,
+       void (*buffer_get_metadata)(struct radeon_winsys *ws,
+                                   struct radeon_winsys_bo *bo,
                                    struct radeon_bo_metadata *md);
 
-       VkResult (*buffer_virtual_bind)(struct radeon_winsys_bo *parent,
+       VkResult (*buffer_virtual_bind)(struct radeon_winsys *ws,
+                                       struct radeon_winsys_bo *parent,
                                        uint64_t offset, uint64_t size,
                                        struct radeon_winsys_bo *bo, uint64_t bo_offset);
        VkResult (*ctx_create)(struct radeon_winsys *ws,
index c25af07..2c64c9a 100644 (file)
@@ -857,7 +857,7 @@ radv_alloc_shader_memory(struct radv_device *device,
 
        slab->ptr = (char*)device->ws->buffer_map(slab->bo);
        if (!slab->ptr) {
-               device->ws->buffer_destroy(slab->bo);
+               device->ws->buffer_destroy(device->ws, slab->bo);
                free(slab);
                return NULL;
        }
@@ -878,7 +878,7 @@ void
 radv_destroy_shader_slabs(struct radv_device *device)
 {
        list_for_each_entry_safe(struct radv_shader_slab, slab, &device->shader_slabs, slabs) {
-               device->ws->buffer_destroy(slab->bo);
+               device->ws->buffer_destroy(device->ws, slab->bo);
                free(slab);
        }
        mtx_destroy(&device->shader_slab_mutex);
index abd0a62..4f1c5bc 100644 (file)
@@ -539,7 +539,7 @@ radv_thread_trace_finish(struct radv_device *device)
        struct radeon_winsys *ws = device->ws;
 
        if (unlikely(device->thread_trace.bo))
-               ws->buffer_destroy(device->thread_trace.bo);
+               ws->buffer_destroy(ws, device->thread_trace.bo);
 
        for (unsigned i = 0; i < 2; i++) {
                if (device->thread_trace.start_cs[i])
index fc613fe..a103d15 100644 (file)
@@ -638,7 +638,7 @@ cik_create_gfx_config(struct radv_device *device)
 
        void *map = device->ws->buffer_map(device->gfx_init);
        if (!map) {
-               device->ws->buffer_destroy(device->gfx_init);
+               device->ws->buffer_destroy(device->ws, device->gfx_init);
                device->gfx_init = NULL;
                goto fail;
        }
index 0491918..e5060b2 100644 (file)
@@ -41,7 +41,8 @@
 #include "util/u_math.h"
 #include "util/os_time.h"
 
-static void radv_amdgpu_winsys_bo_destroy(struct radeon_winsys_bo *_bo);
+static void radv_amdgpu_winsys_bo_destroy(struct radeon_winsys *_ws,
+                                         struct radeon_winsys_bo *_bo);
 
 static int
 radv_amdgpu_bo_va_op(struct radv_amdgpu_winsys *ws,
@@ -73,21 +74,22 @@ radv_amdgpu_bo_va_op(struct radv_amdgpu_winsys *ws,
 }
 
 static void
-radv_amdgpu_winsys_virtual_map(struct radv_amdgpu_winsys_bo *bo,
+radv_amdgpu_winsys_virtual_map(struct radv_amdgpu_winsys *ws,
+                              struct radv_amdgpu_winsys_bo *bo,
                                const struct radv_amdgpu_map_range *range)
 {
        uint64_t internal_flags = 0;
        assert(range->size);
 
        if (!range->bo) {
-               if (!bo->ws->info.has_sparse_vm_mappings)
+               if (!ws->info.has_sparse_vm_mappings)
                        return;
 
                internal_flags |= AMDGPU_VM_PAGE_PRT;
        } else
                p_atomic_inc(&range->bo->ref_count);
 
-       int r = radv_amdgpu_bo_va_op(bo->ws, range->bo ? range->bo->bo : NULL,
+       int r = radv_amdgpu_bo_va_op(ws, range->bo ? range->bo->bo : NULL,
                                     range->bo_offset, range->size,
                                     range->offset + bo->base.va, 0,
                                     internal_flags, AMDGPU_VA_OP_MAP);
@@ -96,14 +98,15 @@ radv_amdgpu_winsys_virtual_map(struct radv_amdgpu_winsys_bo *bo,
 }
 
 static void
-radv_amdgpu_winsys_virtual_unmap(struct radv_amdgpu_winsys_bo *bo,
+radv_amdgpu_winsys_virtual_unmap(struct radv_amdgpu_winsys *ws,
+                                struct radv_amdgpu_winsys_bo *bo,
                                  const struct radv_amdgpu_map_range *range)
 {
        uint64_t internal_flags = 0;
        assert(range->size);
 
        if (!range->bo) {
-               if(!bo->ws->info.has_sparse_vm_mappings)
+               if(!ws->info.has_sparse_vm_mappings)
                        return;
 
                /* Even though this is an unmap, if we don't set this flag,
@@ -111,7 +114,7 @@ radv_amdgpu_winsys_virtual_unmap(struct radv_amdgpu_winsys_bo *bo,
                internal_flags |= AMDGPU_VM_PAGE_PRT;
        }
 
-       int r = radv_amdgpu_bo_va_op(bo->ws, range->bo ? range->bo->bo : NULL,
+       int r = radv_amdgpu_bo_va_op(ws, range->bo ? range->bo->bo : NULL,
                                     range->bo_offset, range->size,
                                     range->offset + bo->base.va, 0, internal_flags,
                                     AMDGPU_VA_OP_UNMAP);
@@ -119,7 +122,7 @@ radv_amdgpu_winsys_virtual_unmap(struct radv_amdgpu_winsys_bo *bo,
                abort();
 
        if (range->bo)
-               radv_amdgpu_winsys_bo_destroy((struct radeon_winsys_bo *)range->bo);
+               ws->base.buffer_destroy(&ws->base, (struct radeon_winsys_bo *)range->bo);
 }
 
 static int bo_comparator(const void *ap, const void *bp) {
@@ -159,10 +162,12 @@ radv_amdgpu_winsys_rebuild_bo_list(struct radv_amdgpu_winsys_bo *bo)
 }
 
 static VkResult
-radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys_bo *_parent,
+radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys *_ws,
+                                  struct radeon_winsys_bo *_parent,
                                    uint64_t offset, uint64_t size,
                                    struct radeon_winsys_bo *_bo, uint64_t bo_offset)
 {
+       struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws);
        struct radv_amdgpu_winsys_bo *parent = (struct radv_amdgpu_winsys_bo *)_parent;
        struct radv_amdgpu_winsys_bo *bo = (struct radv_amdgpu_winsys_bo*)_bo;
        int range_count_delta, new_idx;
@@ -227,7 +232,7 @@ radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys_bo *_parent,
 
        /* Any range between first and last is going to be entirely covered by the new range so just unmap them. */
        for (int i = first + 1; i < last; ++i)
-               radv_amdgpu_winsys_virtual_unmap(parent, parent->ranges + i);
+               radv_amdgpu_winsys_virtual_unmap(ws, parent, parent->ranges + i);
 
        /* If the first/last range are not left alone we unmap then and optionally map
         * them again after modifications. Not that this implicitly can do the splitting
@@ -236,24 +241,24 @@ radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys_bo *_parent,
        new_last = parent->ranges[last];
 
        if (parent->ranges[first].offset + parent->ranges[first].size > offset || remove_first) {
-               radv_amdgpu_winsys_virtual_unmap(parent, parent->ranges + first);
+               radv_amdgpu_winsys_virtual_unmap(ws, parent, parent->ranges + first);
                unmapped_first = true;
 
                if (!remove_first) {
                        new_first.size = offset - new_first.offset;
-                       radv_amdgpu_winsys_virtual_map(parent, &new_first);
+                       radv_amdgpu_winsys_virtual_map(ws, parent, &new_first);
                }
        }
 
        if (parent->ranges[last].offset < offset + size || remove_last) {
                if (first != last || !unmapped_first)
-                       radv_amdgpu_winsys_virtual_unmap(parent, parent->ranges + last);
+                       radv_amdgpu_winsys_virtual_unmap(ws, parent, parent->ranges + last);
 
                if (!remove_last) {
                        new_last.size -= offset + size - new_last.offset;
                        new_last.bo_offset += (offset + size - new_last.offset);
                        new_last.offset = offset + size;
-                       radv_amdgpu_winsys_virtual_map(parent, &new_last);
+                       radv_amdgpu_winsys_virtual_map(ws, parent, &new_last);
                }
        }
 
@@ -273,7 +278,7 @@ radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys_bo *_parent,
        parent->ranges[new_idx].bo = bo;
        parent->ranges[new_idx].bo_offset = bo_offset;
 
-       radv_amdgpu_winsys_virtual_map(parent, parent->ranges + new_idx);
+       radv_amdgpu_winsys_virtual_map(ws, parent, parent->ranges + new_idx);
 
        parent->range_count += range_count_delta;
 
@@ -293,13 +298,13 @@ struct radv_amdgpu_winsys_bo_log {
        uint8_t destroyed : 1;
 };
 
-static void radv_amdgpu_log_bo(struct radv_amdgpu_winsys_bo *bo,
+static void radv_amdgpu_log_bo(struct radv_amdgpu_winsys *ws,
+                              struct radv_amdgpu_winsys_bo *bo,
                               bool destroyed)
 {
-       struct radv_amdgpu_winsys *ws = bo->ws;
        struct radv_amdgpu_winsys_bo_log *bo_log = NULL;
 
-       if (!bo->ws->debug_log_bos)
+       if (!ws->debug_log_bos)
                return;
 
        bo_log = malloc(sizeof(*bo_log));
@@ -317,10 +322,9 @@ static void radv_amdgpu_log_bo(struct radv_amdgpu_winsys_bo *bo,
        u_rwlock_wrunlock(&ws->log_bo_list_lock);
 }
 
-static int radv_amdgpu_global_bo_list_add(struct radv_amdgpu_winsys_bo *bo)
+static int radv_amdgpu_global_bo_list_add(struct radv_amdgpu_winsys *ws,
+                                         struct radv_amdgpu_winsys_bo *bo)
 {
-       struct radv_amdgpu_winsys *ws = bo->ws;
-
        if (!ws->debug_all_bos)
                return VK_SUCCESS;
 
@@ -343,10 +347,9 @@ static int radv_amdgpu_global_bo_list_add(struct radv_amdgpu_winsys_bo *bo)
        return VK_SUCCESS;
 }
 
-static void radv_amdgpu_global_bo_list_del(struct radv_amdgpu_winsys_bo *bo)
+static void radv_amdgpu_global_bo_list_del(struct radv_amdgpu_winsys *ws,
+                                          struct radv_amdgpu_winsys_bo *bo)
 {
-       struct radv_amdgpu_winsys *ws = bo->ws;
-
        if (!ws->debug_all_bos)
                return;
 
@@ -361,25 +364,26 @@ static void radv_amdgpu_global_bo_list_del(struct radv_amdgpu_winsys_bo *bo)
        u_rwlock_wrunlock(&ws->global_bo_list.lock);
 }
 
-static void radv_amdgpu_winsys_bo_destroy(struct radeon_winsys_bo *_bo)
+static void radv_amdgpu_winsys_bo_destroy(struct radeon_winsys *_ws,
+                                         struct radeon_winsys_bo *_bo)
 {
+       struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws);
        struct radv_amdgpu_winsys_bo *bo = radv_amdgpu_winsys_bo(_bo);
-       struct radv_amdgpu_winsys *ws = bo->ws;
 
        if (p_atomic_dec_return(&bo->ref_count))
                return;
 
-       radv_amdgpu_log_bo(bo, true);
+       radv_amdgpu_log_bo(ws, bo, true);
 
        if (bo->is_virtual) {
                for (uint32_t i = 0; i < bo->range_count; ++i) {
-                       radv_amdgpu_winsys_virtual_unmap(bo, bo->ranges + i);
+                       radv_amdgpu_winsys_virtual_unmap(ws, bo, bo->ranges + i);
                }
                free(bo->bos);
                free(bo->ranges);
        } else {
-               radv_amdgpu_global_bo_list_del(bo);
-               radv_amdgpu_bo_va_op(bo->ws, bo->bo, 0, bo->size, bo->base.va,
+               radv_amdgpu_global_bo_list_del(ws, bo);
+               radv_amdgpu_bo_va_op(ws, bo->bo, 0, bo->size, bo->base.va,
                                     0, 0, AMDGPU_VA_OP_UNMAP);
                amdgpu_bo_free(bo->bo);
        }
@@ -437,7 +441,6 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
        bo->base.va = va;
        bo->va_handle = va_handle;
        bo->size = size;
-       bo->ws = ws;
        bo->is_virtual = !!(flags & RADEON_FLAG_VIRTUAL);
        bo->ref_count = 1;
 
@@ -455,8 +458,8 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
                bo->ranges[0].bo = NULL;
                bo->ranges[0].bo_offset = 0;
 
-               radv_amdgpu_winsys_virtual_map(bo, bo->ranges);
-               radv_amdgpu_log_bo(bo, false);
+               radv_amdgpu_winsys_virtual_map(ws, bo, bo->ranges);
+               radv_amdgpu_log_bo(ws, bo, false);
 
                return (struct radeon_winsys_bo *)bo;
        }
@@ -559,8 +562,8 @@ radv_amdgpu_winsys_bo_create(struct radeon_winsys *_ws,
                p_atomic_add(&ws->allocated_gtt,
                             align64(bo->size, ws->info.gart_page_size));
 
-       radv_amdgpu_global_bo_list_add(bo);
-       radv_amdgpu_log_bo(bo, false);
+       radv_amdgpu_global_bo_list_add(ws, bo);
+       radv_amdgpu_log_bo(ws, bo, false);
 
        return (struct radeon_winsys_bo *)bo;
 error_va_map:
@@ -657,7 +660,6 @@ radv_amdgpu_winsys_bo_from_ptr(struct radeon_winsys *_ws,
        bo->va_handle = va_handle;
        bo->size = size;
        bo->ref_count = 1;
-       bo->ws = ws;
        bo->bo = buf_handle;
        bo->base.initial_domain = RADEON_DOMAIN_GTT;
        bo->priority = priority;
@@ -668,8 +670,8 @@ radv_amdgpu_winsys_bo_from_ptr(struct radeon_winsys *_ws,
        p_atomic_add(&ws->allocated_gtt,
                     align64(bo->size, ws->info.gart_page_size));
 
-       radv_amdgpu_global_bo_list_add(bo);
-       radv_amdgpu_log_bo(bo, false);
+       radv_amdgpu_global_bo_list_add(ws, bo);
+       radv_amdgpu_log_bo(ws, bo, false);
 
        return (struct radeon_winsys_bo *)bo;
 
@@ -736,7 +738,6 @@ radv_amdgpu_winsys_bo_from_fd(struct radeon_winsys *_ws,
        bo->base.initial_domain = initial;
        bo->size = result.alloc_size;
        bo->is_shared = true;
-       bo->ws = ws;
        bo->priority = priority;
        bo->ref_count = 1;
 
@@ -750,8 +751,8 @@ radv_amdgpu_winsys_bo_from_fd(struct radeon_winsys *_ws,
                p_atomic_add(&ws->allocated_gtt,
                             align64(bo->size, ws->info.gart_page_size));
 
-       radv_amdgpu_global_bo_list_add(bo);
-       radv_amdgpu_log_bo(bo, false);
+       radv_amdgpu_global_bo_list_add(ws, bo);
+       radv_amdgpu_log_bo(ws, bo, false);
 
        return (struct radeon_winsys_bo *)bo;
 error_va_map:
@@ -859,14 +860,16 @@ static unsigned radv_eg_tile_split_rev(unsigned eg_tile_split)
 }
 
 static void
-radv_amdgpu_winsys_bo_set_metadata(struct radeon_winsys_bo *_bo,
+radv_amdgpu_winsys_bo_set_metadata(struct radeon_winsys *_ws,
+                                  struct radeon_winsys_bo *_bo,
                                   struct radeon_bo_metadata *md)
 {
+       struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws);
        struct radv_amdgpu_winsys_bo *bo = radv_amdgpu_winsys_bo(_bo);
        struct amdgpu_bo_metadata metadata = {0};
        uint64_t tiling_flags = 0;
 
-       if (bo->ws->info.chip_class >= GFX9) {
+       if (ws->info.chip_class >= GFX9) {
                tiling_flags |= AMDGPU_TILING_SET(SWIZZLE_MODE, md->u.gfx9.swizzle_mode);
                tiling_flags |= AMDGPU_TILING_SET(SCANOUT, md->u.gfx9.scanout);
        } else {
@@ -899,9 +902,11 @@ radv_amdgpu_winsys_bo_set_metadata(struct radeon_winsys_bo *_bo,
 }
 
 static void
-radv_amdgpu_winsys_bo_get_metadata(struct radeon_winsys_bo *_bo,
+radv_amdgpu_winsys_bo_get_metadata(struct radeon_winsys *_ws,
+                                  struct radeon_winsys_bo *_bo,
                                    struct radeon_bo_metadata *md)
 {
+       struct radv_amdgpu_winsys *ws = radv_amdgpu_winsys(_ws);
        struct radv_amdgpu_winsys_bo *bo = radv_amdgpu_winsys_bo(_bo);
        struct amdgpu_bo_info info = {0};
 
@@ -911,7 +916,7 @@ radv_amdgpu_winsys_bo_get_metadata(struct radeon_winsys_bo *_bo,
 
        uint64_t tiling_flags = info.metadata.tiling_info;
 
-       if (bo->ws->info.chip_class >= GFX9) {
+       if (ws->info.chip_class >= GFX9) {
                md->u.gfx9.swizzle_mode = AMDGPU_TILING_GET(tiling_flags, SWIZZLE_MODE);
                md->u.gfx9.scanout = AMDGPU_TILING_GET(tiling_flags, SCANOUT);
        } else {
index 2aa5732..6284484 100644 (file)
@@ -43,7 +43,6 @@ struct radv_amdgpu_winsys_bo {
        struct radeon_winsys_bo base;
        amdgpu_va_handle va_handle;
        uint64_t size;
-       struct radv_amdgpu_winsys *ws;
        bool is_virtual;
        uint8_t priority;
        int ref_count;
index 34f2d95..74cf4e4 100644 (file)
@@ -280,12 +280,12 @@ static void radv_amdgpu_cs_destroy(struct radeon_cmdbuf *rcs)
        struct radv_amdgpu_cs *cs = radv_amdgpu_cs(rcs);
 
        if (cs->ib_buffer)
-               cs->ws->base.buffer_destroy(cs->ib_buffer);
+               cs->ws->base.buffer_destroy(&cs->ws->base, cs->ib_buffer);
        else
                free(cs->base.buf);
 
        for (unsigned i = 0; i < cs->num_old_ib_buffers; ++i)
-               cs->ws->base.buffer_destroy(cs->old_ib_buffers[i]);
+               cs->ws->base.buffer_destroy(&cs->ws->base, cs->old_ib_buffers[i]);
 
        for (unsigned i = 0; i < cs->num_old_cs_buffers; ++i) {
                free(cs->old_cs_buffers[i].buf);
@@ -336,7 +336,7 @@ radv_amdgpu_cs_create(struct radeon_winsys *ws,
 
                cs->ib_mapped = ws->buffer_map(cs->ib_buffer);
                if (!cs->ib_mapped) {
-                       ws->buffer_destroy(cs->ib_buffer);
+                       ws->buffer_destroy(ws, cs->ib_buffer);
                        free(cs);
                        return NULL;
                }
@@ -465,7 +465,7 @@ static void radv_amdgpu_cs_grow(struct radeon_cmdbuf *_cs, size_t min_size)
 
        cs->ib_mapped = cs->ws->base.buffer_map(cs->ib_buffer);
        if (!cs->ib_mapped) {
-               cs->ws->base.buffer_destroy(cs->ib_buffer);
+               cs->ws->base.buffer_destroy(&cs->ws->base, cs->ib_buffer);
                cs->base.cdw = 0;
 
                /* VK_ERROR_MEMORY_MAP_FAILED is not valid for vkEndCommandBuffer. */
@@ -528,7 +528,7 @@ static void radv_amdgpu_cs_reset(struct radeon_cmdbuf *_cs)
                cs->ws->base.cs_add_buffer(&cs->base, cs->ib_buffer);
 
                for (unsigned i = 0; i < cs->num_old_ib_buffers; ++i)
-                       cs->ws->base.buffer_destroy(cs->old_ib_buffers[i]);
+                       cs->ws->base.buffer_destroy(&cs->ws->base, cs->old_ib_buffers[i]);
 
                cs->num_old_ib_buffers = 0;
                cs->ib.ib_mc_address = radv_amdgpu_winsys_bo(cs->ib_buffer)->base.va;
@@ -1239,7 +1239,7 @@ radv_amdgpu_winsys_cs_submit_sysmem(struct radeon_winsys_ctx *_ctx,
                        u_rwlock_rdunlock(&aws->global_bo_list.lock);
 
                for (unsigned j = 0; j < number_of_ibs; j++) {
-                       ws->buffer_destroy(bos[j]);
+                       ws->buffer_destroy(ws, bos[j]);
                }
 
                free(ibs);
@@ -1403,7 +1403,7 @@ static VkResult radv_amdgpu_ctx_create(struct radeon_winsys *_ws,
        return VK_SUCCESS;
 
 fail_map:
-       ws->base.buffer_destroy(ctx->fence_bo);
+       ws->base.buffer_destroy(&ws->base, ctx->fence_bo);
 fail_alloc:
        amdgpu_cs_ctx_free(ctx->ctx);
 fail_create:
@@ -1414,7 +1414,7 @@ fail_create:
 static void radv_amdgpu_ctx_destroy(struct radeon_winsys_ctx *rwctx)
 {
        struct radv_amdgpu_ctx *ctx = (struct radv_amdgpu_ctx *)rwctx;
-       ctx->ws->base.buffer_destroy(ctx->fence_bo);
+       ctx->ws->base.buffer_destroy(&ctx->ws->base, ctx->fence_bo);
        amdgpu_cs_ctx_free(ctx->ctx);
        FREE(ctx);
 }
index da6b59d..318b498 100644 (file)
@@ -64,7 +64,8 @@ radv_null_winsys_bo_unmap(struct radeon_winsys_bo *_bo)
 {
 }
 
-static void radv_null_winsys_bo_destroy(struct radeon_winsys_bo *_bo)
+static void radv_null_winsys_bo_destroy(struct radeon_winsys *_ws,
+                                       struct radeon_winsys_bo *_bo)
 {
        struct radv_null_winsys_bo *bo = radv_null_winsys_bo(_bo);
        FREE(bo->ptr);