Mesa (main): radv: Use vk_command_pool

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Feb 11 08:46:48 UTC 2022


Module: Mesa
Branch: main
Commit: 29a164b088beb05f12eb69bdf688cc4996e0a8a1
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=29a164b088beb05f12eb69bdf688cc4996e0a8a1

Author: Jason Ekstrand <jason.ekstrand at collabora.com>
Date:   Mon Feb  7 14:18:03 2022 -0600

radv: Use vk_command_pool

Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14917>

---

 src/amd/vulkan/radv_cmd_buffer.c      | 38 +++++++++++++++++------------------
 src/amd/vulkan/radv_meta_blit.c       |  8 ++++----
 src/amd/vulkan/radv_meta_blit2d.c     |  4 ++--
 src/amd/vulkan/radv_meta_clear.c      |  8 ++++----
 src/amd/vulkan/radv_meta_copy.c       |  2 +-
 src/amd/vulkan/radv_meta_decompress.c |  4 ++--
 src/amd/vulkan/radv_meta_fast_clear.c |  4 ++--
 src/amd/vulkan/radv_meta_resolve.c    |  4 ++--
 src/amd/vulkan/radv_meta_resolve_fs.c |  4 ++--
 src/amd/vulkan/radv_private.h         |  9 ++++-----
 10 files changed, 41 insertions(+), 44 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index 5c6c9428362..b43008dc6a3 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -434,7 +434,7 @@ radv_destroy_cmd_buffer(struct radv_cmd_buffer *cmd_buffer)
    vk_object_base_finish(&cmd_buffer->meta_push_descriptors.base);
 
    vk_command_buffer_finish(&cmd_buffer->vk);
-   vk_free(&cmd_buffer->pool->alloc, cmd_buffer);
+   vk_free(&cmd_buffer->pool->vk.alloc, cmd_buffer);
 }
 
 static VkResult
