mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-08-22 06:26:30 +00:00
Make sure backbuffer is transitioned between image layouts for overlay
This commit is contained in:
@@ -912,11 +912,6 @@ bool WrappedVulkan::EndFrameCapture(void *dev, void *wnd)
|
||||
{ VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 }
|
||||
};
|
||||
|
||||
VkImageMemoryBarrier *barriers[] = {
|
||||
&bbBarrier,
|
||||
&readBarrier,
|
||||
};
|
||||
|
||||
DoPipelineBarrier(cmd, 1, &bbBarrier);
|
||||
DoPipelineBarrier(cmd, 1, &readBarrier);
|
||||
|
||||
|
||||
@@ -1880,11 +1880,6 @@ void VulkanDebugManager::BeginText(const TextPrintState &textstate)
|
||||
{
|
||||
const VkLayerDispatchTable *vt = ObjDisp(textstate.cmd);
|
||||
|
||||
VkCommandBufferBeginInfo beginInfo = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, NULL, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT };
|
||||
|
||||
VkResult vkr = vt->BeginCommandBuffer(Unwrap(textstate.cmd), &beginInfo);
|
||||
RDCASSERTEQUAL(vkr, VK_SUCCESS);
|
||||
|
||||
VkClearValue clearval = {0};
|
||||
VkRenderPassBeginInfo rpbegin = {
|
||||
VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, NULL,
|
||||
@@ -1957,7 +1952,6 @@ void VulkanDebugManager::RenderTextInternal(const TextPrintState &textstate, flo
|
||||
void VulkanDebugManager::EndText(const TextPrintState &textstate)
|
||||
{
|
||||
ObjDisp(textstate.cmd)->CmdEndRenderPass(Unwrap(textstate.cmd));
|
||||
ObjDisp(textstate.cmd)->EndCommandBuffer(Unwrap(textstate.cmd));
|
||||
}
|
||||
|
||||
void VulkanDebugManager::GetBufferData(ResourceId buff, uint64_t offset, uint64_t len, vector<byte> &ret)
|
||||
|
||||
@@ -538,11 +538,30 @@ VkResult WrappedVulkan::vkQueuePresentKHR(
|
||||
if(overlay & eRENDERDOC_Overlay_Enabled)
|
||||
{
|
||||
VkRenderPass rp = swapInfo.rp;
|
||||
VkImage im = swapInfo.images[pPresentInfo->pImageIndices[0]].im;
|
||||
VkFramebuffer fb = swapInfo.images[pPresentInfo->pImageIndices[0]].fb;
|
||||
|
||||
VkLayerDispatchTable *vt = ObjDisp(GetDev());
|
||||
|
||||
TextPrintState textstate = { GetNextCmd(), rp, fb, swapInfo.extent.width, swapInfo.extent.height };
|
||||
|
||||
VkCommandBufferBeginInfo beginInfo = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, NULL, VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT };
|
||||
|
||||
VkResult vkr = vt->BeginCommandBuffer(Unwrap(textstate.cmd), &beginInfo);
|
||||
RDCASSERTEQUAL(vkr, VK_SUCCESS);
|
||||
|
||||
VkImageMemoryBarrier bbBarrier = {
|
||||
VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, NULL,
|
||||
0, 0, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
|
||||
VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED,
|
||||
Unwrap(im),
|
||||
{ VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 }
|
||||
};
|
||||
|
||||
bbBarrier.srcAccessMask = VK_ACCESS_ALL_READ_BITS;
|
||||
bbBarrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
|
||||
DoPipelineBarrier(textstate.cmd, 1, &bbBarrier);
|
||||
|
||||
GetDebugManager()->BeginText(textstate);
|
||||
|
||||
@@ -625,6 +644,14 @@ VkResult WrappedVulkan::vkQueuePresentKHR(
|
||||
}
|
||||
|
||||
GetDebugManager()->EndText(textstate);
|
||||
|
||||
std::swap(bbBarrier.oldLayout, bbBarrier.newLayout);
|
||||
bbBarrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
|
||||
bbBarrier.dstAccessMask = VK_ACCESS_ALL_READ_BITS;
|
||||
|
||||
DoPipelineBarrier(textstate.cmd, 1, &bbBarrier);
|
||||
|
||||
ObjDisp(textstate.cmd)->EndCommandBuffer(Unwrap(textstate.cmd));
|
||||
|
||||
SubmitCmds();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user