diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 08a61ba0e..eaf006b11 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -466,6 +466,7 @@ DECLARE_REFLECTION_STRUCT(VkDeviceCreateInfo); DECLARE_REFLECTION_STRUCT(VkBufferCreateInfo); DECLARE_REFLECTION_STRUCT(VkBufferViewCreateInfo); DECLARE_REFLECTION_STRUCT(VkImageCreateInfo); +DECLARE_REFLECTION_STRUCT(VkMemoryRequirements); DECLARE_REFLECTION_STRUCT(VkImageViewCreateInfo); DECLARE_REFLECTION_STRUCT(VkSparseMemoryBind); DECLARE_REFLECTION_STRUCT(VkBindSparseInfo); diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index add493b7a..3d84b74fe 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -538,6 +538,14 @@ void Deserialise(const VkImageCreateInfo &el) delete[] el.pQueueFamilyIndices; } +template +void DoSerialise(SerialiserType &ser, VkMemoryRequirements &el) +{ + SERIALISE_MEMBER(size); + SERIALISE_MEMBER(alignment); + SERIALISE_MEMBER(memoryTypeBits); +} + template void DoSerialise(SerialiserType &ser, VkImageViewCreateInfo &el) { @@ -1822,6 +1830,7 @@ INSTANTIATE_SERIALISE_TYPE(VkBufferCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkBufferViewCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkImageCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkImageViewCreateInfo); +INSTANTIATE_SERIALISE_TYPE(VkMemoryRequirements); INSTANTIATE_SERIALISE_TYPE(VkSparseMemoryBind); INSTANTIATE_SERIALISE_TYPE(VkBindSparseInfo); INSTANTIATE_SERIALISE_TYPE(VkSubmitInfo); diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index f1e91b4e5..28779132a 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -1081,9 +1081,19 @@ bool WrappedVulkan::Serialise_vkCreateBuffer(SerialiserType &ser, VkDevice devic const VkAllocationCallbacks *pAllocator, VkBuffer *pBuffer) { + VkMemoryRequirements memoryRequirements = {}; + + if(ser.IsWriting()) + { + ObjDisp(device)->GetBufferMemoryRequirements(Unwrap(device), Unwrap(*pBuffer), + &memoryRequirements); + } + SERIALISE_ELEMENT(device); SERIALISE_ELEMENT_LOCAL(CreateInfo, *pCreateInfo); SERIALISE_ELEMENT_LOCAL(Buffer, GetResID(*pBuffer)); + // unused at the moment, just for user information + SERIALISE_ELEMENT(memoryRequirements); SERIALISE_CHECK_READ_ERRORS(); @@ -1298,9 +1308,18 @@ bool WrappedVulkan::Serialise_vkCreateImage(SerialiserType &ser, VkDevice device const VkImageCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkImage *pImage) { + VkMemoryRequirements memoryRequirements = {}; + + if(ser.IsWriting()) + { + ObjDisp(device)->GetImageMemoryRequirements(Unwrap(device), Unwrap(*pImage), &memoryRequirements); + } + SERIALISE_ELEMENT(device); SERIALISE_ELEMENT_LOCAL(CreateInfo, *pCreateInfo); SERIALISE_ELEMENT_LOCAL(Image, GetResID(*pImage)); + // unused at the moment, just for user information + SERIALISE_ELEMENT(memoryRequirements); SERIALISE_CHECK_READ_ERRORS();