aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2024-10-23 06:11:40 +0000
committerLynne <dev@lynne.ee>2024-10-23 08:14:10 +0200
commit9eb7e8d2a4da108c9cf5d25984cf20b613ce593e (patch)
tree5a6d5e952fd2f92446fc7fc9aa8c0ad78f50f014
parent3565903c638fb77d600d2983701b12300e695a5d (diff)
downloadffmpeg-9eb7e8d2a4da108c9cf5d25984cf20b613ce593e.tar.gz
vulkan: move alignment of host-visible allocations outside of ff_vk_alloc_mem
The issue is that if dedicated allocation is used, VkBufferCreateInfo.size and the actual allocated size mismatched, which is a validation error.
-rw-r--r--libavutil/vulkan.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c
index f15f5f8000..39143c6d94 100644
--- a/libavutil/vulkan.c
+++ b/libavutil/vulkan.c
@@ -883,10 +883,6 @@ int ff_vk_alloc_mem(FFVulkanContext *s, VkMemoryRequirements *req,
.pNext = alloc_extension,
};
- /* Align if we need to */
- if ((req_flags != UINT32_MAX) && req_flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
- req->size = FFALIGN(req->size, s->props.properties.limits.minMemoryMapAlignment);
-
alloc_info.allocationSize = req->size;
/* The vulkan spec requires memory types to be sorted in the "optimal"
@@ -939,8 +935,9 @@ int ff_vk_create_buf(FFVulkanContext *s, FFVkBuffer *buf, size_t size,
.pNext = pNext,
.usage = usage,
.sharingMode = VK_SHARING_MODE_EXCLUSIVE,
- .size = size, /* Gets FFALIGNED during alloc if host visible
- but should be ok */
+ .size = flags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT ?
+ FFALIGN(size, s->props.properties.limits.minMemoryMapAlignment) :
+ size,
};
VkMemoryAllocateFlagsInfo alloc_flags = {