mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-24 07:26:34 +00:00
Serialise out command pools
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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); \
|
||||
|
||||
@@ -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); }
|
||||
|
||||
Reference in New Issue
Block a user