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:
baldurk
2017-09-28 15:19:21 +01:00
parent ae32f791ae
commit 651ba25919
12 changed files with 2129 additions and 2253 deletions
+1 -6
View File
@@ -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
View File
@@ -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);
+2
View File
@@ -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++)
{
+10 -18
View File
@@ -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;
+1 -11
View File
@@ -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())
{
+4 -5
View File
@@ -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)
+4
View File
@@ -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
+6 -100
View File
@@ -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);
}