Mesa (main): anv: implement vkGetDeviceBufferMemoryRequirementsKHR
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Oct 6 02:41:05 UTC 2021
Module: Mesa
Branch: main
Commit: f2397badc4d83f1bec8ceb855aa37db4495928e1
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f2397badc4d83f1bec8ceb855aa37db4495928e1
Author: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Date: Wed Jul 28 12:29:35 2021 +0300
anv: implement vkGetDeviceBufferMemoryRequirementsKHR
Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13199>
---
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 090830e7a2e..fde239caaf3 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,
More information about the mesa-commit
mailing list