nvk: Rework memory requirements to handle aspects correctly
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:

committed by
Marge Bot

parent
733d20277c
commit
af72961ff1
@@ -620,26 +620,19 @@ nvk_image_plane_add_req(struct nvk_image_plane *plane,
|
|||||||
*size_B += plane->nil.size_B;
|
*size_B += plane->nil.size_B;
|
||||||
}
|
}
|
||||||
|
|
||||||
VKAPI_ATTR void VKAPI_CALL
|
static void
|
||||||
nvk_GetImageMemoryRequirements2(VkDevice device,
|
nvk_get_image_memory_requirements(struct nvk_device *dev,
|
||||||
const VkImageMemoryRequirementsInfo2 *pInfo,
|
struct nvk_image *image,
|
||||||
VkMemoryRequirements2 *pMemoryRequirements)
|
VkImageAspectFlags aspects,
|
||||||
|
VkMemoryRequirements2 *pMemoryRequirements)
|
||||||
{
|
{
|
||||||
VK_FROM_HANDLE(nvk_device, dev, device);
|
|
||||||
VK_FROM_HANDLE(nvk_image, image, pInfo->image);
|
|
||||||
|
|
||||||
uint32_t memory_types = (1 << dev->pdev->mem_type_cnt) - 1;
|
uint32_t memory_types = (1 << dev->pdev->mem_type_cnt) - 1;
|
||||||
|
|
||||||
// TODO hope for the best?
|
// TODO hope for the best?
|
||||||
|
|
||||||
VkImageAspectFlags aspects = image->vk.aspects;
|
|
||||||
|
|
||||||
uint64_t size_B = 0;
|
uint64_t size_B = 0;
|
||||||
uint32_t align_B = 0;
|
uint32_t align_B = 0;
|
||||||
if (image->disjoint) {
|
if (image->disjoint) {
|
||||||
const VkImagePlaneMemoryRequirementsInfo *plane_memory_req_info =
|
|
||||||
vk_find_struct_const(pInfo->pNext, IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO);
|
|
||||||
aspects = plane_memory_req_info->planeAspect;
|
|
||||||
uint8_t plane = nvk_image_aspects_to_plane(image, aspects);
|
uint8_t plane = nvk_image_aspects_to_plane(image, aspects);
|
||||||
nvk_image_plane_add_req(&image->planes[plane], &size_B, &align_B);
|
nvk_image_plane_add_req(&image->planes[plane], &size_B, &align_B);
|
||||||
} else {
|
} else {
|
||||||
@@ -674,6 +667,23 @@ nvk_GetImageMemoryRequirements2(VkDevice device,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VKAPI_ATTR void VKAPI_CALL
|
||||||
|
nvk_GetImageMemoryRequirements2(VkDevice device,
|
||||||
|
const VkImageMemoryRequirementsInfo2 *pInfo,
|
||||||
|
VkMemoryRequirements2 *pMemoryRequirements)
|
||||||
|
{
|
||||||
|
VK_FROM_HANDLE(nvk_device, dev, device);
|
||||||
|
VK_FROM_HANDLE(nvk_image, image, pInfo->image);
|
||||||
|
|
||||||
|
const VkImagePlaneMemoryRequirementsInfo *plane_info =
|
||||||
|
vk_find_struct_const(pInfo->pNext, IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO);
|
||||||
|
const VkImageAspectFlags aspects =
|
||||||
|
image->disjoint ? plane_info->planeAspect : image->vk.aspects;
|
||||||
|
|
||||||
|
nvk_get_image_memory_requirements(dev, image, aspects,
|
||||||
|
pMemoryRequirements);
|
||||||
|
}
|
||||||
|
|
||||||
VKAPI_ATTR void VKAPI_CALL
|
VKAPI_ATTR void VKAPI_CALL
|
||||||
nvk_GetDeviceImageMemoryRequirements(VkDevice device,
|
nvk_GetDeviceImageMemoryRequirements(VkDevice device,
|
||||||
const VkDeviceImageMemoryRequirementsKHR *pInfo,
|
const VkDeviceImageMemoryRequirementsKHR *pInfo,
|
||||||
@@ -686,12 +696,12 @@ nvk_GetDeviceImageMemoryRequirements(VkDevice device,
|
|||||||
result = nvk_image_init(dev, &image, pInfo->pCreateInfo);
|
result = nvk_image_init(dev, &image, pInfo->pCreateInfo);
|
||||||
assert(result == VK_SUCCESS);
|
assert(result == VK_SUCCESS);
|
||||||
|
|
||||||
VkImageMemoryRequirementsInfo2 info2 = {
|
const VkImageAspectFlags aspects =
|
||||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
|
image.disjoint ? pInfo->planeAspect : image.vk.aspects;
|
||||||
.image = nvk_image_to_handle(&image),
|
|
||||||
};
|
nvk_get_image_memory_requirements(dev, &image, aspects,
|
||||||
|
pMemoryRequirements);
|
||||||
|
|
||||||
nvk_GetImageMemoryRequirements2(device, &info2, pMemoryRequirements);
|
|
||||||
nvk_image_finish(dev, &image, NULL);
|
nvk_image_finish(dev, &image, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user