@@ -443,14 +443,15 @@ radv_create_cmd_buffer(struct radv_device *device, struct radv_cmd_pool *pool,
 {
    struct radv_cmd_buffer *cmd_buffer;
    unsigned ring;
-   cmd_buffer = vk_zalloc(&pool->alloc, sizeof(*cmd_buffer), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+   cmd_buffer = vk_zalloc(&pool->vk.alloc, sizeof(*cmd_buffer), 8,
+                          VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
    if (cmd_buffer == NULL)
       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
 
    VkResult result =
       vk_command_buffer_init(&cmd_buffer->vk, &device->vk, level);
    if (result != VK_SUCCESS) {
-      vk_free(&cmd_buffer->pool->alloc, cmd_buffer);
+      vk_free(&cmd_buffer->pool->vk.alloc, cmd_buffer);
       return result;
    }
 
@@ -458,7 +459,7 @@ radv_create_cmd_buffer(struct radv_device *device, struct radv_cmd_pool *pool,
    cmd_buffer->pool = pool;
 
    list_addtail(&cmd_buffer->pool_link, &pool->cmd_buffers);
-   cmd_buffer->queue_family_index = pool->queue_family_index;
+   cmd_buffer->queue_family_index = pool->vk.queue_family_index;
 
    ring = radv_queue_family_to_ring(cmd_buffer->queue_family_index);
 
@@ -4224,7 +4225,7 @@ radv_cmd_state_setup_sample_locations(struct radv_cmd_buffer *cmd_buffer,
    }
 
    state->subpass_sample_locs =
-      vk_alloc(&cmd_buffer->pool->alloc,
+      vk_alloc(&cmd_buffer->pool->vk.alloc,
                sample_locs->postSubpassSampleLocationsCount * sizeof(state->subpass_sample_locs[0]),
                8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
    if (state->subpass_sample_locs == NULL) {
@@ -4271,8 +4272,8 @@ radv_cmd_state_setup_attachments(struct radv_cmd_buffer *cmd_buffer, struct radv
    }
 
    state->attachments =
-      vk_alloc(&cmd_buffer->pool->alloc, pass->attachment_count * sizeof(state->attachments[0]), 8,
-               VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
+      vk_alloc(&cmd_buffer->pool->vk.alloc, pass->attachment_count * sizeof(state->attachments[0]),
+               8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
    if (state->attachments == NULL) {
       cmd_buffer->record_result = VK_ERROR_OUT_OF_HOST_MEMORY;
       return cmd_buffer->record_result;
@@ -4962,8 +4963,8 @@ radv_EndCommandBuffer(VkCommandBuffer commandBuffer)
 
    radv_describe_end_cmd_buffer(cmd_buffer);
 
-   vk_free(&cmd_buffer->pool->alloc, cmd_buffer->state.attachments);
-   vk_free(&cmd_buffer->pool->alloc, cmd_buffer->state.subpass_sample_locs);
+   vk_free(&cmd_buffer->pool->vk.alloc, cmd_buffer->state.attachments);
+   vk_free(&cmd_buffer->pool->vk.alloc, cmd_buffer->state.subpass_sample_locs);
 
    VkResult result = cmd_buffer->device->ws->cs_finalize(cmd_buffer->cs);
    if (result != VK_SUCCESS)
@@ -5694,18 +5695,15 @@ radv_CreateCommandPool(VkDevice _device, const VkCommandPoolCreateInfo *pCreateI
    if (pool == NULL)
       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
 
-   vk_object_base_init(&device->vk, &pool->base, VK_OBJECT_TYPE_COMMAND_POOL);
-
-   if (pAllocator)
-      pool->alloc = *pAllocator;
-   else
-      pool->alloc = device->vk.alloc;
+   VkResult result = vk_command_pool_init(&pool->vk, &device->vk, pCreateInfo, pAllocator);
+   if (result != VK_SUCCESS) {
+      vk_free2(&device->vk.alloc, pAllocator, pool);
+      return result;
+   }
 
    list_inithead(&pool->cmd_buffers);
    list_inithead(&pool->free_cmd_buffers);
 
-   pool->queue_family_index = pCreateInfo->queueFamilyIndex;
-
    *pCmdPool = radv_cmd_pool_to_handle(pool);
 
    return VK_SUCCESS;
@@ -5731,7 +5729,7 @@ radv_DestroyCommandPool(VkDevice _device, VkCommandPool commandPool,
       radv_destroy_cmd_buffer(cmd_buffer);
    }
 
-   vk_object_base_finish(&pool->base);
+   vk_command_pool_finish(&pool->vk);
    vk_free2(&device->vk.alloc, pAllocator, pool);
 }
 
@@ -7527,8 +7525,8 @@ radv_CmdSetRayTracingPipelineStackSizeKHR(VkCommandBuffer commandBuffer, uint32_
 void
 radv_cmd_buffer_end_render_pass(struct radv_cmd_buffer *cmd_buffer)
 {
-   vk_free(&cmd_buffer->pool->alloc, cmd_buffer->state.attachments);
-   vk_free(&cmd_buffer->pool->alloc, cmd_buffer->state.subpass_sample_locs);
+   vk_free(&cmd_buffer->pool->vk.alloc, cmd_buffer->state.attachments);
+   vk_free(&cmd_buffer->pool->vk.alloc, cmd_buffer->state.subpass_sample_locs);
 
    cmd_buffer->state.pass = NULL;
    cmd_buffer->state.subpass = NULL;
diff --git a/src/amd/vulkan/radv_meta_blit.c b/src/amd/vulkan/radv_meta_blit.c
index 3c15123edcc..d59b17299c6 100644
--- a/src/amd/vulkan/radv_meta_blit.c
+++ b/src/amd/vulkan/radv_meta_blit.c
@@ -274,7 +274,7 @@ meta_emit_blit(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
                              .height = dst_height,
                              .layers = 1,
                           },
-                          &cmd_buffer->pool->alloc, &fb);
+                          &cmd_buffer->pool->vk.alloc, &fb);
    VkPipeline *pipeline = NULL;
    unsigned fs_key = 0;
    switch (src_iview->aspect_mask) {
@@ -438,7 +438,7 @@ fail_pipeline:
    /* TODO: above comment is not valid for at least descriptor sets/pools,
     * as we may not free them till after execution finishes. Check others. */
 
-   radv_DestroyFramebuffer(radv_device_to_handle(device), fb, &cmd_buffer->pool->alloc);
+   radv_DestroyFramebuffer(radv_device_to_handle(device), fb, &cmd_buffer->pool->vk.alloc);
 }
 
 static bool
@@ -490,7 +490,7 @@ blit_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
                          .addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
                          .addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE,
                       },
-                      &cmd_buffer->pool->alloc, &sampler);
+                      &cmd_buffer->pool->vk.alloc, &sampler);
 
    radv_meta_save(
       &saved_state, cmd_buffer,
@@ -620,7 +620,7 @@ blit_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
 
    radv_meta_restore(&saved_state, cmd_buffer);
 
-   radv_DestroySampler(radv_device_to_handle(device), sampler, &cmd_buffer->pool->alloc);
+   radv_DestroySampler(radv_device_to_handle(device), sampler, &cmd_buffer->pool->vk.alloc);
 }
 
 VKAPI_ATTR void VKAPI_CALL
diff --git a/src/amd/vulkan/radv_meta_blit2d.c b/src/amd/vulkan/radv_meta_blit2d.c
index b20f89a9b13..ccdc2ea2ea4 100644
--- a/src/amd/vulkan/radv_meta_blit2d.c
+++ b/src/amd/vulkan/radv_meta_blit2d.c
@@ -179,7 +179,7 @@ blit2d_bind_dst(struct radv_cmd_buffer *cmd_buffer, struct radv_meta_blit2d_surf
                                  .width = width,
                                  .height = height,
                                  .layers = 1},
-      &cmd_buffer->pool->alloc, &tmp->fb);
+      &cmd_buffer->pool->vk.alloc, &tmp->fb);
 }
 
 static void
@@ -394,7 +394,7 @@ radv_meta_blit2d_normal_dst(struct radv_cmd_buffer *cmd_buffer,
           * descriptor sets, etc. has been used.  We are free to delete it.
           */
          radv_DestroyFramebuffer(radv_device_to_handle(device), dst_temps.fb,
-                                 &cmd_buffer->pool->alloc);
+                                 &cmd_buffer->pool->vk.alloc);
 
          if (src_type == BLIT2D_SRC_TYPE_BUFFER)
             radv_buffer_view_finish(&src_temps.bview);
diff --git a/src/amd/vulkan/radv_meta_clear.c b/src/amd/vulkan/radv_meta_clear.c
index e13088385dc..5e6ce674d48 100644
--- a/src/amd/vulkan/radv_meta_clear.c
+++ b/src/amd/vulkan/radv_meta_clear.c
@@ -2153,7 +2153,7 @@ radv_clear_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_image *im
                                  .width = width,
                                  .height = height,
                                  .layers = layer_count},
-      &cmd_buffer->pool->alloc, &fb);
+      &cmd_buffer->pool->vk.alloc, &fb);
 
    VkAttachmentDescription2 att_desc = {
       .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,
@@ -2218,7 +2218,7 @@ radv_clear_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_image *im
                                       .srcAccessMask = 0,
                                       .dstAccessMask = 0,
                                       .dependencyFlags = 0}}},
