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

Author: Dave Airlie <[email protected]>
Date:   Thu Dec  1 09:42:03 2022 +1000

radv: add new upload alloc aligned api

The video buffers need to have objects aligned at certain ranges,
this enhances the uploader to allow an alignment to be specified.

Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20388>

---

 src/amd/vulkan/radv_cmd_buffer.c | 14 ++++++++++++--
 src/amd/vulkan/radv_private.h    |  3 +++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index defe90326e7..90719943990 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -492,8 +492,9 @@ radv_cmd_buffer_resize_upload_buf(struct radv_cmd_buffer 
*cmd_buffer, uint64_t m
 }
 
 bool
-radv_cmd_buffer_upload_alloc(struct radv_cmd_buffer *cmd_buffer, unsigned size,
-                             unsigned *out_offset, void **ptr)
+radv_cmd_buffer_upload_alloc_aligned(struct radv_cmd_buffer *cmd_buffer, 
unsigned size,
+                                     unsigned alignment,
+                                     unsigned *out_offset, void **ptr)
 {
    assert(size % 4 == 0);
 
@@ -508,6 +509,8 @@ radv_cmd_buffer_upload_alloc(struct radv_cmd_buffer 
*cmd_buffer, unsigned size,
    if ((size & (line_size - 1)) > gap)
       offset = align(offset, line_size);
 
+   if (alignment)
+      offset = align(offset, alignment);
    if (offset + size > cmd_buffer->upload.size) {
       if (!radv_cmd_buffer_resize_upload_buf(cmd_buffer, size))
          return false;
@@ -521,6 +524,13 @@ radv_cmd_buffer_upload_alloc(struct radv_cmd_buffer 
*cmd_buffer, unsigned size,
    return true;
 }
 
+bool
+radv_cmd_buffer_upload_alloc(struct radv_cmd_buffer *cmd_buffer, unsigned size,
+                             unsigned *out_offset, void **ptr)
+{
+   return radv_cmd_buffer_upload_alloc_aligned(cmd_buffer, size, 0, 
out_offset, ptr);
+}
+
 bool
 radv_cmd_buffer_upload_data(struct radv_cmd_buffer *cmd_buffer, unsigned size, 
const void *data,
                             unsigned *out_offset)
diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h
index be41a6100bc..f8ccf68c61a 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1804,6 +1804,9 @@ struct radv_ps_epilog_key 
radv_generate_ps_epilog_key(const struct radv_graphics
                                                       bool 
disable_mrt_compaction);
 
 void radv_cmd_buffer_reset_rendering(struct radv_cmd_buffer *cmd_buffer);
+bool radv_cmd_buffer_upload_alloc_aligned(struct radv_cmd_buffer *cmd_buffer, 
unsigned size,
+                                          unsigned alignment,
+                                          unsigned *out_offset, void **ptr);
 bool radv_cmd_buffer_upload_alloc(struct radv_cmd_buffer *cmd_buffer, unsigned 
size,
                                   unsigned *out_offset, void **ptr);
 bool radv_cmd_buffer_upload_data(struct radv_cmd_buffer *cmd_buffer, unsigned 
size,

Reply via email to