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,
