Mesa (main): radv: Use vk_buffer

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon May 30 18:32:39 UTC 2022


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

Author: Konstantin Seurer <konstantin.seurer at gmail.com>
Date:   Sat May 28 12:11:20 2022 +0200

radv: Use vk_buffer

Use vk_buffer as a base for radv_buffer and
replace manual handling of VK_WHOLE_SIZE with
vk_buffer_range.

Signed-off-by: Konstantin Seurer <konstantin.seurer at gmail.com>
Reviewed-by: Jason Ekstrand <jason.ekstrand at collabora.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16764>

---

 src/amd/vulkan/radv_android.c             |  4 ++--
 src/amd/vulkan/radv_cmd_buffer.c          |  9 +++++----
 src/amd/vulkan/radv_descriptor_set.c      | 12 ++++--------
 src/amd/vulkan/radv_device.c              | 30 ++++++++++++++++--------------
 src/amd/vulkan/radv_image.c               |  3 +--
 src/amd/vulkan/radv_meta_buffer.c         |  3 +--
 src/amd/vulkan/radv_meta_copy_vrs_htile.c |  2 +-
 src/amd/vulkan/radv_private.h             |  9 +++------
 8 files changed, 33 insertions(+), 39 deletions(-)

diff --git a/src/amd/vulkan/radv_android.c b/src/amd/vulkan/radv_android.c
index 452d6877867..03bc702f1e5 100644
--- a/src/amd/vulkan/radv_android.c
+++ b/src/amd/vulkan/radv_android.c
@@ -737,7 +737,7 @@ radv_import_ahb_memory(struct radv_device *device, struct radv_device_memory *me
          return VK_ERROR_INVALID_EXTERNAL_HANDLE;
       }
    } else if (mem->buffer) {
-      if (alloc_size < mem->buffer->size) {
+      if (alloc_size < mem->buffer->vk.size) {
          device->ws->buffer_destroy(device->ws, mem->bo);
          mem->bo = NULL;
          return VK_ERROR_INVALID_EXTERNAL_HANDLE;
@@ -782,7 +782,7 @@ radv_create_ahb_memory(struct radv_device *device, struct radv_device_memory *me
       usage = radv_ahb_usage_from_vk_usage(image->vk.create_flags, image->vk.usage);
    } else if (dedicated_info && dedicated_info->buffer) {
       RADV_FROM_HANDLE(radv_buffer, buffer, dedicated_info->buffer);
-      w = buffer->size;
+      w = buffer->vk.size;
       format = AHARDWAREBUFFER_FORMAT_BLOB;
       usage = AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN | AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN;
    } else {
diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index f4c1700e07d..066e0e7a3d9 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -3483,7 +3483,7 @@ radv_flush_vertex_descriptors(struct radv_cmd_buffer *cmd_buffer, bool pipeline_
          if (cmd_buffer->vertex_bindings[binding].size) {
             num_records = cmd_buffer->vertex_bindings[binding].size;
          } else {
-            num_records = buffer->size - offset;
+            num_records = vk_buffer_range(&buffer->vk, offset, VK_WHOLE_SIZE);
          }
 
          if (pipeline->uses_dynamic_stride) {
@@ -3634,7 +3634,7 @@ radv_flush_streamout_descriptors(struct radv_cmd_buffer *cmd_buffer)
           * buffer.
           */
          if (cmd_buffer->device->physical_device->use_ngg_streamout)
-            size = buffer->size - sb[i].offset;
+            size = buffer->vk.size - sb[i].offset;
 
          uint32_t rsrc_word3 =
             S_008F0C_DST_SEL_X(V_008F0C_SQ_SEL_X) | S_008F0C_DST_SEL_Y(V_008F0C_SQ_SEL_Y) |
@@ -4841,7 +4841,8 @@ radv_CmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDevice
    cmd_buffer->state.index_va += index_buffer->offset + offset;
 
    int index_size = radv_get_vgt_index_size(vk_to_index_type(indexType));
-   cmd_buffer->state.max_index_count = (index_buffer->size - offset) / index_size;
+   cmd_buffer->state.max_index_count =
+      (vk_buffer_range(&index_buffer->vk, offset, VK_WHOLE_SIZE)) / index_size;
    cmd_buffer->state.dirty |= RADV_CMD_DIRTY_INDEX_BUFFER;
    radv_cs_add_buffer(cmd_buffer->device->ws, cmd_buffer->cs, index_buffer->bo);
 }
@@ -8938,7 +8939,7 @@ radv_CmdBindTransformFeedbackBuffersEXT(VkCommandBuffer commandBuffer, uint32_t
       sb[idx].offset = pOffsets[i];
 
       if (!pSizes || pSizes[i] == VK_WHOLE_SIZE) {
-         sb[idx].size = sb[idx].buffer->size - sb[idx].offset;
+         sb[idx].size = sb[idx].buffer->vk.size - sb[idx].offset;
       } else {
          sb[idx].size = pSizes[i];
       }
diff --git a/src/amd/vulkan/radv_descriptor_set.c b/src/amd/vulkan/radv_descriptor_set.c
index 56e226883e0..92b8dba3a79 100644
--- a/src/amd/vulkan/radv_descriptor_set.c
+++ b/src/amd/vulkan/radv_descriptor_set.c
@@ -1062,11 +1062,9 @@ write_buffer_descriptor(struct radv_device *device, struct radv_cmd_buffer *cmd_
    }
 
    uint64_t va = radv_buffer_get_va(buffer->bo);
-   uint32_t range = buffer_info->range;
 
-   if (buffer_info->range == VK_WHOLE_SIZE)
-      range = buffer->size - buffer_info->offset;
-   assert(buffer->size > 0 && range > 0);
+   uint32_t range = vk_buffer_range(&buffer->vk, buffer_info->offset, buffer_info->range);
+   assert(buffer->vk.size > 0 && range > 0);
 
    /* robustBufferAccess is relaxed enough to allow this (in combination
     * with the alignment/size we return from vkGetBufferMemoryRequirements)
@@ -1128,11 +1126,9 @@ write_dynamic_buffer_descriptor(struct radv_device *device, struct radv_descript
    }
 
    va = radv_buffer_get_va(buffer->bo);
-   size = buffer_info->range;
 
-   if (buffer_info->range == VK_WHOLE_SIZE)
-      size = buffer->size - buffer_info->offset;
-   assert(buffer->size > 0 && size > 0);
+   size = vk_buffer_range(&buffer->vk, buffer_info->offset, buffer_info->range);
+   assert(buffer->vk.size > 0 && size > 0);
 
    /* robustBufferAccess is relaxed enough to allow this (in combination
     * with the alignment/size we return from vkGetBufferMemoryRequirements)
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 7a4bf0e45fa..2437486a6ad 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -5073,7 +5073,8 @@ radv_GetBufferMemoryRequirements2(VkDevice _device, const VkBufferMemoryRequirem
    RADV_FROM_HANDLE(radv_device, device, _device);
    RADV_FROM_HANDLE(radv_buffer, buffer, pInfo->buffer);
 
-   radv_get_buffer_memory_requirements(device, buffer->size, buffer->flags, pMemoryRequirements);
+   radv_get_buffer_memory_requirements(device, buffer->vk.size, buffer->vk.create_flags,
+                                       pMemoryRequirements);
 }
 
 VKAPI_ATTR void VKAPI_CALL
@@ -5321,26 +5322,28 @@ radv_buffer_init(struct radv_buffer *buffer, struct radv_device *device,
                  struct radeon_winsys_bo *bo, uint64_t size,
                  uint64_t offset)
 {
-   vk_object_base_init(&device->vk, &buffer->base, VK_OBJECT_TYPE_BUFFER);
+   VkBufferCreateInfo createInfo = {
+      .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
+      .size = size,
+   };
+
+   vk_buffer_init(&device->vk, &buffer->vk, &createInfo);
 
-   buffer->usage = 0;
-   buffer->flags = 0;
    buffer->bo = bo;
-   buffer->size = size;
    buffer->offset = offset;
 }
 
 void
 radv_buffer_finish(struct radv_buffer *buffer)
 {
-   vk_object_base_finish(&buffer->base);
+   vk_buffer_finish(&buffer->vk);
 }
 
 static void
 radv_destroy_buffer(struct radv_device *device, const VkAllocationCallbacks *pAllocator,
                     struct radv_buffer *buffer)
 {
-   if ((buffer->flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) && buffer->bo)
+   if ((buffer->vk.create_flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) && buffer->bo)
       device->ws->buffer_destroy(device->ws, buffer->bo);
 
    radv_buffer_finish(buffer);
@@ -5361,10 +5364,9 @@ radv_CreateBuffer(VkDevice _device, const VkBufferCreateInfo *pCreateInfo,
    if (buffer == NULL)
       return vk_error(device, VK_ERROR_OUT_OF_HOST_MEMORY);
 
-   radv_buffer_init(buffer, device, NULL, pCreateInfo->size, 0);
-
-   buffer->usage = pCreateInfo->usage;
-   buffer->flags = pCreateInfo->flags;
+   vk_buffer_init(&device->vk, &buffer->vk, pCreateInfo);
+   buffer->bo = NULL;
+   buffer->offset = 0;
 
    if (pCreateInfo->flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) {
       enum radeon_bo_flag flags = RADEON_FLAG_VIRTUAL;
@@ -5377,9 +5379,9 @@ radv_CreateBuffer(VkDevice _device, const VkBufferCreateInfo *pCreateInfo,
       if (replay_info && replay_info->opaqueCaptureAddress)
          replay_address = replay_info->opaqueCaptureAddress;
 
-      VkResult result = device->ws->buffer_create(device->ws, align64(buffer->size, 4096), 4096, 0,
-                                                  flags, RADV_BO_PRIORITY_VIRTUAL,
-                                                  replay_address, &buffer->bo);
+      VkResult result =
+         device->ws->buffer_create(device->ws, align64(buffer->vk.size, 4096), 4096, 0, flags,
+                                   RADV_BO_PRIORITY_VIRTUAL, replay_address, &buffer->bo);
       if (result != VK_SUCCESS) {
          radv_destroy_buffer(device, pAllocator, buffer);
          return vk_error(device, result);
diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c
index 902a0f5469c..84b2d9ef61f 100644
--- a/src/amd/vulkan/radv_image.c
+++ b/src/amd/vulkan/radv_image.c
@@ -2498,8 +2498,7 @@ radv_buffer_view_init(struct radv_buffer_view *view, struct radv_device *device,
    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;
+   view->range = vk_buffer_range(&buffer->vk, pCreateInfo->offset, pCreateInfo->range);
    view->vk_format = pCreateInfo->format;
 
    radv_make_buffer_descriptor(device, buffer, view->vk_format, pCreateInfo->offset, view->range,
diff --git a/src/amd/vulkan/radv_meta_buffer.c b/src/amd/vulkan/radv_meta_buffer.c
index f4eb2c5886b..3f1abf602b4 100644
--- a/src/amd/vulkan/radv_meta_buffer.c
+++ b/src/amd/vulkan/radv_meta_buffer.c
@@ -300,8 +300,7 @@ radv_CmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSi
    RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
    RADV_FROM_HANDLE(radv_buffer, dst_buffer, dstBuffer);
 
-   if (fillSize == VK_WHOLE_SIZE)
-      fillSize = (dst_buffer->size - dstOffset) & ~3ull;
+   fillSize = vk_buffer_range(&dst_buffer->vk, dstOffset, fillSize) & ~3ull;
 
    radv_fill_buffer(cmd_buffer, NULL, dst_buffer->bo,
                     radv_buffer_get_va(dst_buffer->bo) + dst_buffer->offset + dstOffset, fillSize,
diff --git a/src/amd/vulkan/radv_meta_copy_vrs_htile.c b/src/amd/vulkan/radv_meta_copy_vrs_htile.c
index 04fcc57408a..2793aeb8c93 100644
--- a/src/amd/vulkan/radv_meta_copy_vrs_htile.c
+++ b/src/amd/vulkan/radv_meta_copy_vrs_htile.c
@@ -278,7 +278,7 @@ radv_copy_vrs_htile(struct radv_cmd_buffer *cmd_buffer, struct radv_image *vrs_i
           .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
           .pBufferInfo = &(VkDescriptorBufferInfo){.buffer = radv_buffer_to_handle(htile_buffer),
                                                    .offset = 0,
-                                                   .range = htile_buffer->size}}});
+                                                   .range = htile_buffer->vk.size}}});
 
    const unsigned constants[3] = {
       dst_image->planes[0].surface.meta_pitch, dst_image->planes[0].surface.meta_slice_size,
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index b3930a5da4c..5289b174460 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -55,6 +55,7 @@
 #include "util/rwlock.h"
 #include "util/xmlconfig.h"
 #include "vk_alloc.h"
+#include "vk_buffer.h"
 #include "vk_command_buffer.h"
 #include "vk_command_pool.h"
 #include "vk_debug_report.h"
@@ -1028,11 +1029,7 @@ radv_descriptor_set_layout_unref(struct radv_device *device,
 }
 
 struct radv_buffer {
-   struct vk_object_base base;
-   VkDeviceSize size;
-
-   VkBufferUsageFlags usage;
-   VkBufferCreateFlags flags;
+   struct vk_buffer vk;
 
    /* Set when bound */
    struct radeon_winsys_bo *bo;
@@ -3137,7 +3134,7 @@ VK_DEFINE_NONDISP_HANDLE_CASTS(radv_acceleration_structure, base,
                                VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR)
 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, vk.base, VkBuffer, VK_OBJECT_TYPE_BUFFER)
 VK_DEFINE_NONDISP_HANDLE_CASTS(radv_buffer_view, base, VkBufferView,
                                VK_OBJECT_TYPE_BUFFER_VIEW)
 VK_DEFINE_NONDISP_HANDLE_CASTS(radv_descriptor_pool, base, VkDescriptorPool,



More information about the mesa-commit mailing list