From d87afc1acc3f2f38fff51bbf424e18b4541fa16d Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Wed, 26 May 2021 09:34:04 +0200 Subject: [PATCH] v3dv: implement VK_KHR_get_memory_requirements2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Alejandro PiƱeiro Part-of: --- docs/features.txt | 2 +- src/broadcom/vulkan/v3dv_device.c | 60 ++++++++++++++++------------ src/broadcom/vulkan/v3dv_meta_copy.c | 2 +- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 1c3fa8318e7..336b0b7d34b 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -433,7 +433,7 @@ Vulkan 1.1 -- all DONE: anv, lvp, radv, tu, vn VK_KHR_external_memory_capabilities DONE (anv, lvp, radv, tu, v3dv, vn) VK_KHR_external_semaphore DONE (anv, lvp, radv, tu, vn) VK_KHR_external_semaphore_capabilities DONE (anv, lvp, radv, tu, vn) - VK_KHR_get_memory_requirements2 DONE (anv, lvp, radv, tu, vn) + VK_KHR_get_memory_requirements2 DONE (anv, lvp, radv, tu, v3dv, vn) VK_KHR_get_physical_device_properties2 DONE (anv, lvp, radv, tu, v3dv, vn) VK_KHR_maintenance1 DONE (anv, lvp, radv, tu, v3dv, vn) VK_KHR_maintenance2 DONE (anv, lvp, radv, tu, v3dv, vn) diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c index 197ee0a4185..d1b29102e18 100644 --- a/src/broadcom/vulkan/v3dv_device.c +++ b/src/broadcom/vulkan/v3dv_device.c @@ -133,6 +133,7 @@ get_device_extensions(const struct v3dv_physical_device *device, .KHR_bind_memory2 = true, .KHR_external_memory = true, .KHR_external_memory_fd = true, + .KHR_get_memory_requirements2 = true, .KHR_maintenance1 = true, .KHR_maintenance2 = true, .KHR_maintenance3 = true, @@ -1965,17 +1966,25 @@ v3dv_InvalidateMappedMemoryRanges(VkDevice _device, } void -v3dv_GetImageMemoryRequirements(VkDevice _device, - VkImage _image, - VkMemoryRequirements *pMemoryRequirements) +v3dv_GetImageMemoryRequirements2(VkDevice device, + const VkImageMemoryRequirementsInfo2 *pInfo, + VkMemoryRequirements2 *pMemoryRequirements) { - V3DV_FROM_HANDLE(v3dv_image, image, _image); + V3DV_FROM_HANDLE(v3dv_image, image, pInfo->image); - assert(image->size > 0); + pMemoryRequirements->memoryRequirements = (VkMemoryRequirements) { + .memoryTypeBits = 0x1, + .alignment = image->alignment, + .size = image->size + }; - pMemoryRequirements->size = image->size; - pMemoryRequirements->alignment = image->alignment; - pMemoryRequirements->memoryTypeBits = 0x1; + vk_foreach_struct(ext, pMemoryRequirements->pNext) { + switch (ext->sType) { + default: + v3dv_debug_ignored_stype(ext->sType); + break; + } + } } static void @@ -2009,16 +2018,25 @@ v3dv_BindImageMemory2(VkDevice _device, } void -v3dv_GetBufferMemoryRequirements(VkDevice _device, - VkBuffer _buffer, - VkMemoryRequirements* pMemoryRequirements) +v3dv_GetBufferMemoryRequirements2(VkDevice device, + const VkBufferMemoryRequirementsInfo2 *pInfo, + VkMemoryRequirements2 *pMemoryRequirements) { - V3DV_FROM_HANDLE(v3dv_buffer, buffer, _buffer); + V3DV_FROM_HANDLE(v3dv_buffer, buffer, pInfo->buffer); - pMemoryRequirements->memoryTypeBits = 0x1; - pMemoryRequirements->alignment = buffer->alignment; - pMemoryRequirements->size = - align64(buffer->size, pMemoryRequirements->alignment); + pMemoryRequirements->memoryRequirements = (VkMemoryRequirements) { + .memoryTypeBits = 0x1, + .alignment = buffer->alignment, + .size = align64(buffer->size, buffer->alignment), + }; + + vk_foreach_struct(ext, pMemoryRequirements->pNext) { + switch (ext->sType) { + default: + v3dv_debug_ignored_stype(ext->sType); + break; + } + } } static void @@ -2452,16 +2470,6 @@ v3dv_GetDeviceMemoryCommitment(VkDevice device, *pCommittedMemoryInBytes = 0; } -void -v3dv_GetImageSparseMemoryRequirements( - VkDevice device, - VkImage image, - uint32_t *pSparseMemoryRequirementCount, - VkSparseImageMemoryRequirements *pSparseMemoryRequirements) -{ - *pSparseMemoryRequirementCount = 0; -} - void v3dv_GetImageSparseMemoryRequirements2( VkDevice device, diff --git a/src/broadcom/vulkan/v3dv_meta_copy.c b/src/broadcom/vulkan/v3dv_meta_copy.c index 5b2a2652559..fd3b29ee9c0 100644 --- a/src/broadcom/vulkan/v3dv_meta_copy.c +++ b/src/broadcom/vulkan/v3dv_meta_copy.c @@ -3656,7 +3656,7 @@ copy_buffer_to_image_blit(struct v3dv_cmd_buffer *cmd_buffer, return handled; VkMemoryRequirements reqs; - v3dv_GetImageMemoryRequirements(_device, dummy_image, &reqs); + vk_common_GetImageMemoryRequirements(_device, dummy_image, &reqs); v3dv_DestroyImage(_device, dummy_image, &device->vk.alloc); VkDeviceMemory mem;