Serialise out command pools

This commit is contained in:
baldurk
2016-02-07 18:37:40 +01:00
parent 0004a70984
commit fa621c61b2
6 changed files with 125 additions and 0 deletions
+13
View File
@@ -1549,6 +1549,19 @@ void Serialiser::Serialise(const char *name, VkClearColorValue &el)
Serialise<4>("u32", el.u32);
}
template<>
void Serialiser::Serialise(const char *name, VkCmdPoolCreateInfo &el)
{
ScopedContext scope(this, this, name, "VkCmdPoolCreateInfo", 0, true);
RDCASSERT(m_Mode < WRITING || el.sType == VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO);
Serialise("sType", el.sType);
SerialiseNext(this, el.pNext);
Serialise("queueFamilyIndex", el.queueFamilyIndex);
Serialise("flags", (VkCmdPoolCreateFlagBits &)el.flags);
}
template<>
void Serialiser::Serialise(const char *name, VkCmdBufferCreateInfo &el)
{
+5
View File
@@ -76,6 +76,7 @@ template<> void Serialiser::Serialise(const char *name, VkDescriptorPoolCreateIn
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, VkClearColorValue &el);
template<> void Serialiser::Serialise(const char *name, VkCmdPoolCreateInfo &el);
template<> void Serialiser::Serialise(const char *name, VkCmdBufferCreateInfo &el);
template<> void Serialiser::Serialise(const char *name, VkCmdBufferBeginInfo &el);
template<> void Serialiser::Serialise(const char *name, VkStencilOpState &el);
@@ -114,6 +115,10 @@ enum VulkanChunkType
ALLOC_MEM,
UNMAP_MEM,
FREE_MEM,
CREATE_CMD_POOL,
RESET_CMD_POOL,
CREATE_CMD_BUFFER,
CREATE_FRAMEBUFFER,
CREATE_RENDERPASS,
+83
View File
@@ -48,6 +48,10 @@ const char *VkChunkNames[] =
"vkAllocMemory",
"vkUnmapMemory",
"vkFreeMemory",
"vkCreateCommandPool",
"vkResetCommandPool",
"vkCreateCommandBuffer",
"vkCreateFramebuffer",
"vkCreateRenderPass",
@@ -743,6 +747,7 @@ DESTROY_IMPL(VkDynamicViewportState, vkDestroyDynamicViewportState)
DESTROY_IMPL(VkDynamicRasterState, vkDestroyDynamicRasterState)
DESTROY_IMPL(VkDynamicColorBlendState, vkDestroyDynamicColorBlendState)
DESTROY_IMPL(VkDynamicDepthStencilState, vkDestroyDynamicDepthStencilState)
DESTROY_IMPL(VkCmdPool, vkDestroyCommandPool)
DESTROY_IMPL(VkCmdBuffer, vkDestroyCommandBuffer)
DESTROY_IMPL(VkFramebuffer, vkDestroyFramebuffer)
DESTROY_IMPL(VkRenderPass, vkDestroyRenderPass)
@@ -2596,6 +2601,81 @@ VkResult WrappedVulkan::vkCreateDynamicDepthStencilState(
return ret;
}
// Command pool functions
bool WrappedVulkan::Serialise_vkCreateCommandPool(
VkDevice device,
const VkCmdPoolCreateInfo* pCreateInfo,
VkCmdPool* pCmdPool)
{
SERIALISE_ELEMENT(ResourceId, devId, GetResourceManager()->GetID(MakeRes(device)));
SERIALISE_ELEMENT(VkCmdPoolCreateInfo, info, *pCreateInfo);
SERIALISE_ELEMENT(ResourceId, id, GetResourceManager()->GetID(MakeRes(*pCmdPool)));
if(m_State == READING)
{
VkCmdPool pool = VK_NULL_HANDLE;
VkResult ret = m_Real.vkCreateCommandPool((VkDevice)GetResourceManager()->GetLiveResource(devId).handle, &info, &pool);
if(ret != VK_SUCCESS)
{
RDCERR("Failed on resource serialise-creation, VkResult: 0x%08x", ret);
}
else
{
ResourceId live = GetResourceManager()->RegisterResource(MakeRes(pool));
GetResourceManager()->AddLiveResource(id, MakeRes(pool));
}
}
return true;
}
VkResult WrappedVulkan::vkCreateCommandPool(
VkDevice device,
const VkCmdPoolCreateInfo* pCreateInfo,
VkCmdPool* pCmdPool)
{
VkResult ret = m_Real.vkCreateCommandPool(device, pCreateInfo, pCmdPool);
if(ret == VK_SUCCESS)
{
VkResource res = MakeRes(*pCmdPool);
ResourceId id = GetResourceManager()->RegisterResource(res);
if(m_State >= WRITING)
{
Chunk *chunk = NULL;
{
SCOPED_SERIALISE_CONTEXT(CREATE_CMD_POOL);
Serialise_vkCreateCommandPool(device, pCreateInfo, pCmdPool);
chunk = scope.Get();
}
m_DeviceRecord->AddChunk(chunk);
}
else
{
GetResourceManager()->AddLiveResource(id, res);
}
}
return ret;
}
VkResult WrappedVulkan::vkResetCommandPool(
VkDevice device,
VkCmdPool cmdPool,
VkCmdPoolResetFlags flags)
{
// VKTODO do I need to serialise this? just a driver hint..
return vkResetCommandPool(device, cmdPool, flags);
}
// Command buffer functions
VkResult WrappedVulkan::vkCreateCommandBuffer(
@@ -5344,6 +5424,9 @@ void WrappedVulkan::ProcessChunk(uint64_t offset, VulkanChunkType context)
case FREE_MEM:
Serialise_vkFreeMemory(VK_NULL_HANDLE, VK_NULL_HANDLE);
break;
case CREATE_CMD_POOL:
Serialise_vkCreateCommandPool(VK_NULL_HANDLE, NULL, NULL);
break;
case CREATE_CMD_BUFFER:
RDCERR("vkCreateCommandBuffer should not be serialised directly");
break;
+16
View File
@@ -598,6 +598,22 @@ public:
VkDevice device,
VkDynamicDepthStencilState state));
// Command pool functions
IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkCreateCommandPool(
VkDevice device,
const VkCmdPoolCreateInfo* pCreateInfo,
VkCmdPool* pCmdPool));
IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkDestroyCommandPool(
VkDevice device,
VkCmdPool VkCmdPool));
IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkResetCommandPool(
VkDevice device,
VkCmdPool VkCmdPool,
VkCmdPoolResetFlags flags));
// Command buffer functions
IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkCreateCommandBuffer(
@@ -86,6 +86,9 @@
HookInit(vkDestroyDynamicColorBlendState); \
HookInit(vkCreateDynamicDepthStencilState); \
HookInit(vkDestroyDynamicDepthStencilState); \
HookInit(vkCreateCommandPool); \
HookInit(vkDestroyCommandPool); \
HookInit(vkResetCommandPool); \
HookInit(vkCreateCommandBuffer); \
HookInit(vkDestroyCommandBuffer); \
HookInit(vkBeginCommandBuffer); \
@@ -194,6 +197,9 @@
HookDefine2(VkResult, vkDestroyDynamicColorBlendState, VkDevice, device, VkDynamicColorBlendState, state); \
HookDefine3(VkResult, vkCreateDynamicDepthStencilState, VkDevice, device, const VkDynamicDepthStencilStateCreateInfo*, pCreateInfo, VkDynamicDepthStencilState*, pState); \
HookDefine2(VkResult, vkDestroyDynamicDepthStencilState, VkDevice, device, VkDynamicDepthStencilState, state); \
HookDefine3(VkResult, vkCreateCommandPool, VkDevice, device, const VkCmdPoolCreateInfo*, pCreateInfo, VkCmdPool*, pCmdPool); \
HookDefine2(VkResult, vkDestroyCommandPool, VkDevice, device, VkCmdPool, cmdPool); \
HookDefine3(VkResult, vkResetCommandPool, VkDevice, device, VkCmdPool, cmdPool, VkCmdPoolResetFlags, flags); \
HookDefine3(VkResult, vkCreateCommandBuffer, VkDevice, device, const VkCmdBufferCreateInfo*, pCreateInfo, VkCmdBuffer*, pCmdBuffer); \
HookDefine2(VkResult, vkDestroyCommandBuffer, VkDevice, device, VkCmdBuffer, cmdBuffer); \
HookDefine2(VkResult, vkBeginCommandBuffer, VkCmdBuffer, cmdBuffer, const VkCmdBufferBeginInfo*, pBeginInfo); \
+2
View File
@@ -58,6 +58,7 @@ enum VkNamespace
eResMSAAState,
eResColorBlendState,
eResDepthStencilState,
eResCmdPool,
eResCmdBuffer,
eResCmdBufferBake,
eResFence,
@@ -101,6 +102,7 @@ inline VkResource MakeRes(VkInstance o) { return VkResource(eResInstance, (uint6
inline VkResource MakeRes(VkDevice o) { return VkResource(eResDevice, (uint64_t)o); }
inline VkResource MakeRes(VkQueue o) { return VkResource(eResQueue, (uint64_t)o); }
inline VkResource MakeRes(VkCmdBuffer o) { return VkResource(eResCmdBuffer, (uint64_t)o); }
inline VkResource MakeRes(VkCmdPool o) { return VkResource(eResCmdPool, o.handle); }
inline VkResource MakeRes(VkDeviceMemory o) { return VkResource(eResDeviceMemory, o.handle); }
inline VkResource MakeRes(VkBuffer o) { return VkResource(eResBuffer, o.handle); }
inline VkResource MakeRes(VkBufferView o) { return VkResource(eResBufferView, o.handle); }