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_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)

View File

@ -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,

View File

@ -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;