diff options
author | Samuel Pitoiset <[email protected]> | 2018-10-24 08:50:22 +0200 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2018-10-26 10:49:58 +0200 |
commit | e60e3e1b3f6d827e296e3bfd6acefebfc08d3005 (patch) | |
tree | 3c9aa4e4b3581cf35def4d21cbb692d8f1672f9f | |
parent | 416abe809ad9c5ea31267d48987ee27dd1b86f70 (diff) |
radv: add create_buffer_from_image() helper
For the special R32G32B32 paths.
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
-rw-r--r-- | src/amd/vulkan/radv_meta_bufimage.c | 73 |
1 files changed, 35 insertions, 38 deletions
diff --git a/src/amd/vulkan/radv_meta_bufimage.c b/src/amd/vulkan/radv_meta_bufimage.c index ec449c5bca5..1cfe50fc505 100644 --- a/src/amd/vulkan/radv_meta_bufimage.c +++ b/src/amd/vulkan/radv_meta_bufimage.c @@ -1358,6 +1358,35 @@ create_bview(struct radv_cmd_buffer *cmd_buffer, } static void +create_buffer_from_image(struct radv_cmd_buffer *cmd_buffer, + struct radv_meta_blit2d_surf *surf, + VkBufferUsageFlagBits usage, + VkBuffer *buffer) +{ + struct radv_device *device = cmd_buffer->device; + struct radv_device_memory mem = { .bo = surf->image->bo }; + + radv_CreateBuffer(radv_device_to_handle(device), + &(VkBufferCreateInfo) { + .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, + .flags = 0, + .size = surf->image->size, + .usage = usage, + .sharingMode = VK_SHARING_MODE_EXCLUSIVE, + }, NULL, buffer); + + radv_BindBufferMemory2(radv_device_to_handle(device), 1, + (VkBindBufferMemoryInfoKHR[]) { + { + .sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO, + .buffer = *buffer, + .memory = radv_device_memory_to_handle(&mem), + .memoryOffset = surf->image->offset, + } + }); +} + +static void itob_bind_descriptors(struct radv_cmd_buffer *cmd_buffer, struct radv_image_view *src, struct radv_buffer_view *dst) @@ -1474,7 +1503,6 @@ radv_meta_buffer_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_rect *rects) { VkPipeline pipeline = cmd_buffer->device->meta_state.btoi_r32g32b32.pipeline; - struct radv_device_memory mem = { .bo = dst->image->bo }; struct radv_device *device = cmd_buffer->device; struct radv_buffer_view src_view, dst_view; unsigned dst_offset = 0; @@ -1500,24 +1528,9 @@ radv_meta_buffer_to_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, * image as a buffer with the same underlying memory. The compute * shader will clear all components separately using a R32 format. */ - radv_CreateBuffer(radv_device_to_handle(device), - &(VkBufferCreateInfo) { - .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, - .flags = 0, - .size = dst->image->size, - .usage = VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, - .sharingMode = VK_SHARING_MODE_EXCLUSIVE, - }, NULL, &buffer); - - radv_BindBufferMemory2(radv_device_to_handle(device), 1, - (VkBindBufferMemoryInfoKHR[]) { - { - .sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO, - .buffer = buffer, - .memory = radv_device_memory_to_handle(&mem), - .memoryOffset = dst->image->offset, - } - }); + create_buffer_from_image(cmd_buffer, dst, + VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, + &buffer); create_bview(cmd_buffer, src->buffer, src->offset, src->format, &src_view); @@ -1750,7 +1763,6 @@ radv_meta_clear_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, const VkClearColorValue *clear_color) { VkPipeline pipeline = cmd_buffer->device->meta_state.cleari_r32g32b32.pipeline; - struct radv_device_memory mem = { .bo = dst->image->bo }; struct radv_device *device = cmd_buffer->device; struct radv_buffer_view dst_view; unsigned stride; @@ -1775,24 +1787,9 @@ radv_meta_clear_image_cs_r32g32b32(struct radv_cmd_buffer *cmd_buffer, * image as a buffer with the same underlying memory. The compute * shader will clear all components separately using a R32 format. */ - radv_CreateBuffer(radv_device_to_handle(device), - &(VkBufferCreateInfo) { - .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, - .flags = 0, - .size = dst->image->size, - .usage = VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, - .sharingMode = VK_SHARING_MODE_EXCLUSIVE, - }, NULL, &buffer); - - radv_BindBufferMemory2(radv_device_to_handle(device), 1, - (VkBindBufferMemoryInfoKHR[]) { - { - .sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO, - .buffer = buffer, - .memory = radv_device_memory_to_handle(&mem), - .memoryOffset = dst->image->offset, - } - }); + create_buffer_from_image(cmd_buffer, dst, + VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, + &buffer); create_bview(cmd_buffer, radv_buffer_from_handle(buffer), 0, format, &dst_view); cleari_r32g32b32_bind_descriptors(cmd_buffer, &dst_view); |