mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-07-08 16:50:44 +00:00
Update Vulkan common struct serialisation & split it into separate file
* This also includes serialising vulkan handles as Ids by type instead of using a macro as before. * In contrast to the old code, we serialise handles as the wrapped type since e.g. when serialising a command buffer in a vkCmd* function we want to get back the wrapped type. This means some structs need to be unwrapped on replay when before they were "pre-unwrapped" after the serialisation, but this isn't a big deal.
This commit is contained in:
@@ -21,6 +21,7 @@ set(sources
|
||||
vk_resources.h
|
||||
vk_state.cpp
|
||||
vk_state.h
|
||||
vk_serialise.cpp
|
||||
vk_stringise.cpp
|
||||
vk_layer.cpp
|
||||
official/vk_layer.h
|
||||
@@ -79,12 +80,6 @@ elseif(UNIX)
|
||||
install (FILES ${json_out} DESTINATION ${VULKAN_LAYER_FOLDER})
|
||||
endif()
|
||||
|
||||
# GCC 6.1 may or may not complain about enum reference casts
|
||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||
set_source_files_properties(vk_common.cpp
|
||||
PROPERTIES COMPILE_FLAGS "-Wno-strict-aliasing")
|
||||
endif()
|
||||
|
||||
add_library(rdoc_vulkan OBJECT ${sources})
|
||||
target_compile_definitions(rdoc_vulkan ${definitions})
|
||||
target_include_directories(rdoc_vulkan ${RDOC_INCLUDES})
|
||||
|
||||
@@ -104,6 +104,7 @@
|
||||
<ClCompile Include="vk_apple.cpp">
|
||||
<ExcludedFromBuild>true</ExcludedFromBuild>
|
||||
</ClCompile>
|
||||
<ClCompile Include="vk_serialise.cpp" />
|
||||
<ClCompile Include="vk_stringise.cpp" />
|
||||
<ClCompile Include="vk_counters.cpp" />
|
||||
<ClCompile Include="vk_dispatchtables.cpp" />
|
||||
|
||||
@@ -100,6 +100,9 @@
|
||||
<ClCompile Include="vk_stringise.cpp">
|
||||
<Filter>Util</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="vk_serialise.cpp">
|
||||
<Filter>Util</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="vk_replay.h">
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+226
-158
@@ -245,164 +245,12 @@ void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
|
||||
ret func(__VA_ARGS__); \
|
||||
bool CONCAT(Serialise_, func(Serialiser *localSerialiser, __VA_ARGS__));
|
||||
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkRect2D &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkDeviceQueueCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPhysicalDeviceFeatures &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPhysicalDeviceMemoryProperties &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPhysicalDeviceProperties &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkDeviceCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkBufferCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkBufferViewCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkImageCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkImageViewCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkSparseMemoryBind &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkBindSparseInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkFramebufferCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkRenderPassCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkRenderPassBeginInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPipelineInputAssemblyStateCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPipelineTessellationStateCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPipelineViewportStateCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPipelineRasterizationStateCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPipelineMultisampleStateCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPipelineDepthStencilStateCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPipelineColorBlendStateCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPipelineDynamicStateCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPipelineLayoutCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPushConstantRange &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkDescriptorSetLayoutBinding &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkDescriptorSetLayoutCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkDescriptorPoolCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkDescriptorSetAllocateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkWriteDescriptorSet &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkCopyDescriptorSet &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkCommandPoolCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkCommandBufferAllocateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkCommandBufferBeginInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkStencilOpState &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkQueryPoolCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkSemaphoreCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkEventCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkFenceCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkSamplerCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkPipelineCacheCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkShaderModuleCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkImageSubresourceRange &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkImageSubresource &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkImageSubresourceLayers &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkMemoryAllocateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkMemoryBarrier &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkBufferMemoryBarrier &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkImageMemoryBarrier &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkGraphicsPipelineCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkComputePipelineCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkComponentMapping &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkComputePipelineCreateInfo &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkBufferImageCopy &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkBufferCopy &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkImageCopy &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkImageBlit &el);
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkImageResolve &el);
|
||||
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, VkSwapchainCreateInfoKHR &el);
|
||||
|
||||
struct DescriptorSetSlot;
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, DescriptorSetSlot &el);
|
||||
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkDeviceCreateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkBufferCreateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkImageCreateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkBindSparseInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkDescriptorSetAllocateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkFramebufferCreateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkRenderPassCreateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkRenderPassBeginInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkCommandBufferBeginInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkPipelineCacheCreateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkPipelineLayoutCreateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkShaderModuleCreateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkGraphicsPipelineCreateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkComputePipelineCreateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkDescriptorPoolCreateInfo *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkWriteDescriptorSet *const el) const;
|
||||
template <>
|
||||
void Serialiser::Deserialise(const VkDescriptorSetLayoutCreateInfo *const el) const;
|
||||
// A handy macros to say "is the serialiser reading and we're doing replay-mode stuff?"
|
||||
// The reason we check both is that checking the first allows the compiler to eliminate the other
|
||||
// path at compile-time, and the second because we might be just struct-serialising in which case we
|
||||
// should be doing no work to restore states.
|
||||
// Writing is unambiguously during capture mode, so we don't have to check both in that case.
|
||||
#define IsReplayingAndReading() (ser.IsReading() && IsReplayMode(m_State))
|
||||
|
||||
// the possible contents of a descriptor set slot,
|
||||
// taken from the VkWriteDescriptorSet
|
||||
@@ -413,6 +261,8 @@ struct DescriptorSetSlot
|
||||
VkBufferView texelBufferView;
|
||||
};
|
||||
|
||||
DECLARE_REFLECTION_STRUCT(DescriptorSetSlot);
|
||||
|
||||
#define NUM_VK_IMAGE_ASPECTS 4
|
||||
#define VK_ACCESS_ALL_READ_BITS \
|
||||
(VK_ACCESS_INDIRECT_COMMAND_READ_BIT | VK_ACCESS_INDEX_READ_BIT | \
|
||||
@@ -560,3 +410,221 @@ enum VulkanChunkType
|
||||
};
|
||||
|
||||
#pragma endregion Chunks
|
||||
|
||||
// this is special - these serialise overloads will fetch the ID during capture, serialise the ID
|
||||
// directly as-if it were the original type, then on replay load up the resource if available.
|
||||
// Really this is only one type of serialisation, but we declare a couple of overloads to account
|
||||
// for resources being accessed through different interfaces in different functions
|
||||
#define SERIALISE_VK_HANDLES() \
|
||||
SERIALISE_HANDLE(VkInstance) \
|
||||
SERIALISE_HANDLE(VkPhysicalDevice) \
|
||||
SERIALISE_HANDLE(VkDevice) \
|
||||
SERIALISE_HANDLE(VkQueue) \
|
||||
SERIALISE_HANDLE(VkCommandBuffer) \
|
||||
SERIALISE_HANDLE(VkFence) \
|
||||
SERIALISE_HANDLE(VkDeviceMemory) \
|
||||
SERIALISE_HANDLE(VkBuffer) \
|
||||
SERIALISE_HANDLE(VkImage) \
|
||||
SERIALISE_HANDLE(VkSemaphore) \
|
||||
SERIALISE_HANDLE(VkEvent) \
|
||||
SERIALISE_HANDLE(VkQueryPool) \
|
||||
SERIALISE_HANDLE(VkBufferView) \
|
||||
SERIALISE_HANDLE(VkImageView) \
|
||||
SERIALISE_HANDLE(VkShaderModule) \
|
||||
SERIALISE_HANDLE(VkPipelineCache) \
|
||||
SERIALISE_HANDLE(VkPipelineLayout) \
|
||||
SERIALISE_HANDLE(VkRenderPass) \
|
||||
SERIALISE_HANDLE(VkPipeline) \
|
||||
SERIALISE_HANDLE(VkDescriptorSetLayout) \
|
||||
SERIALISE_HANDLE(VkSampler) \
|
||||
SERIALISE_HANDLE(VkDescriptorPool) \
|
||||
SERIALISE_HANDLE(VkDescriptorSet) \
|
||||
SERIALISE_HANDLE(VkFramebuffer) \
|
||||
SERIALISE_HANDLE(VkCommandPool) \
|
||||
SERIALISE_HANDLE(VkSwapchainKHR) \
|
||||
SERIALISE_HANDLE(VkSurfaceKHR)
|
||||
|
||||
#define SERIALISE_HANDLE(type) DECLARE_REFLECTION_STRUCT(type)
|
||||
|
||||
SERIALISE_VK_HANDLES();
|
||||
|
||||
// declare reflect-able types
|
||||
|
||||
DECLARE_REFLECTION_STRUCT(VkOffset2D);
|
||||
DECLARE_REFLECTION_STRUCT(VkExtent2D);
|
||||
DECLARE_REFLECTION_STRUCT(VkMemoryType);
|
||||
DECLARE_REFLECTION_STRUCT(VkMemoryHeap);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceLimits);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceSparseProperties);
|
||||
DECLARE_REFLECTION_STRUCT(VkQueueFamilyProperties);
|
||||
DECLARE_REFLECTION_STRUCT(VkExtent3D);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineShaderStageCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkOffset3D);
|
||||
DECLARE_REFLECTION_STRUCT(VkCommandBufferInheritanceInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineVertexInputStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkSparseBufferMemoryBindInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkSparseImageOpaqueMemoryBindInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkSparseImageMemoryBindInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkAttachmentDescription);
|
||||
DECLARE_REFLECTION_STRUCT(VkSubpassDescription);
|
||||
DECLARE_REFLECTION_STRUCT(VkSubpassDependency);
|
||||
DECLARE_REFLECTION_STRUCT(VkClearValue);
|
||||
DECLARE_REFLECTION_STRUCT(VkClearColorValue);
|
||||
DECLARE_REFLECTION_STRUCT(VkClearDepthStencilValue);
|
||||
DECLARE_REFLECTION_STRUCT(VkClearAttachment);
|
||||
DECLARE_REFLECTION_STRUCT(VkClearRect);
|
||||
DECLARE_REFLECTION_STRUCT(VkViewport);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineColorBlendAttachmentState);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorPoolSize);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorImageInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorBufferInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkSpecializationInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkAttachmentReference);
|
||||
DECLARE_REFLECTION_STRUCT(VkSparseImageMemoryBind);
|
||||
DECLARE_REFLECTION_STRUCT(VkVertexInputBindingDescription);
|
||||
DECLARE_REFLECTION_STRUCT(VkVertexInputAttributeDescription);
|
||||
DECLARE_REFLECTION_STRUCT(VkSpecializationMapEntry);
|
||||
DECLARE_REFLECTION_STRUCT(VkRect2D);
|
||||
DECLARE_REFLECTION_STRUCT(VkDeviceQueueCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceFeatures);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceMemoryProperties);
|
||||
DECLARE_REFLECTION_STRUCT(VkPhysicalDeviceProperties);
|
||||
DECLARE_REFLECTION_STRUCT(VkDeviceCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkBufferCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkBufferViewCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageViewCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkSparseMemoryBind);
|
||||
DECLARE_REFLECTION_STRUCT(VkBindSparseInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkSubmitInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkFramebufferCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkRenderPassCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkRenderPassBeginInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineInputAssemblyStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineTessellationStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineViewportStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineRasterizationStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineMultisampleStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineDepthStencilStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineColorBlendStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineDynamicStateCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineLayoutCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPushConstantRange);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorSetLayoutBinding);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorSetLayoutCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorPoolCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkDescriptorSetAllocateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkWriteDescriptorSet);
|
||||
DECLARE_REFLECTION_STRUCT(VkCopyDescriptorSet);
|
||||
DECLARE_REFLECTION_STRUCT(VkCommandPoolCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkCommandBufferAllocateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkCommandBufferBeginInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkStencilOpState);
|
||||
DECLARE_REFLECTION_STRUCT(VkQueryPoolCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkSemaphoreCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkEventCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkFenceCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkSamplerCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkPipelineCacheCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkShaderModuleCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageSubresourceRange);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageSubresource);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageSubresourceLayers);
|
||||
DECLARE_REFLECTION_STRUCT(VkMemoryAllocateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkMemoryBarrier);
|
||||
DECLARE_REFLECTION_STRUCT(VkBufferMemoryBarrier);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageMemoryBarrier);
|
||||
DECLARE_REFLECTION_STRUCT(VkGraphicsPipelineCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkComputePipelineCreateInfo);
|
||||
DECLARE_REFLECTION_STRUCT(VkComponentMapping);
|
||||
DECLARE_REFLECTION_STRUCT(VkMappedMemoryRange);
|
||||
DECLARE_REFLECTION_STRUCT(VkBufferImageCopy);
|
||||
DECLARE_REFLECTION_STRUCT(VkBufferCopy);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageCopy);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageBlit);
|
||||
DECLARE_REFLECTION_STRUCT(VkImageResolve);
|
||||
DECLARE_REFLECTION_STRUCT(VkSwapchainCreateInfoKHR);
|
||||
DECLARE_REFLECTION_STRUCT(VkDebugMarkerMarkerInfoEXT);
|
||||
|
||||
DECLARE_DESERIALISE_TYPE(VkDeviceCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkBufferCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkImageCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkBindSparseInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkSubmitInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkDescriptorSetAllocateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkFramebufferCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkRenderPassCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkRenderPassBeginInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkCommandBufferBeginInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineCacheCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkPipelineLayoutCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkShaderModuleCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkGraphicsPipelineCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkComputePipelineCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkDescriptorPoolCreateInfo);
|
||||
DECLARE_DESERIALISE_TYPE(VkWriteDescriptorSet);
|
||||
DECLARE_DESERIALISE_TYPE(VkDescriptorSetLayoutCreateInfo);
|
||||
|
||||
DECLARE_REFLECTION_ENUM(VkFlagWithNoBits);
|
||||
DECLARE_REFLECTION_ENUM(VkQueueFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkPipelineCreateFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkPipelineStageFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkBufferUsageFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkImageUsageFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkBufferCreateFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkImageCreateFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkSparseMemoryBindFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkCommandPoolCreateFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkCommandPoolResetFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkCommandBufferUsageFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkDescriptorPoolCreateFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkFenceCreateFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkQueryPipelineStatisticFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkQueryControlFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkQueryResultFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkAttachmentDescriptionFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkSampleCountFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkImageAspectFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkDependencyFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkShaderStageFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkMemoryHeapFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkMemoryPropertyFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkAccessFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkStencilFaceFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkCullModeFlagBits);
|
||||
DECLARE_REFLECTION_ENUM(VkPipelineBindPoint);
|
||||
DECLARE_REFLECTION_ENUM(VkIndexType);
|
||||
DECLARE_REFLECTION_ENUM(VkImageType);
|
||||
DECLARE_REFLECTION_ENUM(VkImageTiling);
|
||||
DECLARE_REFLECTION_ENUM(VkImageViewType);
|
||||
DECLARE_REFLECTION_ENUM(VkVertexInputRate);
|
||||
DECLARE_REFLECTION_ENUM(VkPolygonMode);
|
||||
DECLARE_REFLECTION_ENUM(VkFrontFace);
|
||||
DECLARE_REFLECTION_ENUM(VkBlendFactor);
|
||||
DECLARE_REFLECTION_ENUM(VkBlendOp);
|
||||
DECLARE_REFLECTION_ENUM(VkDynamicState);
|
||||
DECLARE_REFLECTION_ENUM(VkAttachmentLoadOp);
|
||||
DECLARE_REFLECTION_ENUM(VkAttachmentStoreOp);
|
||||
DECLARE_REFLECTION_ENUM(VkStencilOp);
|
||||
DECLARE_REFLECTION_ENUM(VkLogicOp);
|
||||
DECLARE_REFLECTION_ENUM(VkCompareOp);
|
||||
DECLARE_REFLECTION_ENUM(VkFilter);
|
||||
DECLARE_REFLECTION_ENUM(VkSamplerMipmapMode);
|
||||
DECLARE_REFLECTION_ENUM(VkSamplerAddressMode);
|
||||
DECLARE_REFLECTION_ENUM(VkBorderColor);
|
||||
DECLARE_REFLECTION_ENUM(VkPrimitiveTopology);
|
||||
DECLARE_REFLECTION_ENUM(VkDescriptorType);
|
||||
DECLARE_REFLECTION_ENUM(VkQueryType);
|
||||
DECLARE_REFLECTION_ENUM(VkPhysicalDeviceType);
|
||||
DECLARE_REFLECTION_ENUM(VkSharingMode);
|
||||
DECLARE_REFLECTION_ENUM(VkCommandBufferLevel);
|
||||
DECLARE_REFLECTION_ENUM(VkSubpassContents);
|
||||
DECLARE_REFLECTION_ENUM(VkImageLayout);
|
||||
DECLARE_REFLECTION_ENUM(VkStructureType);
|
||||
DECLARE_REFLECTION_ENUM(VkComponentSwizzle);
|
||||
DECLARE_REFLECTION_ENUM(VkFormat);
|
||||
DECLARE_REFLECTION_ENUM(VkResult);
|
||||
DECLARE_REFLECTION_ENUM(VkSurfaceTransformFlagBitsKHR);
|
||||
DECLARE_REFLECTION_ENUM(VkCompositeAlphaFlagBitsKHR);
|
||||
DECLARE_REFLECTION_ENUM(VkColorSpaceKHR);
|
||||
DECLARE_REFLECTION_ENUM(VkPresentModeKHR);
|
||||
|
||||
@@ -4955,6 +4955,8 @@ struct VulkanQuadOverdrawCallback : public VulkanDrawcallCallback
|
||||
|
||||
m_pDriver->GetResourceManager()->WrapResource(Unwrap(dev), module);
|
||||
|
||||
m_pDriver->GetResourceManager()->AddLiveResource(GetResID(module), module);
|
||||
|
||||
bool found = false;
|
||||
for(uint32_t i = 0; i < pipeCreateInfo.stageCount; i++)
|
||||
{
|
||||
|
||||
@@ -58,15 +58,7 @@ void DescSetLayout::Init(VulkanResourceManager *resourceMan, VulkanCreationInfo
|
||||
bindings[b].immutableSampler = new ResourceId[bindings[b].descriptorCount];
|
||||
|
||||
for(uint32_t s = 0; s < bindings[b].descriptorCount; s++)
|
||||
{
|
||||
// during writing, the create info contains the *wrapped* objects.
|
||||
// on replay, we have the wrapper map so we can look it up
|
||||
if(resourceMan->IsWriting())
|
||||
bindings[b].immutableSampler[s] = GetResID(pCreateInfo->pBindings[i].pImmutableSamplers[s]);
|
||||
else
|
||||
bindings[b].immutableSampler[s] =
|
||||
resourceMan->GetNonDispWrapper(pCreateInfo->pBindings[i].pImmutableSamplers[s])->id;
|
||||
}
|
||||
bindings[b].immutableSampler[s] = GetResID(pCreateInfo->pBindings[i].pImmutableSamplers[s]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -125,8 +117,8 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, Vulk
|
||||
{
|
||||
flags = pCreateInfo->flags;
|
||||
|
||||
layout = resourceMan->GetNonDispWrapper(pCreateInfo->layout)->id;
|
||||
renderpass = resourceMan->GetNonDispWrapper(pCreateInfo->renderPass)->id;
|
||||
layout = GetResID(pCreateInfo->layout);
|
||||
renderpass = GetResID(pCreateInfo->renderPass);
|
||||
subpass = pCreateInfo->subpass;
|
||||
|
||||
// need to figure out which states are valid to be NULL
|
||||
@@ -134,7 +126,7 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, Vulk
|
||||
// VkPipelineShaderStageCreateInfo
|
||||
for(uint32_t i = 0; i < pCreateInfo->stageCount; i++)
|
||||
{
|
||||
ResourceId id = resourceMan->GetNonDispWrapper(pCreateInfo->pStages[i].module)->id;
|
||||
ResourceId id = GetResID(pCreateInfo->pStages[i].module);
|
||||
|
||||
// convert shader bit to shader index
|
||||
int stageIndex = StageIndex(pCreateInfo->pStages[i].stage);
|
||||
@@ -358,13 +350,13 @@ void VulkanCreationInfo::Pipeline::Init(VulkanResourceManager *resourceMan, Vulk
|
||||
{
|
||||
flags = pCreateInfo->flags;
|
||||
|
||||
layout = resourceMan->GetNonDispWrapper(pCreateInfo->layout)->id;
|
||||
layout = GetResID(pCreateInfo->layout);
|
||||
|
||||
// need to figure out which states are valid to be NULL
|
||||
|
||||
// VkPipelineShaderStageCreateInfo
|
||||
{
|
||||
ResourceId id = resourceMan->GetNonDispWrapper(pCreateInfo->stage.module)->id;
|
||||
ResourceId id = GetResID(pCreateInfo->stage.module);
|
||||
Shader &shad = shaders[5]; // 5 is the compute shader's index (VS, TCS, TES, GS, FS, CS)
|
||||
|
||||
shad.module = id;
|
||||
@@ -451,7 +443,7 @@ void VulkanCreationInfo::PipelineLayout::Init(VulkanResourceManager *resourceMan
|
||||
{
|
||||
descSetLayouts.resize(pCreateInfo->setLayoutCount);
|
||||
for(uint32_t i = 0; i < pCreateInfo->setLayoutCount; i++)
|
||||
descSetLayouts[i] = resourceMan->GetNonDispWrapper(pCreateInfo->pSetLayouts[i])->id;
|
||||
descSetLayouts[i] = GetResID(pCreateInfo->pSetLayouts[i]);
|
||||
|
||||
pushRanges.reserve(pCreateInfo->pushConstantRangeCount);
|
||||
for(uint32_t i = 0; i < pCreateInfo->pushConstantRangeCount; i++)
|
||||
@@ -514,7 +506,7 @@ void VulkanCreationInfo::Framebuffer::Init(VulkanResourceManager *resourceMan,
|
||||
attachments.resize(pCreateInfo->attachmentCount);
|
||||
for(uint32_t i = 0; i < pCreateInfo->attachmentCount; i++)
|
||||
{
|
||||
attachments[i].view = resourceMan->GetNonDispWrapper(pCreateInfo->pAttachments[i])->id;
|
||||
attachments[i].view = GetResID(pCreateInfo->pAttachments[i]);
|
||||
attachments[i].format = info.m_ImageView[attachments[i].view].format;
|
||||
}
|
||||
}
|
||||
@@ -536,7 +528,7 @@ void VulkanCreationInfo::BufferView::Init(VulkanResourceManager *resourceMan,
|
||||
VulkanCreationInfo &info,
|
||||
const VkBufferViewCreateInfo *pCreateInfo)
|
||||
{
|
||||
buffer = resourceMan->GetNonDispWrapper(pCreateInfo->buffer)->id;
|
||||
buffer = GetResID(pCreateInfo->buffer);
|
||||
offset = pCreateInfo->offset;
|
||||
size = pCreateInfo->range;
|
||||
}
|
||||
@@ -608,7 +600,7 @@ static TextureSwizzle Convert(VkComponentSwizzle s, int i)
|
||||
void VulkanCreationInfo::ImageView::Init(VulkanResourceManager *resourceMan, VulkanCreationInfo &info,
|
||||
const VkImageViewCreateInfo *pCreateInfo)
|
||||
{
|
||||
image = resourceMan->GetNonDispWrapper(pCreateInfo->image)->id;
|
||||
image = GetResID(pCreateInfo->image);
|
||||
format = pCreateInfo->format;
|
||||
range = pCreateInfo->subresourceRange;
|
||||
|
||||
|
||||
@@ -25,16 +25,6 @@
|
||||
#include "vk_manager.h"
|
||||
#include "vk_core.h"
|
||||
|
||||
template <>
|
||||
void Serialiser::Serialise(const char *name, ImageRegionState &el)
|
||||
{
|
||||
ScopedContext scope(this, name, "ImageRegionState", 0, true);
|
||||
|
||||
Serialise("range", el.subresourceRange);
|
||||
Serialise("prevstate", el.oldLayout);
|
||||
Serialise("state", el.newLayout);
|
||||
}
|
||||
|
||||
bool VulkanResourceManager::SerialisableResource(ResourceId id, VkResourceRecord *record)
|
||||
{
|
||||
if(record->SpecialResource || id == m_Core->GetContextResourceID())
|
||||
@@ -208,7 +198,7 @@ void VulkanResourceManager::RecordBarriers(vector<pair<ResourceId, ImageRegionSt
|
||||
{
|
||||
const VkImageMemoryBarrier &t = barriers[ti];
|
||||
|
||||
ResourceId id = m_State < WRITING ? GetNonDispWrapper(t.image)->id : GetResID(t.image);
|
||||
ResourceId id = IsReplayMode(m_State) ? GetNonDispWrapper(t.image)->id : GetResID(t.image);
|
||||
|
||||
if(id == ResourceId())
|
||||
{
|
||||
|
||||
@@ -3293,8 +3293,7 @@ void VulkanReplay::SavePipelineState()
|
||||
}
|
||||
else if(info[a].imageInfo.sampler != VK_NULL_HANDLE)
|
||||
{
|
||||
dst.bindings[b].binds[a].sampler =
|
||||
rm->GetNonDispWrapper(info[a].imageInfo.sampler)->id;
|
||||
dst.bindings[b].binds[a].sampler = GetResID(info[a].imageInfo.sampler);
|
||||
}
|
||||
|
||||
if(dst.bindings[b].binds[a].sampler != ResourceId())
|
||||
@@ -3339,7 +3338,7 @@ void VulkanReplay::SavePipelineState()
|
||||
|
||||
if(view != VK_NULL_HANDLE)
|
||||
{
|
||||
ResourceId viewid = rm->GetNonDispWrapper(view)->id;
|
||||
ResourceId viewid = GetResID(view);
|
||||
|
||||
dst.bindings[b].binds[a].view = rm->GetOriginalID(viewid);
|
||||
dst.bindings[b].binds[a].res = rm->GetOriginalID(c.m_ImageView[viewid].image);
|
||||
@@ -3369,7 +3368,7 @@ void VulkanReplay::SavePipelineState()
|
||||
|
||||
if(view != VK_NULL_HANDLE)
|
||||
{
|
||||
ResourceId viewid = rm->GetNonDispWrapper(view)->id;
|
||||
ResourceId viewid = GetResID(view);
|
||||
|
||||
dst.bindings[b].binds[a].view = rm->GetOriginalID(viewid);
|
||||
dst.bindings[b].binds[a].res = rm->GetOriginalID(c.m_BufferView[viewid].buffer);
|
||||
@@ -3408,7 +3407,7 @@ void VulkanReplay::SavePipelineState()
|
||||
|
||||
if(info[a].bufferInfo.buffer != VK_NULL_HANDLE)
|
||||
dst.bindings[b].binds[a].res =
|
||||
rm->GetOriginalID(rm->GetNonDispWrapper(info[a].bufferInfo.buffer)->id);
|
||||
rm->GetOriginalID(GetResID(info[a].bufferInfo.buffer));
|
||||
|
||||
dst.bindings[b].binds[a].offset = info[a].bufferInfo.offset;
|
||||
if(dynamicOffset)
|
||||
|
||||
@@ -817,6 +817,8 @@ struct ImageRegionState
|
||||
VkImageLayout newLayout;
|
||||
};
|
||||
|
||||
DECLARE_REFLECTION_STRUCT(ImageRegionState);
|
||||
|
||||
struct SwapchainInfo
|
||||
{
|
||||
VkFormat format;
|
||||
@@ -1147,6 +1149,8 @@ struct ImageLayouts
|
||||
VkFormat format;
|
||||
};
|
||||
|
||||
DECLARE_REFLECTION_STRUCT(ImageLayouts);
|
||||
|
||||
bool IsBlockFormat(VkFormat f);
|
||||
bool IsDepthOrStencilFormat(VkFormat f);
|
||||
bool IsDepthAndStencilFormat(VkFormat f);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1310,106 +1310,6 @@ std::string DoStringise(const VkResult &el)
|
||||
END_ENUM_STRINGISE();
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkMemoryType &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkMemoryType<heap %u, %s>", el.heapIndex,
|
||||
ToStr((VkMemoryPropertyFlagBits)el.propertyFlags).c_str());
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkMemoryHeap &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkMemoryHeap<%.3fMB, %s>", float(el.size) / (1024.0f * 1024.0f),
|
||||
ToStr((VkMemoryHeapFlagBits)el.flags).c_str());
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkRect2D &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkRect2D<%dx%d+%d+%d>", el.extent.width, el.extent.height, el.offset.x,
|
||||
el.offset.y);
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkClearRect &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkClearRect<%dx%d+%d+%d %u->%u>", el.rect.extent.width,
|
||||
el.rect.extent.height, el.rect.offset.x, el.rect.offset.y,
|
||||
el.baseArrayLayer, el.baseArrayLayer + el.layerCount);
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkClearAttachment &el)
|
||||
{
|
||||
return StringFormat::Fmt("%s[%u] = %s", ToStr((VkImageAspectFlagBits)el.aspectMask).c_str(),
|
||||
el.colorAttachment, ToStr(el.clearValue).c_str());
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkQueueFamilyProperties &el)
|
||||
{
|
||||
return StringFormat::Fmt("%s x %u, %u bits, %s", ToStr((VkQueueFlagBits)el.queueFlags).c_str(),
|
||||
el.queueCount, el.timestampValidBits,
|
||||
ToStr(el.minImageTransferGranularity).c_str());
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkExtent2D &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkExtent<%u,%u>", el.width, el.height);
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkExtent3D &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkExtent<%u,%u,%u>", el.width, el.height, el.depth);
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkOffset2D &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkOffset<%d,%d>", el.x, el.y);
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkOffset3D &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkOffset<%d,%d,%d>", el.x, el.y, el.z);
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkViewport &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkViewport<%f,%f, %fx%f, %f-%f>", el.x, el.y, el.width, el.height,
|
||||
el.minDepth, el.maxDepth);
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkClearColorValue &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkClearColorValue<%f,%f,%f,%f>", el.float32[0], el.float32[1],
|
||||
el.float32[2], el.float32[3]);
|
||||
}
|
||||
template <>
|
||||
std::string DoStringise(const VkClearDepthStencilValue &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkClearDepthStencilValue<%f %u>", el.depth, el.stencil);
|
||||
}
|
||||
template <>
|
||||
std::string DoStringise(const VkClearValue &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkClearValue[ col:<%f,%f,%f,%f> / d:%f s:%u ]", el.color.float32[0],
|
||||
el.color.float32[1], el.color.float32[2], el.color.float32[3],
|
||||
el.depthStencil.depth, el.depthStencil.stencil);
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkAttachmentReference &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkAttachmentReference<%u, %s>", el.attachment, ToStr(el.layout).c_str());
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
// VK_KHR_surface
|
||||
////////////////////////////////////////////////////////////
|
||||
@@ -1484,3 +1384,9 @@ std::string DoStringise(const VkPresentModeKHR &el)
|
||||
}
|
||||
END_ENUM_STRINGISE();
|
||||
}
|
||||
|
||||
template <>
|
||||
std::string DoStringise(const VkExtent3D &el)
|
||||
{
|
||||
return StringFormat::Fmt("VkExtent3D(%u, %u, %u)", el.width, el.height, el.depth);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user