-      &cmd_buffer->pool->alloc, &pass);
+      &cmd_buffer->pool->vk.alloc, &pass);
 
    radv_cmd_buffer_begin_render_pass(cmd_buffer,
                                      &(VkRenderPassBeginInfo){
@@ -2265,8 +2265,8 @@ radv_clear_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_image *im
 
    radv_image_view_finish(&iview);
    radv_cmd_buffer_end_render_pass(cmd_buffer);
-   radv_DestroyRenderPass(device_h, pass, &cmd_buffer->pool->alloc);
-   radv_DestroyFramebuffer(device_h, fb, &cmd_buffer->pool->alloc);
+   radv_DestroyRenderPass(device_h, pass, &cmd_buffer->pool->vk.alloc);
+   radv_DestroyFramebuffer(device_h, fb, &cmd_buffer->pool->vk.alloc);
 }
 
 /**
diff --git a/src/amd/vulkan/radv_meta_copy.c b/src/amd/vulkan/radv_meta_copy.c
index 7956e3cd9bd..eb539b40c7f 100644
--- a/src/amd/vulkan/radv_meta_copy.c
+++ b/src/amd/vulkan/radv_meta_copy.c
@@ -278,7 +278,7 @@ copy_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf
                      struct radv_image *image, VkImageLayout layout,
                      const VkBufferImageCopy2KHR *region)
 {
-   if (cmd_buffer->pool->queue_family_index == RADV_QUEUE_TRANSFER) {
+   if (cmd_buffer->pool->vk.queue_family_index == RADV_QUEUE_TRANSFER) {
       /* RADV_QUEUE_TRANSFER should only be used for the prime blit */
       assert(!region->imageOffset.x && !region->imageOffset.y && !region->imageOffset.z);
       assert(image->type == VK_IMAGE_TYPE_2D);
diff --git a/src/amd/vulkan/radv_meta_decompress.c b/src/amd/vulkan/radv_meta_decompress.c
index 9824657b64e..6a5203ecbc8 100644
--- a/src/amd/vulkan/radv_meta_decompress.c
+++ b/src/amd/vulkan/radv_meta_decompress.c
@@ -513,7 +513,7 @@ radv_process_depth_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_i
                                  .width = width,
                                  .height = height,
                                  .layers = 1},
