mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-11-07 22:43:49 +00:00
Implement CmdResolveImage
This commit is contained in:
1 parent
84415a3f76
commit
9ebb7cec1f
5 files changed
+96
-6
No files matched your search
@@ -215,12 +215,12 @@ enum VulkanChunkType
|
||||
COPY_BUF,
|
||||
COPY_IMG,
|
||||
BLIT_IMG,
|
||||
RESOLVE_IMG,
|
||||
CLEAR_COLOR,
|
||||
CLEAR_DEPTHSTENCIL,
|
||||
CLEAR_COLOR_ATTACH,
|
||||
CLEAR_DEPTHSTENCIL_ATTACH,
|
||||
PIPELINE_BARRIER,
|
||||
RESOLVE_IMAGE,
|
||||
WRITE_TIMESTAMP,
|
||||
DRAW,
|
||||
DRAW_INDIRECT,
|
||||
|
||||
@@ -117,12 +117,12 @@ const char *VkChunkNames[] =
|
||||
"vkCmdCopyBuffer",
|
||||
"vkCmdCopyImage",
|
||||
"vkCmdBlitImage",
|
||||
"vkCmdResolveImage",
|
||||
"vkCmdClearColorImage",
|
||||
"vkCmdClearDepthStencilImage",
|
||||
"vkCmdClearColorAttachment",
|
||||
"vkCmdClearDepthStencilAttachment",
|
||||
"vkCmdPipelineBarrier",
|
||||
"vkCmdResolveImage",
|
||||
"vkCmdWriteTimestamp",
|
||||
"vkCmdDraw",
|
||||
"vkCmdDrawIndirect",
|
||||
@@ -1039,6 +1039,12 @@ void WrappedVulkan::ProcessChunk(uint64_t offset, VulkanChunkType context)
|
||||
case COPY_IMG:
|
||||
Serialise_vkCmdCopyImage(VK_NULL_HANDLE, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_MAX_ENUM, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_MAX_ENUM, 0, NULL);
|
||||
break;
|
||||
case BLIT_IMG:
|
||||
Serialise_vkCmdBlitImage(VK_NULL_HANDLE, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_MAX_ENUM, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_MAX_ENUM, 0, NULL, VK_TEX_FILTER_MAX_ENUM);
|
||||
break;
|
||||
case RESOLVE_IMG:
|
||||
Serialise_vkCmdResolveImage(VK_NULL_HANDLE, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_MAX_ENUM, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_MAX_ENUM, 0, NULL);
|
||||
break;
|
||||
case COPY_BUF:
|
||||
Serialise_vkCmdCopyBuffer(VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE, 0, NULL);
|
||||
break;
|
||||
@@ -1057,10 +1063,6 @@ void WrappedVulkan::ProcessChunk(uint64_t offset, VulkanChunkType context)
|
||||
case PIPELINE_BARRIER:
|
||||
Serialise_vkCmdPipelineBarrier(VK_NULL_HANDLE, 0, 0, VK_FALSE, 0, NULL);
|
||||
break;
|
||||
case RESOLVE_IMAGE:
|
||||
//VKTODOMED:
|
||||
//Serialise_vkCmdResolveImage(VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE, 0, NULL);
|
||||
break;
|
||||
case WRITE_TIMESTAMP:
|
||||
//VKTODOMED:
|
||||
//Serialise_vkCmdWriteTimestamp(VK_NULL_HANDLE, VK_TIMESTAMP_TYPE_MAX_ENUM, VK_NULL_HANDLE, 0);
|
||||
|
||||
@@ -965,6 +965,15 @@ public:
|
||||
const VkImageBlit* pRegions,
|
||||
VkTexFilter filter));
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdResolveImage(
|
||||
VkCmdBuffer cmdBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage destImage,
|
||||
VkImageLayout destImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageResolve* pRegions));
|
||||
|
||||
IMPLEMENT_FUNCTION_SERIALISED(void, vkCmdCopyBufferToImage(
|
||||
VkCmdBuffer cmdBuffer,
|
||||
VkBuffer srcBuffer,
|
||||
|
||||
@@ -128,6 +128,7 @@
|
||||
HookInit(CmdCopyBuffer); \
|
||||
HookInit(CmdCopyImage); \
|
||||
HookInit(CmdBlitImage); \
|
||||
HookInit(CmdResolveImage); \
|
||||
HookInit(CmdClearColorImage); \
|
||||
HookInit(CmdClearDepthStencilImage); \
|
||||
HookInit(CmdClearColorAttachment); \
|
||||
@@ -247,6 +248,7 @@
|
||||
HookDefine5(void, vkCmdCopyBuffer, VkCmdBuffer, cmdBuffer, VkBuffer, srcBuffer, VkBuffer, destBuffer, uint32_t, regionCount, const VkBufferCopy*, pRegions); \
|
||||
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); \
|
||||
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); \
|
||||
|
||||
@@ -180,6 +180,83 @@ void WrappedVulkan::vkCmdBlitImage(
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedVulkan::Serialise_vkCmdResolveImage(
|
||||
VkCmdBuffer cmdBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage destImage,
|
||||
VkImageLayout destImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageResolve* pRegions)
|
||||
{
|
||||
SERIALISE_ELEMENT(ResourceId, cmdid, GetResID(cmdBuffer));
|
||||
SERIALISE_ELEMENT(ResourceId, srcid, GetResID(srcImage));
|
||||
SERIALISE_ELEMENT(VkImageLayout, srclayout, srcImageLayout);
|
||||
SERIALISE_ELEMENT(ResourceId, dstid, GetResID(destImage));
|
||||
SERIALISE_ELEMENT(VkImageLayout, dstlayout, destImageLayout);
|
||||
|
||||
if(m_State < WRITING)
|
||||
m_LastCmdBufferID = cmdid;
|
||||
|
||||
SERIALISE_ELEMENT(uint32_t, count, regionCount);
|
||||
SERIALISE_ELEMENT_ARR(VkImageResolve, regions, pRegions, count);
|
||||
|
||||
if(m_State == EXECUTING)
|
||||
{
|
||||
srcImage = GetResourceManager()->GetLiveHandle<VkImage>(srcid);
|
||||
destImage = GetResourceManager()->GetLiveHandle<VkImage>(dstid);
|
||||
|
||||
if(IsPartialCmd(cmdid) && InPartialRange())
|
||||
{
|
||||
cmdBuffer = PartialCmdBuf();
|
||||
ObjDisp(cmdBuffer)->CmdResolveImage(Unwrap(cmdBuffer), Unwrap(srcImage), srclayout, Unwrap(destImage), dstlayout, count, regions);
|
||||
}
|
||||
}
|
||||
else if(m_State == READING)
|
||||
{
|
||||
cmdBuffer = GetResourceManager()->GetLiveHandle<VkCmdBuffer>(cmdid);
|
||||
srcImage = GetResourceManager()->GetLiveHandle<VkImage>(srcid);
|
||||
destImage = GetResourceManager()->GetLiveHandle<VkImage>(dstid);
|
||||
|
||||
ObjDisp(cmdBuffer)->CmdResolveImage(Unwrap(cmdBuffer), Unwrap(srcImage), srclayout, Unwrap(destImage), dstlayout, count, regions);
|
||||
}
|
||||
|
||||
SAFE_DELETE_ARRAY(regions);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void WrappedVulkan::vkCmdResolveImage(
|
||||
VkCmdBuffer cmdBuffer,
|
||||
VkImage srcImage,
|
||||
VkImageLayout srcImageLayout,
|
||||
VkImage destImage,
|
||||
VkImageLayout destImageLayout,
|
||||
uint32_t regionCount,
|
||||
const VkImageResolve* pRegions)
|
||||
{
|
||||
ObjDisp(cmdBuffer)->CmdResolveImage(Unwrap(cmdBuffer), Unwrap(srcImage), srcImageLayout, Unwrap(destImage), destImageLayout, regionCount, pRegions);
|
||||
|
||||
if(m_State >= WRITING)
|
||||
{
|
||||
VkResourceRecord *record = GetRecord(cmdBuffer);
|
||||
|
||||
SCOPED_SERIALISE_CONTEXT(RESOLVE_IMG);
|
||||
Serialise_vkCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
|
||||
|
||||
record->AddChunk(scope.Get());
|
||||
|
||||
record->dirtied.insert(GetResID(destImage));
|
||||
{
|
||||
VkResourceRecord *im = GetRecord(destImage);
|
||||
if(im->GetMemoryRecord())
|
||||
record->dirtied.insert(im->GetMemoryRecord()->GetResourceID());
|
||||
}
|
||||
record->MarkResourceFrameReferenced(GetResID(srcImage), eFrameRef_Read);
|
||||
record->MarkResourceFrameReferenced(GetResID(destImage), eFrameRef_Write);
|
||||
}
|
||||
}
|
||||
|
||||
bool WrappedVulkan::Serialise_vkCmdCopyImage(
|
||||
VkCmdBuffer cmdBuffer,
|
||||
VkImage srcImage,
|
||||
|
||||
Reference in new issue
Block a user