v3dv: implement VK_KHR_get_memory_requirements2

Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11002>
This commit is contained in:
Iago Toral Quiroga 2021-05-26 09:34:04 +02:00
parent 82bd970a0c
commit d87afc1acc
3 changed files with 36 additions and 28 deletions

View File

@ -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_memory_capabilities DONE (anv, lvp, radv, tu, v3dv, vn)
VK_KHR_external_semaphore DONE (anv, lvp, radv, tu, vn) VK_KHR_external_semaphore DONE (anv, lvp, radv, tu, vn)
VK_KHR_external_semaphore_capabilities 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_get_physical_device_properties2 DONE (anv, lvp, radv, tu, v3dv, vn)
VK_KHR_maintenance1 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) VK_KHR_maintenance2 DONE (anv, lvp, radv, tu, v3dv, vn)

View File

@ -133,6 +133,7 @@ get_device_extensions(const struct v3dv_physical_device *device,
.KHR_bind_memory2 = true, .KHR_bind_memory2 = true,
.KHR_external_memory = true, .KHR_external_memory = true,
.KHR_external_memory_fd = true, .KHR_external_memory_fd = true,
.KHR_get_memory_requirements2 = true,
.KHR_maintenance1 = true, .KHR_maintenance1 = true,
.KHR_maintenance2 = true, .KHR_maintenance2 = true,
.KHR_maintenance3 = true, .KHR_maintenance3 = true,
@ -1965,17 +1966,25 @@ v3dv_InvalidateMappedMemoryRanges(VkDevice _device,
} }
void void
v3dv_GetImageMemoryRequirements(VkDevice _device, v3dv_GetImageMemoryRequirements2(VkDevice device,
VkImage _image, const VkImageMemoryRequirementsInfo2 *pInfo,
VkMemoryRequirements *pMemoryRequirements) 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; vk_foreach_struct(ext, pMemoryRequirements->pNext) {
pMemoryRequirements->alignment = image->alignment; switch (ext->sType) {
pMemoryRequirements->memoryTypeBits = 0x1; default:
v3dv_debug_ignored_stype(ext->sType);
break;
}
}
} }
static void static void
@ -2009,16 +2018,25 @@ v3dv_BindImageMemory2(VkDevice _device,
} }
void void
v3dv_GetBufferMemoryRequirements(VkDevice _device, v3dv_GetBufferMemoryRequirements2(VkDevice device,
VkBuffer _buffer, const VkBufferMemoryRequirementsInfo2 *pInfo,
VkMemoryRequirements* pMemoryRequirements) VkMemoryRequirements2 *pMemoryRequirements)
{ {
V3DV_FROM_HANDLE(v3dv_buffer, buffer, _buffer); V3DV_FROM_HANDLE(v3dv_buffer, buffer, pInfo->buffer);
pMemoryRequirements->memoryTypeBits = 0x1; pMemoryRequirements->memoryRequirements = (VkMemoryRequirements) {
pMemoryRequirements->alignment = buffer->alignment; .memoryTypeBits = 0x1,
pMemoryRequirements->size = .alignment = buffer->alignment,
align64(buffer->size, pMemoryRequirements->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 static void
@ -2452,16 +2470,6 @@ v3dv_GetDeviceMemoryCommitment(VkDevice device,
*pCommittedMemoryInBytes = 0; *pCommittedMemoryInBytes = 0;
} }
void
v3dv_GetImageSparseMemoryRequirements(
VkDevice device,
VkImage image,
uint32_t *pSparseMemoryRequirementCount,
VkSparseImageMemoryRequirements *pSparseMemoryRequirements)
{
*pSparseMemoryRequirementCount = 0;
}
void void
v3dv_GetImageSparseMemoryRequirements2( v3dv_GetImageSparseMemoryRequirements2(
VkDevice device, VkDevice device,

View File

@ -3656,7 +3656,7 @@ copy_buffer_to_image_blit(struct v3dv_cmd_buffer *cmd_buffer,
return handled; return handled;
VkMemoryRequirements reqs; VkMemoryRequirements reqs;
v3dv_GetImageMemoryRequirements(_device, dummy_image, &reqs); vk_common_GetImageMemoryRequirements(_device, dummy_image, &reqs);
v3dv_DestroyImage(_device, dummy_image, &device->vk.alloc); v3dv_DestroyImage(_device, dummy_image, &device->vk.alloc);
VkDeviceMemory mem; VkDeviceMemory mem;