From 966db7bdb0df560687876ca99713f023bc589d81 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 10 Sep 2020 22:57:22 +0100 Subject: [PATCH] Add some more identified markers --- renderdoc/driver/vulkan/vk_core.cpp | 37 +++++++++++++++++++ renderdoc/driver/vulkan/vk_core.h | 3 +- renderdoc/driver/vulkan/vk_resources.h | 4 ++ .../driver/vulkan/wrappers/vk_cmd_funcs.cpp | 18 ++++----- .../driver/vulkan/wrappers/vk_queue_funcs.cpp | 26 ++++++++++++- 5 files changed, 76 insertions(+), 12 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 07c12447f..3e7be0052 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -2165,6 +2165,43 @@ void WrappedVulkan::Present(void *dev, void *wnd) } } +void WrappedVulkan::HandleFrameMarkers(const char *marker, VkCommandBuffer commandBuffer) +{ + if(!marker) + return; + + if(strstr(marker, "vr-marker,frame_end,type,application") != NULL) + { + VkResourceRecord *record = GetRecord(commandBuffer); + record->bakedCommands->cmdInfo->present = true; + } + if(strstr(marker, "capture-marker,begin_capture") != NULL) + { + VkResourceRecord *record = GetRecord(commandBuffer); + record->bakedCommands->cmdInfo->beginCapture = true; + } + if(strstr(marker, "capture-marker,end_capture") != NULL) + { + VkResourceRecord *record = GetRecord(commandBuffer); + record->bakedCommands->cmdInfo->endCapture = true; + } +} + +void WrappedVulkan::HandleFrameMarkers(const char *marker, VkQueue queue) +{ + if(!marker) + return; + + if(strstr(marker, "capture-marker,begin_capture") != NULL) + { + RenderDoc::Inst().StartFrameCapture(LayerDisp(m_Instance), NULL); + } + if(strstr(marker, "capture-marker,end_capture") != NULL) + { + RenderDoc::Inst().EndFrameCapture(LayerDisp(m_Instance), NULL); + } +} + ResourceDescription &WrappedVulkan::GetResourceDesc(ResourceId id) { return GetReplay()->GetResourceDesc(id); diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 58e9006b3..af897cddb 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -877,7 +877,8 @@ private: void AdvanceFrame(); void Present(void *dev, void *wnd); - void HandleVRFrameMarkers(const char *marker, VkCommandBuffer commandBuffer); + void HandleFrameMarkers(const char *marker, VkCommandBuffer commandBuffer); + void HandleFrameMarkers(const char *marker, VkQueue queue); template bool Serialise_SetShaderDebugPath(SerialiserType &ser, VkShaderModule ShaderObject, diff --git a/renderdoc/driver/vulkan/vk_resources.h b/renderdoc/driver/vulkan/vk_resources.h index dc0afcf0c..f63acb255 100644 --- a/renderdoc/driver/vulkan/vk_resources.h +++ b/renderdoc/driver/vulkan/vk_resources.h @@ -1028,6 +1028,10 @@ struct CmdBufferRecordingInfo // AdvanceFrame/Present should be called after this buffer is submitted bool present; + // BeginFrameCapture should be called *before* this buffer is submitted. + bool beginCapture; + // EndFrameCapture should be called *after* this buffer is submitted. + bool endCapture; }; struct DescSetLayout; diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index d9c16fc55..748731057 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -697,6 +697,8 @@ VkResult WrappedVulkan::vkAllocateCommandBuffers(VkDevice device, record->cmdInfo->allocInfo.commandBufferCount = 1; record->cmdInfo->allocRecord = allocRecord; record->cmdInfo->present = false; + record->cmdInfo->beginCapture = false; + record->cmdInfo->endCapture = false; record->cmdInfo->alloc = &record->pool->cmdPoolInfo->alloc; } else @@ -1033,6 +1035,8 @@ VkResult WrappedVulkan::vkBeginCommandBuffer(VkCommandBuffer commandBuffer, record->bakedCommands->cmdInfo->device = record->cmdInfo->device; record->bakedCommands->cmdInfo->allocInfo = record->cmdInfo->allocInfo; record->bakedCommands->cmdInfo->present = false; + record->bakedCommands->cmdInfo->beginCapture = false; + record->bakedCommands->cmdInfo->endCapture = false; { CACHE_THREAD_SERIALISER(); @@ -4326,15 +4330,6 @@ void WrappedVulkan::vkCmdDebugMarkerEndEXT(VkCommandBuffer commandBuffer) } } -void WrappedVulkan::HandleVRFrameMarkers(const char *marker, VkCommandBuffer commandBuffer) -{ - if(strstr(marker, "vr-marker,frame_end,type,application") != NULL) - { - VkResourceRecord *record = GetRecord(commandBuffer); - record->bakedCommands->cmdInfo->present = true; - } -} - template bool WrappedVulkan::Serialise_vkCmdDebugMarkerInsertEXT(SerialiserType &ser, VkCommandBuffer commandBuffer, @@ -4390,7 +4385,8 @@ void WrappedVulkan::vkCmdDebugMarkerInsertEXT(VkCommandBuffer commandBuffer, ObjDisp(commandBuffer)->CmdDebugMarkerInsertEXT(Unwrap(commandBuffer), pMarker)); } - HandleVRFrameMarkers(pMarker->pMarkerName, commandBuffer); + if(pMarker) + HandleFrameMarkers(pMarker->pMarkerName, commandBuffer); if(IsCaptureMode(m_State)) { VkResourceRecord *record = GetRecord(commandBuffer); @@ -5307,6 +5303,8 @@ void WrappedVulkan::vkCmdInsertDebugUtilsLabelEXT(VkCommandBuffer commandBuffer, ObjDisp(commandBuffer)->CmdInsertDebugUtilsLabelEXT(Unwrap(commandBuffer), pLabelInfo)); } + if(pLabelInfo) + HandleFrameMarkers(pLabelInfo->pLabelName, commandBuffer); if(IsCaptureMode(m_State)) { VkResourceRecord *record = GetRecord(commandBuffer); diff --git a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp index 93977418d..8f0b9d51d 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp @@ -841,6 +841,24 @@ VkResult WrappedVulkan::vkQueueSubmit(VkQueue queue, uint32_t submitCount, VkResult ret = VK_SUCCESS; bool present = false; + bool beginCapture = false; + bool endCapture = false; + + for(uint32_t s = 0; s < submitCount; s++) + { + for(uint32_t i = 0; i < pSubmits[s].commandBufferCount; i++) + { + VkResourceRecord *record = GetRecord(pSubmits[s].pCommandBuffers[i]); + present |= record->bakedCommands->cmdInfo->present; + beginCapture |= record->bakedCommands->cmdInfo->beginCapture; + endCapture |= record->bakedCommands->cmdInfo->endCapture; + } + } + + if(beginCapture) + { + RenderDoc::Inst().StartFrameCapture(LayerDisp(m_Instance), NULL); + } { SCOPED_READLOCK(m_CapTransitionLock); @@ -857,7 +875,6 @@ VkResult WrappedVulkan::vkQueueSubmit(VkQueue queue, uint32_t submitCount, ResourceId cmd = GetResID(pSubmits[s].pCommandBuffers[i]); VkResourceRecord *record = GetRecord(pSubmits[s].pCommandBuffers[i]); - present |= record->bakedCommands->cmdInfo->present; UpdateImageStates(record->bakedCommands->cmdInfo->imageStates); @@ -1216,6 +1233,11 @@ VkResult WrappedVulkan::vkQueueSubmit(VkQueue queue, uint32_t submitCount, } } + if(endCapture) + { + RenderDoc::Inst().EndFrameCapture(LayerDisp(m_Instance), NULL); + } + if(present) { AdvanceFrame(); @@ -1675,6 +1697,8 @@ void WrappedVulkan::vkQueueInsertDebugUtilsLabelEXT(VkQueue queue, SERIALISE_TIME_CALL(ObjDisp(queue)->QueueInsertDebugUtilsLabelEXT(Unwrap(queue), pLabelInfo)); } + if(pLabelInfo) + HandleFrameMarkers(pLabelInfo->pLabelName, queue); if(IsActiveCapturing(m_State)) { CACHE_THREAD_SERIALISER();