For the special R32G32B32 paths.

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
---
 src/amd/vulkan/radv_meta_bufimage.c | 73 ++++++++++++++---------------
 1 file changed, 35 insertions(+), 38 deletions(-)

diff --git a/src/amd/vulkan/radv_meta_bufimage.c 
b/src/amd/vulkan/radv_meta_bufimage.c
index ec449c5bca..1cfe50fc50 100644
--- a/src/amd/vulkan/radv_meta_bufimage.c
+++ b/src/amd/vulkan/radv_meta_bufimage.c
@@ -1357,6 +1357,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,
@@ -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);
-- 
2.19.1

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

Reply via email to