-      &cmd_buffer->pool->alloc, &fb_h);
+      &cmd_buffer->pool->vk.alloc, &fb_h);
 
    radv_cmd_buffer_begin_render_pass(cmd_buffer,
                                      &(VkRenderPassBeginInfo){
@@ -540,7 +540,7 @@ radv_process_depth_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_i
    radv_cmd_buffer_end_render_pass(cmd_buffer);
 
    radv_image_view_finish(&iview);
-   radv_DestroyFramebuffer(radv_device_to_handle(device), fb_h, &cmd_buffer->pool->alloc);
+   radv_DestroyFramebuffer(radv_device_to_handle(device), fb_h, &cmd_buffer->pool->vk.alloc);
 }
 
 static void
diff --git a/src/amd/vulkan/radv_meta_fast_clear.c b/src/amd/vulkan/radv_meta_fast_clear.c
index 8757872965d..4fd2079a606 100644
--- a/src/amd/vulkan/radv_meta_fast_clear.c
+++ b/src/amd/vulkan/radv_meta_fast_clear.c
@@ -582,7 +582,7 @@ radv_process_color_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_i
                                  .width = width,
                                  .height = height,
                                  .layers = 1},
-      &cmd_buffer->pool->alloc, &fb_h);
+      &cmd_buffer->pool->vk.alloc, &fb_h);
 
    radv_cmd_buffer_begin_render_pass(cmd_buffer,
                                      &(VkRenderPassBeginInfo){
@@ -619,7 +619,7 @@ radv_process_color_image_layer(struct radv_cmd_buffer *cmd_buffer, struct radv_i
    radv_cmd_buffer_end_render_pass(cmd_buffer);
 
    radv_image_view_finish(&iview);
-   radv_DestroyFramebuffer(radv_device_to_handle(device), fb_h, &cmd_buffer->pool->alloc);
+   radv_DestroyFramebuffer(radv_device_to_handle(device), fb_h, &cmd_buffer->pool->vk.alloc);
 }
 
 static void
diff --git a/src/amd/vulkan/radv_meta_resolve.c b/src/amd/vulkan/radv_meta_resolve.c
index 94b5af265b3..2c4a8952df2 100644
--- a/src/amd/vulkan/radv_meta_resolve.c
+++ b/src/amd/vulkan/radv_meta_resolve.c
@@ -564,7 +564,7 @@ radv_meta_resolve_hardware_image(struct radv_cmd_buffer *cmd_buffer, struct radv
             .width = radv_minify(dst_image->info.width, region->dstSubresource.mipLevel),
             .height = radv_minify(dst_image->info.height, region->dstSubresource.mipLevel),
             .layers = 1},
-         &cmd_buffer->pool->alloc, &fb_h);
+         &cmd_buffer->pool->vk.alloc, &fb_h);
 
       radv_cmd_buffer_begin_render_pass(cmd_buffer,
                                         &(VkRenderPassBeginInfo){
@@ -602,7 +602,7 @@ radv_meta_resolve_hardware_image(struct radv_cmd_buffer *cmd_buffer, struct radv
 
       radv_image_view_finish(&src_iview);
       radv_image_view_finish(&dst_iview);
-      radv_DestroyFramebuffer(radv_device_to_handle(device), fb_h, &cmd_buffer->pool->alloc);
+      radv_DestroyFramebuffer(radv_device_to_handle(device), fb_h, &cmd_buffer->pool->vk.alloc);
    }
 
    radv_meta_restore(&saved_state, cmd_buffer);
diff --git a/src/amd/vulkan/radv_meta_resolve_fs.c b/src/amd/vulkan/radv_meta_resolve_fs.c
index 242f1fd8a1f..02b5d1ff48b 100644
--- a/src/amd/vulkan/radv_meta_resolve_fs.c
+++ b/src/amd/vulkan/radv_meta_resolve_fs.c
@@ -1024,7 +1024,7 @@ radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer, struct radv
                                     .width = extent.width + dstOffset.x,
                                     .height = extent.height + dstOffset.y,
                                     .layers = 1},
-         &cmd_buffer->pool->alloc, &fb);
+         &cmd_buffer->pool->vk.alloc, &fb);
 
       radv_cmd_buffer_begin_render_pass(cmd_buffer,
                                         &(VkRenderPassBeginInfo){
@@ -1056,7 +1056,7 @@ radv_meta_resolve_fragment_image(struct radv_cmd_buffer *cmd_buffer, struct radv
       radv_image_view_finish(&src_iview);
       radv_image_view_finish(&dest_iview);
       radv_DestroyFramebuffer(radv_device_to_handle(cmd_buffer->device), fb,
-                              &cmd_buffer->pool->alloc);
+                              &cmd_buffer->pool->vk.alloc);
    }
 
    radv_meta_restore(&saved_state, cmd_buffer);
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index aea0802449d..7c7d90e749b 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -55,6 +55,8 @@
 #include "util/rwlock.h"
 #include "util/xmlconfig.h"
 #include "vk_alloc.h"
+#include "vk_command_buffer.h"
+#include "vk_command_pool.h"
 #include "vk_debug_report.h"
 #include "vk_device.h"
 #include "vk_format.h"
@@ -62,7 +64,6 @@
 #include "vk_log.h"
 #include "vk_physical_device.h"
 #include "vk_shader_module.h"
-#include "vk_command_buffer.h"
 #include "vk_queue.h"
 #include "vk_util.h"
 #include "vk_image.h"
@@ -1472,11 +1473,9 @@ struct radv_cmd_state {
 };
 
 struct radv_cmd_pool {
-   struct vk_object_base base;
-   VkAllocationCallbacks alloc;
+   struct vk_command_pool vk;
    struct list_head cmd_buffers;
    struct list_head free_cmd_buffers;
-   uint32_t queue_family_index;
 };
 
 struct radv_cmd_buffer_upload {
@@ -2888,7 +2887,7 @@ VK_DEFINE_HANDLE_CASTS(radv_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE)
 VK_DEFINE_NONDISP_HANDLE_CASTS(radv_acceleration_structure, base,
                                VkAccelerationStructureKHR,
                                VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR)
-VK_DEFINE_NONDISP_HANDLE_CASTS(radv_cmd_pool, base, VkCommandPool,
+VK_DEFINE_NONDISP_HANDLE_CASTS(radv_cmd_pool, vk.base, VkCommandPool,
                                VK_OBJECT_TYPE_COMMAND_POOL)
 VK_DEFINE_NONDISP_HANDLE_CASTS(radv_buffer, base, VkBuffer, VK_OBJECT_TYPE_BUFFER)
 VK_DEFINE_NONDISP_HANDLE_CASTS(radv_buffer_view, base, VkBufferView,



More information about the mesa-commit mailing list