---
 src/amd/vulkan/radv_cmd_buffer.c  | 37 +++++++++++++++++++++++--------------
 src/amd/vulkan/radv_meta_buffer.c |  5 +++--
 src/amd/vulkan/radv_private.h     |  6 ++++--
 src/amd/vulkan/si_cmd_buffer.c    |  5 +++--
 4 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 67799a13cc..6dfae4d5e3 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -297,10 +297,11 @@ radv_reset_cmd_buffer(struct radv_cmd_buffer *cmd_buffer)
 
        if (cmd_buffer->device->physical_device->rad_info.chip_class >= GFX9) {
                void *fence_ptr;
+               struct radeon_winsys_bo *upload_bo;
                radv_cmd_buffer_upload_alloc(cmd_buffer, 8, 0,
-                                            &cmd_buffer->gfx9_fence_offset,
+                                            &upload_bo, 
&cmd_buffer->gfx9_fence_offset,
                                             &fence_ptr);
-               cmd_buffer->gfx9_fence_bo = cmd_buffer->upload.upload_bo;
+               cmd_buffer->gfx9_fence_bo = upload_bo;
        }
 
        cmd_buffer->status = RADV_CMD_BUFFER_STATUS_INITIAL;
@@ -362,6 +363,7 @@ bool
 radv_cmd_buffer_upload_alloc(struct radv_cmd_buffer *cmd_buffer,
                             unsigned size,
                             unsigned alignment,
+                            struct radeon_winsys_bo **bo,
                             unsigned *out_offset,
                             void **ptr)
 {
@@ -374,6 +376,7 @@ radv_cmd_buffer_upload_alloc(struct radv_cmd_buffer 
*cmd_buffer,
 
        *out_offset = offset;
        *ptr = cmd_buffer->upload.map + offset;
+       *bo = cmd_buffer->upload.upload_bo;
 
        cmd_buffer->upload.offset = offset + size;
        return true;
@@ -382,12 +385,13 @@ radv_cmd_buffer_upload_alloc(struct radv_cmd_buffer 
*cmd_buffer,
 bool
 radv_cmd_buffer_upload_data(struct radv_cmd_buffer *cmd_buffer,
                            unsigned size, unsigned alignment,
-                           const void *data, unsigned *out_offset)
+                           const void *data, struct radeon_winsys_bo **bo,
+                           unsigned *out_offset)
 {
        uint8_t *ptr;
 
        if (!radv_cmd_buffer_upload_alloc(cmd_buffer, size, alignment,
-                                         out_offset, (void **)&ptr))
+                                         bo, out_offset, (void **)&ptr))
                return false;
 
        if (ptr)
@@ -1709,13 +1713,14 @@ radv_flush_push_descriptors(struct radv_cmd_buffer 
*cmd_buffer)
 {
        struct radv_descriptor_set *set = &cmd_buffer->push_descriptors.set;
        unsigned bo_offset;
+       struct radeon_winsys_bo *bo;
 
        if (!radv_cmd_buffer_upload_data(cmd_buffer, set->size, 32,
                                         set->mapped_ptr,
-                                        &bo_offset))
+                                        &bo, &bo_offset))
                return;
 
-       set->va = radv_buffer_get_va(cmd_buffer->upload.upload_bo);
+       set->va = radv_buffer_get_va(bo);
        set->va += bo_offset;
 }
 
@@ -1725,9 +1730,10 @@ radv_flush_indirect_descriptor_sets(struct 
radv_cmd_buffer *cmd_buffer)
        uint32_t size = MAX_SETS * 2 * 4;
        uint32_t offset;
        void *ptr;
+       struct radeon_winsys_bo *bo;
        
        if (!radv_cmd_buffer_upload_alloc(cmd_buffer, size,
-                                         256, &offset, &ptr))
+                                         256, &bo, &offset, &ptr))
                return;
 
        for (unsigned i = 0; i < MAX_SETS; i++) {
@@ -1740,7 +1746,7 @@ radv_flush_indirect_descriptor_sets(struct 
radv_cmd_buffer *cmd_buffer)
                uptr[1] = set_va >> 32;
        }
 
-       uint64_t va = radv_buffer_get_va(cmd_buffer->upload.upload_bo);
+       uint64_t va = radv_buffer_get_va(bo);
        va += offset;
 
        if (cmd_buffer->state.pipeline) {
@@ -1822,16 +1828,17 @@ radv_flush_constants(struct radv_cmd_buffer *cmd_buffer,
            (!layout->push_constant_size && !layout->dynamic_offset_count))
                return;
 
+       struct radeon_winsys_bo *upload_bo;
        if (!radv_cmd_buffer_upload_alloc(cmd_buffer, 
layout->push_constant_size +
                                          16 * layout->dynamic_offset_count,
-                                         256, &offset, &ptr))
+                                         256, &upload_bo, &offset, &ptr))
                return;
 
        memcpy(ptr, cmd_buffer->push_constants, layout->push_constant_size);
        memcpy((char*)ptr + layout->push_constant_size, 
cmd_buffer->dynamic_buffers,
               16 * layout->dynamic_offset_count);
 
-       va = radv_buffer_get_va(cmd_buffer->upload.upload_bo);
+       va = radv_buffer_get_va(upload_bo);
        va += offset;
 
        MAYBE_UNUSED unsigned cdw_max = 
