From f2397badc4d83f1bec8ceb855aa37db4495928e1 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Wed, 28 Jul 2021 12:29:35 +0300 Subject: [PATCH] anv: implement vkGetDeviceBufferMemoryRequirementsKHR Signed-off-by: Lionel Landwerlin Reviewed-by: Jason Ekstrand Part-of: --- src/intel/vulkan/anv_device.c | 49 ++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 12 deletions(-) diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c index 090830e..fde239c 100644 --- a/src/intel/vulkan/anv_device.c +++ b/src/intel/vulkan/anv_device.c @@ -4208,14 +4208,12 @@ VkResult anv_ResetEvent( // Buffer functions -void anv_GetBufferMemoryRequirements2( - VkDevice _device, - const VkBufferMemoryRequirementsInfo2* pInfo, - VkMemoryRequirements2* pMemoryRequirements) +static void +anv_get_buffer_memory_requirements(struct anv_device *device, + VkDeviceSize size, + VkBufferUsageFlags usage, + VkMemoryRequirements2* pMemoryRequirements) { - ANV_FROM_HANDLE(anv_device, device, _device); - ANV_FROM_HANDLE(anv_buffer, buffer, pInfo->buffer); - /* The Vulkan spec (git aaed022) says: * * memoryTypeBits is a bitfield and contains one bit set for every @@ -4228,10 +4226,10 @@ void anv_GetBufferMemoryRequirements2( /* Base alignment requirement of a cache line */ uint32_t alignment = 16; - if (buffer->usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) + if (usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) alignment = MAX2(alignment, ANV_UBO_ALIGNMENT); - pMemoryRequirements->memoryRequirements.size = buffer->size; + pMemoryRequirements->memoryRequirements.size = size; pMemoryRequirements->memoryRequirements.alignment = alignment; /* Storage and Uniform buffers should have their size aligned to @@ -4240,9 +4238,9 @@ void anv_GetBufferMemoryRequirements2( * 16-bit types. */ if (device->robust_buffer_access && - (buffer->usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT || - buffer->usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)) - pMemoryRequirements->memoryRequirements.size = align_u64(buffer->size, 4); + (usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT || + usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)) + pMemoryRequirements->memoryRequirements.size = align_u64(size, 4); pMemoryRequirements->memoryRequirements.memoryTypeBits = memory_types; @@ -4262,6 +4260,33 @@ void anv_GetBufferMemoryRequirements2( } } +void anv_GetBufferMemoryRequirements2( + VkDevice _device, + const VkBufferMemoryRequirementsInfo2* pInfo, + VkMemoryRequirements2* pMemoryRequirements) +{ + ANV_FROM_HANDLE(anv_device, device, _device); + ANV_FROM_HANDLE(anv_buffer, buffer, pInfo->buffer); + + anv_get_buffer_memory_requirements(device, + buffer->size, + buffer->usage, + pMemoryRequirements); +} + +void anv_GetDeviceBufferMemoryRequirementsKHR( + VkDevice _device, + const VkDeviceBufferMemoryRequirementsKHR* pInfo, + VkMemoryRequirements2* pMemoryRequirements) +{ + ANV_FROM_HANDLE(anv_device, device, _device); + + anv_get_buffer_memory_requirements(device, + pInfo->pCreateInfo->size, + pInfo->pCreateInfo->usage, + pMemoryRequirements); +} + VkResult anv_CreateBuffer( VkDevice _device, const VkBufferCreateInfo* pCreateInfo, -- 2.7.4