mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-11-08 15:04:21 +00:00
Implement vkCmdUpdateBuffer wrapping
This commit is contained in:
1 parent
40bb7ce0d9
commit
fe99dcdbe7
5 files changed
+84
No files matched your search
@@ -219,6 +219,7 @@ enum VulkanChunkType
|
||||
COPY_IMG,
|
||||
BLIT_IMG,
|
||||
RESOLVE_IMG,
|
||||
UPDATE_BUF,
|
||||
CLEAR_COLOR,
|
||||
CLEAR_DEPTHSTENCIL,
|
||||
CLEAR_COLOR_ATTACH,
|
||||
|
||||
@@ -120,6 +120,7 @@ const char *VkChunkNames[] =
|
||||
"vkCmdCopyImage",
|
||||
"vkCmdBlitImage",
|
||||
"vkCmdResolveImage",
|
||||
"vkCmdUpdateBuffer",
|
||||
"vkCmdClearColorImage",
|
||||
"vkCmdClearDepthStencilImage",
|
||||
"vkCmdClearColorAttachment",
|
||||
@@ -1110,6 +1111,9 @@ void WrappedVulkan::ProcessChunk(uint64_t offset, VulkanChunkType context)
|
||||
case COPY_BUF:
|
||||
Serialise_vkCmdCopyBuffer(GetMainSerialiser(), VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE, 0, NULL);
|
||||
break;
|
||||
case UPDATE_BUF:
|
||||
Serialise_vkCmdUpdateBuffer(GetMainSerialiser(), VK_NULL_HANDLE, VK_NULL_HANDLE, 0, 0, NULL);
|
||||
break;
|
||||
case CLEAR_COLOR:
|
||||
Serialise_vkCmdClearColorImage(GetMainSerialiser(), VK_NULL_HANDLE, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_MAX_ENUM, NULL, 0, NULL);
|
||||
break;
|
||||
|
||||
@@ -1062,6 +1062,13 @@ public:
|
||||
uint32_t regionCount,
|
||||
const VkBufferImageCopy* pRegions);
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdUpdateBuffer,
|
||||
VkCmdBuffer cmdBuffer,
|
||||
VkBuffer destBuffer,
|
||||
VkDeviceSize destOffset,
|
||||
VkDeviceSize dataSize,
|
||||
const uint32_t* pData);
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdClearColorImage,
|
||||
VkCmdBuffer cmdBuffer,
|
||||
VkImage image,
|
||||
|
||||
@@ -132,6 +132,7 @@
|
||||
HookInit(CmdCopyImage); \
|
||||
HookInit(CmdBlitImage); \
|
||||
HookInit(CmdResolveImage); \
|
||||
HookInit(CmdUpdateBuffer); \
|
||||
HookInit(CmdClearColorImage); \
|
||||
HookInit(CmdClearDepthStencilImage); \
|
||||
HookInit(CmdClearColorAttachment); \
|
||||
@@ -258,6 +259,7 @@
|
||||
HookDefine7(void, vkCmdCopyImage, VkCmdBuffer, cmdBuffer, VkImage, srcImage, VkImageLayout, srcImageLayout, VkImage, destImage, VkImageLayout, destImageLayout, uint32_t, regionCount, const VkImageCopy*, pRegions); \
|
||||
HookDefine8(void, vkCmdBlitImage, VkCmdBuffer, cmdBuffer, VkImage, srcImage, VkImageLayout, srcImageLayout, VkImage, destImage, VkImageLayout, destImageLayout, uint32_t, regionCount, const VkImageBlit*, pRegions, VkTexFilter, filter); \
|
||||
HookDefine7(void, vkCmdResolveImage, VkCmdBuffer, cmdBuffer, VkImage, srcImage, VkImageLayout, srcImageLayout, VkImage, destImage, VkImageLayout, destImageLayout, uint32_t, regionCount, const VkImageResolve*, pRegions); \
|
||||
HookDefine5(void, vkCmdUpdateBuffer, VkCmdBuffer, cmdBuffer, VkBuffer, destBuffer, VkDeviceSize, destOffset, VkDeviceSize, dataSize, const uint32_t*, pData); \
|
||||
HookDefine6(void, vkCmdClearColorImage, VkCmdBuffer, cmdBuffer, VkImage, image, VkImageLayout, imageLayout, const VkClearColorValue*, pColor, uint32_t, rangeCount, const VkImageSubresourceRange*, pRanges); \
|
||||
HookDefine7(void, vkCmdClearDepthStencilImage, VkCmdBuffer, cmdBuffer, VkImage, image, VkImageLayout, imageLayout, float, depth, uint32_t, stencil, uint32_t, rangeCount, const VkImageSubresourceRange*, pRanges); \
|
||||
HookDefine6(void, vkCmdClearColorAttachment, VkCmdBuffer, cmdBuffer, uint32_t, colorAttachment, VkImageLayout, imageLayout, const VkClearColorValue*, pColor, uint32_t, rectCount, const VkRect3D*, pRects); \
|
||||
|
||||
@@ -1213,6 +1213,76 @@ void WrappedVulkan::vkCmdBindIndexBuffer(
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedVulkan::Serialise_vkCmdUpdateBuffer(
|
||||
Serialiser* localSerialiser,
|
||||
VkCmdBuffer cmdBuffer,
|
||||
VkBuffer destBuffer,
|
||||
VkDeviceSize destOffset,
|
||||
VkDeviceSize dataSize,
|
||||
const uint32_t* pData)
|
||||
{
|
||||
SERIALISE_ELEMENT(ResourceId, cmdid, GetResID(cmdBuffer));
|
||||
SERIALISE_ELEMENT(ResourceId, bufid, GetResID(destBuffer));
|
||||
SERIALISE_ELEMENT(VkDeviceSize, offs, destOffset);
|
||||
SERIALISE_ELEMENT(VkDeviceSize, sz, dataSize);
|
||||
SERIALISE_ELEMENT_BUF(byte *, bufdata, (byte *)pData, (size_t)dataSize);
|
||||
|
||||
if(m_State < WRITING)
|
||||
m_LastCmdBufferID = cmdid;
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
destBuffer = GetResourceManager()->GetLiveHandle<VkBuffer>(bufid);
|
||||
|
||||
if(IsPartialCmd(cmdid) && InPartialRange())
|
||||
{
|
||||
cmdBuffer = PartialCmdBuf();
|
||||
ObjDisp(cmdBuffer)->CmdUpdateBuffer(Unwrap(cmdBuffer), Unwrap(destBuffer), offs, sz, (uint32_t *)bufdata);
|
||||
}
|
||||
}
|
||||
else if(m_State == READING)
|
||||
{
|
||||
cmdBuffer = GetResourceManager()->GetLiveHandle<VkCmdBuffer>(cmdid);
|
||||
destBuffer = GetResourceManager()->GetLiveHandle<VkBuffer>(bufid);
|
||||
|
||||
ObjDisp(cmdBuffer)->CmdUpdateBuffer(Unwrap(cmdBuffer), Unwrap(destBuffer), offs, sz, (uint32_t *)bufdata);
|
||||
}
|
||||
|
||||
SAFE_DELETE_ARRAY(bufdata);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedVulkan::vkCmdUpdateBuffer(
|
||||
VkCmdBuffer cmdBuffer,
|
||||
VkBuffer destBuffer,
|
||||
VkDeviceSize destOffset,
|
||||
VkDeviceSize dataSize,
|
||||
const uint32_t* pData)
|
||||
{
|
||||
ObjDisp(cmdBuffer)->CmdUpdateBuffer(Unwrap(cmdBuffer), Unwrap(destBuffer), destOffset, dataSize, pData);
|
||||
|
||||
if(m_State >= WRITING)
|
||||
{
|
||||
VkResourceRecord *record = GetRecord(cmdBuffer);
|
||||
|
||||
CACHE_THREAD_SERIALISER();
|
||||
|
||||
SCOPED_SERIALISE_CONTEXT(UPDATE_BUF);
|
||||
Serialise_vkCmdUpdateBuffer(localSerialiser, cmdBuffer, destBuffer, destOffset, dataSize, pData);
|
||||
|
||||
record->AddChunk(scope.Get());
|
||||
record->MarkResourceFrameReferenced(GetResID(destBuffer), eFrameRef_Write);
|
||||
|
||||
// Don't dirty the buffer, just the memory behind it.
|
||||
{
|
||||
VkResourceRecord *buf = GetRecord(destBuffer);
|
||||
if(buf->GetMemoryRecord())
|
||||
record->dirtied.insert(buf->GetMemoryRecord()->GetResourceID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedVulkan::Serialise_vkCmdPipelineBarrier(
|
||||
Serialiser* localSerialiser,
|
||||
VkCmdBuffer cmdBuffer,
|
||||
|
||||
Reference in new issue
Block a user