radeon_check_space(cmd_buffer->device->ws,
@@ -1861,10 +1868,11 @@ radv_cmd_buffer_update_vertex_descriptors(struct 
radv_cmd_buffer *cmd_buffer, bo
                uint32_t i = 0;
                uint32_t count = velems->count;
                uint64_t va;
+               struct radeon_winsys_bo *upload_bo;
 
                /* allocate some descriptor state for vertex buffers */
                if (!radv_cmd_buffer_upload_alloc(cmd_buffer, count * 16, 256,
-                                                 &vb_offset, &vb_ptr))
+                                                 &upload_bo, &vb_offset, 
&vb_ptr))
                        return false;
 
                for (i = 0; i < count; i++) {
@@ -1887,7 +1895,7 @@ radv_cmd_buffer_update_vertex_descriptors(struct 
radv_cmd_buffer *cmd_buffer, bo
                        desc[3] = velems->rsrc_word3[i];
                }
 
-               va = radv_buffer_get_va(cmd_buffer->upload.upload_bo);
+               va = radv_buffer_get_va(upload_bo);
                va += vb_offset;
 
                radv_emit_userdata_address(cmd_buffer, 
cmd_buffer->state.pipeline, MESA_SHADER_VERTEX,
@@ -2522,6 +2530,7 @@ void radv_meta_push_descriptor_set(
        RADV_FROM_HANDLE(radv_pipeline_layout, layout, _layout);
        struct radv_descriptor_set *push_set = 
&cmd_buffer->meta_push_descriptors;
        unsigned bo_offset;
+       struct radeon_winsys_bo *upload_bo;
 
        assert(set == 0);
        assert(layout->set[set].layout->flags & 
VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR);
@@ -2530,11 +2539,11 @@ void radv_meta_push_descriptor_set(
        push_set->layout = layout->set[set].layout;
 
        if (!radv_cmd_buffer_upload_alloc(cmd_buffer, push_set->size, 32,
-                                         &bo_offset,
+                                         &upload_bo, &bo_offset,
                                          (void**) &push_set->mapped_ptr))
                return;
 
-       push_set->va = radv_buffer_get_va(cmd_buffer->upload.upload_bo);
+       push_set->va = radv_buffer_get_va(upload_bo);
        push_set->va += bo_offset;
 
        radv_update_descriptor_sets(cmd_buffer->device, cmd_buffer,
diff --git a/src/amd/vulkan/radv_meta_buffer.c 
b/src/amd/vulkan/radv_meta_buffer.c
index e6ad235e93..64178bf2e2 100644
--- a/src/amd/vulkan/radv_meta_buffer.c
+++ b/src/amd/vulkan/radv_meta_buffer.c
@@ -529,8 +529,9 @@ void radv_CmdUpdateBuffer(
                        radv_cmd_buffer_trace_emit(cmd_buffer);
        } else {
                uint32_t buf_offset;
-               radv_cmd_buffer_upload_data(cmd_buffer, dataSize, 32, pData, 
&buf_offset);
-               radv_copy_buffer(cmd_buffer, cmd_buffer->upload.upload_bo, 
dst_buffer->bo,
+               struct radeon_winsys_bo *src_bo;
+               radv_cmd_buffer_upload_data(cmd_buffer, dataSize, 32, pData, 
&src_bo, &buf_offset);
+               radv_copy_buffer(cmd_buffer, src_bo, dst_buffer->bo,
                                 buf_offset, dstOffset + dst_buffer->offset, 
dataSize);
        }
 }
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index c39358951d..f0f31d0698 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1033,6 +1033,7 @@ bool
 radv_cmd_buffer_upload_alloc(struct radv_cmd_buffer *cmd_buffer,
                             unsigned size,
                             unsigned alignment,
+                            struct radeon_winsys_bo **bo,
                             unsigned *out_offset,
                             void **ptr);
 void
@@ -1041,8 +1042,9 @@ radv_cmd_buffer_set_subpass(struct radv_cmd_buffer 
*cmd_buffer,
                            bool transitions);
 bool
 radv_cmd_buffer_upload_data(struct radv_cmd_buffer *cmd_buffer,
-                           unsigned size, unsigned alignmnet,
-                           const void *data, unsigned *out_offset);
+                           unsigned size, unsigned alignment,
+                           const void *data, struct radeon_winsys_bo **bo,
+                           unsigned *out_offset);
 
 void radv_cmd_buffer_clear_subpass(struct radv_cmd_buffer *cmd_buffer);
 void radv_cmd_buffer_resolve_subpass(struct radv_cmd_buffer *cmd_buffer);
diff --git a/src/amd/vulkan/si_cmd_buffer.c b/src/amd/vulkan/si_cmd_buffer.c
index f5f4eefcd2..5bf9851803 100644
--- a/src/amd/vulkan/si_cmd_buffer.c
+++ b/src/amd/vulkan/si_cmd_buffer.c
@@ -1300,12 +1300,13 @@ static void si_cp_dma_realign_engine(struct 
radv_cmd_buffer *cmd_buffer, unsigne
        unsigned dma_flags = 0;
        unsigned buf_size = SI_CPDMA_ALIGNMENT * 2;
        void *ptr;
+       struct radeon_winsys_bo *bo;
 
        assert(size < SI_CPDMA_ALIGNMENT);
 
-       radv_cmd_buffer_upload_alloc(cmd_buffer, buf_size, SI_CPDMA_ALIGNMENT,  
&offset, &ptr);
+       radv_cmd_buffer_upload_alloc(cmd_buffer, buf_size, SI_CPDMA_ALIGNMENT,  
&bo, &offset, &ptr);
 
-       va = radv_buffer_get_va(cmd_buffer->upload.upload_bo);
+       va = radv_buffer_get_va(bo);
        va += offset;
 
        si_cp_dma_prepare(cmd_buffer, size, size, &dma_flags);
-- 
2.15.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to