Module: Mesa Branch: main Commit: 7ec6cb61ad79b3751a93ca1c63767d6b8b178801 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=7ec6cb61ad79b3751a93ca1c63767d6b8b178801
Author: Chia-I Wu <[email protected]> Date: Thu May 6 09:41:58 2021 -0700 venus: add vn_cmd_get_image_memory_barriers And call it regardless of ANDROID or not. Signed-off-by: Chia-I Wu <[email protected]> Reviewed-by: Yiwei Zhang <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10709> --- src/virtio/vulkan/vn_command_buffer.c | 48 ++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/src/virtio/vulkan/vn_command_buffer.c b/src/virtio/vulkan/vn_command_buffer.c index e2836a31232..53faae7f1c6 100644 --- a/src/virtio/vulkan/vn_command_buffer.c +++ b/src/virtio/vulkan/vn_command_buffer.c @@ -29,6 +29,27 @@ vn_image_memory_barrier_has_present_src( return false; } +static VkImageMemoryBarrier * +vn_cmd_get_image_memory_barriers(struct vn_command_buffer *cmd, + uint32_t count) +{ + /* avoid shrinking in case of non efficient reallocation implementation */ + if (count > cmd->builder.image_barrier_count) { + size_t size = sizeof(VkImageMemoryBarrier) * count; + VkImageMemoryBarrier *img_barriers = + vk_realloc(&cmd->allocator, cmd->builder.image_barriers, size, + VN_DEFAULT_ALIGN, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); + if (!img_barriers) + return NULL; + + /* update upon successful reallocation */ + cmd->builder.image_barrier_count = count; + cmd->builder.image_barriers = img_barriers; + } + + return cmd->builder.image_barriers; +} + static void vn_cmd_begin_render_pass(struct vn_command_buffer *cmd, const struct vn_render_pass *pass, @@ -1050,33 +1071,24 @@ vn_get_intercepted_barriers(struct vn_command_buffer *cmd, if (!has_present_src) return img_barriers; + VkImageMemoryBarrier *barriers = + vn_cmd_get_image_memory_barriers(cmd, count); + if (!barriers) + return img_barriers; + + memcpy(barriers, img_barriers, sizeof(*img_barriers) * count); + /* XXX drop the #ifdef after fixing common wsi */ #ifdef ANDROID - size_t size = sizeof(VkImageMemoryBarrier) * count; - /* avoid shrinking in case of non efficient reallocation implementation */ - VkImageMemoryBarrier *barriers = cmd->builder.image_barriers; - if (count > cmd->builder.image_barrier_count) { - barriers = - vk_realloc(&cmd->allocator, cmd->builder.image_barriers, size, - VN_DEFAULT_ALIGN, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); - if (!barriers) - return img_barriers; - - /* update upon successful reallocation */ - cmd->builder.image_barrier_count = count; - cmd->builder.image_barriers = barriers; - } - memcpy(barriers, img_barriers, size); for (uint32_t i = 0; i < count; i++) { if (barriers[i].oldLayout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR) barriers[i].oldLayout = VK_IMAGE_LAYOUT_GENERAL; if (barriers[i].newLayout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR) barriers[i].newLayout = VK_IMAGE_LAYOUT_GENERAL; } - return barriers; -#else - return img_barriers; #endif + + return barriers; } void _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
