From 3e89b20858f018a55ef64b291e2017fbf94669db Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 29 Sep 2021 09:40:00 +0200 Subject: [PATCH] radv: fix vk_object_base_init/finish for internal buffer views Signed-off-by: Samuel Pitoiset Reviewed-by: Jason Ekstrand Part-of: --- src/amd/vulkan/radv_image.c | 12 +++++++++--- src/amd/vulkan/radv_meta_blit2d.c | 3 +++ src/amd/vulkan/radv_meta_bufimage.c | 9 +++++++++ src/amd/vulkan/radv_meta_dcc_retile.c | 3 +++ src/amd/vulkan/radv_private.h | 1 + 5 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index ba119f010ea..6369b08ffe8 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -2330,6 +2330,8 @@ radv_buffer_view_init(struct radv_buffer_view *view, struct radv_device *device, { RADV_FROM_HANDLE(radv_buffer, buffer, pCreateInfo->buffer); + vk_object_base_init(&device->vk, &view->base, VK_OBJECT_TYPE_BUFFER_VIEW); + view->bo = buffer->bo; view->range = pCreateInfo->range == VK_WHOLE_SIZE ? buffer->size - pCreateInfo->offset : pCreateInfo->range; @@ -2339,6 +2341,12 @@ radv_buffer_view_init(struct radv_buffer_view *view, struct radv_device *device, view->state); } +void +radv_buffer_view_finish(struct radv_buffer_view *view) +{ + vk_object_base_finish(&view->base); +} + VkResult radv_CreateBufferView(VkDevice _device, const VkBufferViewCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkBufferView *pView) @@ -2351,8 +2359,6 @@ radv_CreateBufferView(VkDevice _device, const VkBufferViewCreateInfo *pCreateInf if (!view) return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY); - vk_object_base_init(&device->vk, &view->base, VK_OBJECT_TYPE_BUFFER_VIEW); - radv_buffer_view_init(view, device, pCreateInfo); *pView = radv_buffer_view_to_handle(view); @@ -2370,6 +2376,6 @@ radv_DestroyBufferView(VkDevice _device, VkBufferView bufferView, if (!view) return; - vk_object_base_finish(&view->base); + radv_buffer_view_finish(view); vk_free2(&device->vk.alloc, pAllocator, view); } diff --git a/src/amd/vulkan/radv_meta_blit2d.c b/src/amd/vulkan/radv_meta_blit2d.c index b6ac95be413..baa2fc55815 100644 --- a/src/amd/vulkan/radv_meta_blit2d.c +++ b/src/amd/vulkan/radv_meta_blit2d.c @@ -395,6 +395,9 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer, */ radv_DestroyFramebuffer(radv_device_to_handle(device), dst_temps.fb, &cmd_buffer->pool->alloc); + + if (src_type == BLIT2D_SRC_TYPE_BUFFER) + radv_buffer_view_finish(&src_temps.bview); } } } diff --git a/src/amd/vulkan/radv_meta_bufimage.c b/src/amd/vulkan/radv_meta_bufimage.c index ef3ccde1065..b6e86d490b0 100644 --- a/src/amd/vulkan/radv_meta_bufimage.c +++ b/src/amd/vulkan/radv_meta_bufimage.c @@ -1462,6 +1462,8 @@ radv_meta_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_b radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1); } + + radv_buffer_view_finish(&dst_view); } static void @@ -1537,6 +1539,8 @@ radv_meta_buffer_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1); } + radv_buffer_view_finish(&src_view); + radv_buffer_view_finish(&dst_view); radv_DestroyBuffer(radv_device_to_handle(device), buffer, NULL); } @@ -1611,6 +1615,8 @@ radv_meta_buffer_to_image_cs(struct radv_cmd_buffer *cmd_buffer, radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1); } + + radv_buffer_view_finish(&src_view); } static void @@ -1689,6 +1695,8 @@ radv_meta_image_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, radv_unaligned_dispatch(cmd_buffer, rects[r].width, rects[r].height, 1); } + radv_buffer_view_finish(&src_view); + radv_buffer_view_finish(&dst_view); radv_DestroyBuffer(radv_device_to_handle(device), src_buffer, NULL); radv_DestroyBuffer(radv_device_to_handle(device), dst_buffer, NULL); } @@ -1836,6 +1844,7 @@ radv_meta_clear_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, radv_unaligned_dispatch(cmd_buffer, dst->image->info.width, dst->image->info.height, 1); + radv_buffer_view_finish(&dst_view); radv_DestroyBuffer(radv_device_to_handle(device), buffer, NULL); } diff --git a/src/amd/vulkan/radv_meta_dcc_retile.c b/src/amd/vulkan/radv_meta_dcc_retile.c index 75d80e02ba8..fb6bbe35c1f 100644 --- a/src/amd/vulkan/radv_meta_dcc_retile.c +++ b/src/amd/vulkan/radv_meta_dcc_retile.c @@ -306,6 +306,9 @@ radv_retile_dcc(struct radv_cmd_buffer *cmd_buffer, struct radv_image *image) radv_unaligned_dispatch(cmd_buffer, dcc_width, dcc_height, 1); + radv_buffer_view_finish(views); + radv_buffer_view_finish(views + 1); + radv_meta_restore(&saved_state, cmd_buffer); state->flush_bits |= RADV_CMD_FLAG_CS_PARTIAL_FLUSH | diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index bf1eeffe58b..1d48461ec30 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -2320,6 +2320,7 @@ struct radv_buffer_view { }; void radv_buffer_view_init(struct radv_buffer_view *view, struct radv_device *device, const VkBufferViewCreateInfo *pCreateInfo); +void radv_buffer_view_finish(struct radv_buffer_view *view); static inline struct VkExtent3D radv_sanitize_image_extent(const VkImageType imageType, const struct VkExtent3D imageExtent)