diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 6e33088fc..528922f8c 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -275,141 +275,111 @@ DECLARE_REFLECTION_STRUCT(DescriptorSetSlot); VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT | \ VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_MEMORY_WRITE_BIT) -#pragma region Chunks - -enum VulkanChunkType +enum class VulkanChunk : uint32_t { - DEVICE_INIT = FIRST_CHUNK_ID, - CREATE_INSTANCE, - ENUM_PHYSICALS, - CREATE_DEVICE, - GET_DEVICE_QUEUE, - - ALLOC_MEM, - UNMAP_MEM, - FLUSH_MEM, - FREE_MEM, - - CREATE_CMD_POOL, - RESET_CMD_POOL, - - CREATE_CMD_BUFFER, - CREATE_FRAMEBUFFER, - CREATE_RENDERPASS, - CREATE_DESCRIPTOR_POOL, - CREATE_DESCRIPTOR_SET_LAYOUT, - CREATE_BUFFER, - CREATE_BUFFER_VIEW, - CREATE_IMAGE, - CREATE_IMAGE_VIEW, - CREATE_DEPTH_TARGET_VIEW, - CREATE_SAMPLER, - CREATE_SHADER_MODULE, - CREATE_PIPE_LAYOUT, - CREATE_PIPE_CACHE, - CREATE_GRAPHICS_PIPE, - CREATE_COMPUTE_PIPE, - GET_SWAPCHAIN_IMAGE, - - CREATE_SEMAPHORE, - CREATE_FENCE, - GET_FENCE_STATUS, - RESET_FENCE, - WAIT_FENCES, - - CREATE_EVENT, - GET_EVENT_STATUS, - SET_EVENT, - RESET_EVENT, - - CREATE_QUERY_POOL, - - ALLOC_DESC_SET, - UPDATE_DESC_SET, - - BEGIN_CMD_BUFFER, - END_CMD_BUFFER, - - QUEUE_WAIT_IDLE, - DEVICE_WAIT_IDLE, - - QUEUE_SUBMIT, - BIND_BUFFER_MEM, - BIND_IMAGE_MEM, - - BIND_SPARSE, - - BEGIN_RENDERPASS, - NEXT_SUBPASS, - EXEC_CMDS, - END_RENDERPASS, - - BIND_PIPELINE, - - SET_VP, - SET_SCISSOR, - SET_LINE_WIDTH, - SET_DEPTH_BIAS, - SET_BLEND_CONST, - SET_DEPTH_BOUNDS, - SET_STENCIL_COMP_MASK, - SET_STENCIL_WRITE_MASK, - SET_STENCIL_REF, - - BIND_DESCRIPTOR_SET, - BIND_VERTEX_BUFFERS, - BIND_INDEX_BUFFER, - COPY_BUF2IMG, - COPY_IMG2BUF, - COPY_BUF, - COPY_IMG, - BLIT_IMG, - RESOLVE_IMG, - UPDATE_BUF, - FILL_BUF, - PUSH_CONST, - - CLEAR_COLOR, - CLEAR_DEPTHSTENCIL, - CLEAR_ATTACH, - PIPELINE_BARRIER, - - WRITE_TIMESTAMP, - COPY_QUERY_RESULTS, - BEGIN_QUERY, - END_QUERY, - RESET_QUERY_POOL, - - CMD_SET_EVENT, - CMD_RESET_EVENT, - CMD_WAIT_EVENTS, - - DRAW, - DRAW_INDIRECT, - DRAW_INDEXED, - DRAW_INDEXED_INDIRECT, - DISPATCH, - DISPATCH_INDIRECT, - - BEGIN_EVENT, - SET_MARKER, - END_EVENT, - - SET_NAME, - SET_SHADER_DEBUG_PATH, - - CREATE_SWAP_BUFFER, - - DEBUG_MESSAGES, - - CAPTURE_SCOPE, - CONTEXT_CAPTURE_HEADER, - CONTEXT_CAPTURE_FOOTER, - - NUM_VULKAN_CHUNKS, + vkEnumeratePhysicalDevices = (uint32_t)SystemChunk::FirstDriverChunk, + vkCreateDevice, + vkGetDeviceQueue, + vkAllocateMemory, + vkUnmapMemory, + vkFlushMappedMemoryRanges, + vkCreateCommandPool, + vkResetCommandPool, + vkCreateFramebuffer, + vkCreateRenderPass, + vkCreateDescriptorPool, + vkCreateDescriptorSetLayout, + vkCreateBuffer, + vkCreateBufferView, + vkCreateImage, + vkCreateImageView, + vkCreateDepthTargetView, + vkCreateSampler, + vkCreateShaderModule, + vkCreatePipelineLayout, + vkCreatePipelineCache, + vkCreateGraphicsPipelines, + vkCreateComputePipelines, + vkGetSwapchainImagesKHR, + vkCreateSemaphore, + vkCreateFence, + vkGetFenceStatus, + vkResetFences, + vkWaitForFences, + vkCreateEvent, + vkGetEventStatus, + vkSetEvent, + vkResetEvent, + vkCreateQueryPool, + vkAllocateDescriptorSets, + vkUpdateDescriptorSets, + vkBeginCommandBuffer, + vkEndCommandBuffer, + vkQueueWaitIdle, + vkDeviceWaitIdle, + vkQueueSubmit, + vkBindBufferMemory, + vkBindImageMemory, + vkQueueBindSparse, + vkCmdBeginRenderPass, + vkCmdNextSubpass, + vkCmdExecuteCommands, + vkCmdEndRenderPass, + vkCmdBindPipeline, + vkCmdSetViewport, + vkCmdSetScissor, + vkCmdSetLineWidth, + vkCmdSetDepthBias, + vkCmdSetBlendConstants, + vkCmdSetDepthBounds, + vkCmdSetStencilCompareMask, + vkCmdSetStencilWriteMask, + vkCmdSetStencilReference, + vkCmdBindDescriptorSets, + vkCmdBindVertexBuffers, + vkCmdBindIndexBuffer, + vkCmdCopyBufferToImage, + vkCmdCopyImageToBuffer, + vkCmdCopyBuffer, + vkCmdCopyImage, + vkCmdBlitImage, + vkCmdResolveImage, + vkCmdUpdateBuffer, + vkCmdFillBuffer, + vkCmdPushConstants, + vkCmdClearColorImage, + vkCmdClearDepthStencilImage, + vkCmdClearAttachments, + vkCmdPipelineBarrier, + vkCmdWriteTimestamp, + vkCmdCopyQueryPoolResults, + vkCmdBeginQuery, + vkCmdEndQuery, + vkCmdResetQueryPool, + vkCmdSetEvent, + vkCmdResetEvent, + vkCmdWaitEvents, + vkCmdDraw, + vkCmdDrawIndirect, + vkCmdDrawIndexed, + vkCmdDrawIndexedIndirect, + vkCmdDispatch, + vkCmdDispatchIndirect, + vkCmdDebugMarkerBeginEXT, + vkCmdDebugMarkerInsertEXT, + vkCmdDebugMarkerEndEXT, + vkDebugMarkerSetObjectNameEXT, + vkCreateSwapchainKHR, + SetShaderDebugPath, + vkRegisterDeviceEventEXT, + vkRegisterDisplayEventEXT, + CaptureScope, + CaptureBegin, + CaptureEnd, + Max, }; -#pragma endregion Chunks +DECLARE_REFLECTION_ENUM(VulkanChunk); // this is special - these serialise overloads will fetch the ID during capture, serialise the ID // directly as-if it were the original type, then on replay load up the resource if available. diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 3343c3e26..7272c5f88 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -28,135 +28,6 @@ #include "strings/string_utils.h" #include "vk_debug.h" -const char *VkChunkNames[] = { - "WrappedVulkan::Initialisation", - "vkCreateInstance", - "vkEnumeratePhysicalDevices", - "vkCreateDevice", - "vkGetDeviceQueue", - - "vkAllocMemory", - "vkUnmapMemory", - "vkFlushMappedMemoryRanges", - "vkFreeMemory", - - "vkCreateCommandPool", - "vkResetCommandPool", - - "vkCreateCommandBuffer", - "vkCreateFramebuffer", - "vkCreateRenderPass", - "vkCreateDescriptorPool", - "vkCreateDescriptorSetLayout", - "vkCreateBuffer", - "vkCreateBufferView", - "vkCreateImage", - "vkCreateImageView", - "vkCreateDepthTargetView", - "vkCreateSampler", - "vkCreateShaderModule", - "vkCreatePipelineLayout", - "vkCreatePipelineCache", - "vkCreateGraphicsPipelines", - "vkCreateComputePipelines", - "vkGetSwapchainImagesKHR", - - "vkCreateSemaphore", - "vkCreateFence", - "vkGetFenceStatus", - "vkResetFences", - "vkWaitForFences", - - "vkCreateEvent", - "vkGetEventStatus", - "vkSetEvent", - "vkResetEvent", - - "vkCreateQueryPool", - - "vkAllocDescriptorSets", - "vkUpdateDescriptorSets", - - "vkBeginCommandBuffer", - "vkEndCommandBuffer", - - "vkQueueWaitIdle", - "vkDeviceWaitIdle", - - "vkQueueSubmit", - "vkBindBufferMemory", - "vkBindImageMemory", - - "vkQueueBindSparse", - - "vkCmdBeginRenderPass", - "vkCmdNextSubpass", - "vkCmdExecuteCommands", - "vkCmdEndRenderPass", - - "vkCmdBindPipeline", - - "vkCmdSetViewport", - "vkCmdSetScissor", - "vkCmdSetLineWidth", - "vkCmdSetDepthBias", - "vkCmdSetBlendConstants", - "vkCmdSetDepthBounds", - "vkCmdSetStencilCompareMask", - "vkCmdSetStencilWriteMask", - "vkCmdSetStencilReference", - - "vkCmdBindDescriptorSet", - "vkCmdBindVertexBuffers", - "vkCmdBindIndexBuffer", - "vkCmdCopyBufferToImage", - "vkCmdCopyImageToBuffer", - "vkCmdCopyBuffer", - "vkCmdCopyImage", - "vkCmdBlitImage", - "vkCmdResolveImage", - "vkCmdUpdateBuffer", - "vkCmdFillBuffer", - "vkCmdPushConstants", - - "vkCmdClearColorImage", - "vkCmdClearDepthStencilImage", - "vkCmdClearAttachments", - "vkCmdPipelineBarrier", - - "vkCmdWriteTimestamp", - "vkCmdCopyQueryPoolResults", - "vkCmdBeginQuery", - "vkCmdEndQuery", - "vkCmdResetQueryPool", - - "vkCmdSetEvent", - "vkCmdResetEvent", - "vkCmdWaitEvents", - - "vkCmdDraw", - "vkCmdDrawIndirect", - "vkCmdDrawIndexed", - "vkCmdDrawIndexedIndirect", - "vkCmdDispatch", - "vkCmdDispatchIndirect", - - "vkCmdDebugMarkerBeginEXT", - "vkCmdDebugMarkerInsertEXT", - "vkCmdDebugMarkerEndEXT", - - "vkDebugMarkerSetObjectNameEXT", - "vkDebugMarkerSetObjectTagEXT", - - "vkCreateSwapchainKHR", - - "Debug Messages", - - "Capture", - "BeginCapture", - "EndCapture", -}; - VkInitParams::VkInitParams() { SerialiseVersion = VK_SERIALISE_VERSION; @@ -568,25 +439,12 @@ uint32_t WrappedVulkan::HandlePreCallback(VkCommandBuffer commandBuffer, DrawFla return eventID; } -const char *WrappedVulkan::GetChunkName(uint32_t idx) +std::string WrappedVulkan::GetChunkName(uint32_t idx) { - if(idx == CREATE_PARAMS) - return "Create Params"; - if(idx == THUMBNAIL_DATA) - return "Thumbnail Data"; - if(idx == DRIVER_INIT_PARAMS) - return "Driver Init Params"; - if(idx == INITIAL_CONTENTS) - return "Initial Contents"; - if(idx < FIRST_CHUNK_ID || idx >= NUM_VULKAN_CHUNKS) - return ""; - return VkChunkNames[idx - FIRST_CHUNK_ID]; -} + if((SystemChunk)idx < SystemChunk::FirstDriverChunk) + return ToStr((SystemChunk)idx); -template <> -std::string DoStringise(const VulkanChunkType &el) -{ - return WrappedVulkan::GetChunkName(el); + return ToStr((VulkanChunk)idx); } WrappedVulkan::ScopedDebugMessageSink::ScopedDebugMessageSink(WrappedVulkan *driver) @@ -1724,7 +1582,7 @@ void WrappedVulkan::ReadLogInitialisation() "% 5d chunks - Time: %9.3fms total/%9.3fms avg - Size: %8.3fMB total/%7.3fMB avg - %s (%u)", it->second.count, it->second.total, it->second.total / dcount, double(it->second.totalsize) / (1024.0 * 1024.0), - double(it->second.totalsize) / (dcount * 1024.0 * 1024.0), GetChunkName(it->first), + double(it->second.totalsize) / (dcount * 1024.0 * 1024.0), ToStr(it->first).c_str(), uint32_t(it->first)); } #endif diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index ab91e6c9a..e7ca5ffc1 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -701,7 +701,7 @@ public: virtual ~WrappedVulkan(); ResourceId GetContextResourceID() { return m_FrameCaptureRecord->GetResourceID(); } - static const char *GetChunkName(uint32_t idx); + static std::string GetChunkName(uint32_t idx); VulkanResourceManager *GetResourceManager() { return m_ResourceManager; } VulkanDebugManager *GetDebugManager() { return m_DebugManager; } LogState GetState() { return m_State; } diff --git a/renderdoc/driver/vulkan/vk_stringise.cpp b/renderdoc/driver/vulkan/vk_stringise.cpp index 971267039..194c6712a 100644 --- a/renderdoc/driver/vulkan/vk_stringise.cpp +++ b/renderdoc/driver/vulkan/vk_stringise.cpp @@ -25,6 +25,117 @@ #include "vk_common.h" #include "vk_resources.h" +template <> +std::string DoStringise(const VulkanChunk &el) +{ + RDCCOMPILE_ASSERT((uint32_t)VulkanChunk::Max == 1099, "Chunks changed without updating names"); + + BEGIN_ENUM_STRINGISE(VulkanChunk) + { + STRINGISE_ENUM_CLASS(vkEnumeratePhysicalDevices); + STRINGISE_ENUM_CLASS(vkCreateDevice); + STRINGISE_ENUM_CLASS(vkGetDeviceQueue); + STRINGISE_ENUM_CLASS(vkAllocateMemory); + STRINGISE_ENUM_CLASS(vkUnmapMemory); + STRINGISE_ENUM_CLASS(vkFlushMappedMemoryRanges); + STRINGISE_ENUM_CLASS(vkCreateCommandPool); + STRINGISE_ENUM_CLASS(vkResetCommandPool); + STRINGISE_ENUM_CLASS(vkCreateFramebuffer); + STRINGISE_ENUM_CLASS(vkCreateRenderPass); + STRINGISE_ENUM_CLASS(vkCreateDescriptorPool); + STRINGISE_ENUM_CLASS(vkCreateDescriptorSetLayout); + STRINGISE_ENUM_CLASS(vkCreateBuffer); + STRINGISE_ENUM_CLASS(vkCreateBufferView); + STRINGISE_ENUM_CLASS(vkCreateImage); + STRINGISE_ENUM_CLASS(vkCreateImageView); + STRINGISE_ENUM_CLASS(vkCreateDepthTargetView); + STRINGISE_ENUM_CLASS(vkCreateSampler); + STRINGISE_ENUM_CLASS(vkCreateShaderModule); + STRINGISE_ENUM_CLASS(vkCreatePipelineLayout); + STRINGISE_ENUM_CLASS(vkCreatePipelineCache); + STRINGISE_ENUM_CLASS(vkCreateGraphicsPipelines); + STRINGISE_ENUM_CLASS(vkCreateComputePipelines); + STRINGISE_ENUM_CLASS(vkGetSwapchainImagesKHR); + STRINGISE_ENUM_CLASS(vkCreateSemaphore); + STRINGISE_ENUM_CLASS(vkCreateFence); + STRINGISE_ENUM_CLASS(vkGetFenceStatus); + STRINGISE_ENUM_CLASS(vkResetFences); + STRINGISE_ENUM_CLASS(vkWaitForFences); + STRINGISE_ENUM_CLASS(vkCreateEvent); + STRINGISE_ENUM_CLASS(vkGetEventStatus); + STRINGISE_ENUM_CLASS(vkSetEvent); + STRINGISE_ENUM_CLASS(vkResetEvent); + STRINGISE_ENUM_CLASS(vkCreateQueryPool); + STRINGISE_ENUM_CLASS(vkAllocateDescriptorSets); + STRINGISE_ENUM_CLASS(vkUpdateDescriptorSets); + STRINGISE_ENUM_CLASS(vkBeginCommandBuffer); + STRINGISE_ENUM_CLASS(vkEndCommandBuffer); + STRINGISE_ENUM_CLASS(vkQueueWaitIdle); + STRINGISE_ENUM_CLASS(vkDeviceWaitIdle); + STRINGISE_ENUM_CLASS(vkQueueSubmit); + STRINGISE_ENUM_CLASS(vkBindBufferMemory); + STRINGISE_ENUM_CLASS(vkBindImageMemory); + STRINGISE_ENUM_CLASS(vkQueueBindSparse); + STRINGISE_ENUM_CLASS(vkCmdBeginRenderPass); + STRINGISE_ENUM_CLASS(vkCmdNextSubpass); + STRINGISE_ENUM_CLASS(vkCmdExecuteCommands); + STRINGISE_ENUM_CLASS(vkCmdEndRenderPass); + STRINGISE_ENUM_CLASS(vkCmdBindPipeline); + STRINGISE_ENUM_CLASS(vkCmdSetViewport); + STRINGISE_ENUM_CLASS(vkCmdSetScissor); + STRINGISE_ENUM_CLASS(vkCmdSetLineWidth); + STRINGISE_ENUM_CLASS(vkCmdSetDepthBias); + STRINGISE_ENUM_CLASS(vkCmdSetBlendConstants); + STRINGISE_ENUM_CLASS(vkCmdSetDepthBounds); + STRINGISE_ENUM_CLASS(vkCmdSetStencilCompareMask); + STRINGISE_ENUM_CLASS(vkCmdSetStencilWriteMask); + STRINGISE_ENUM_CLASS(vkCmdSetStencilReference); + STRINGISE_ENUM_CLASS(vkCmdBindDescriptorSets); + STRINGISE_ENUM_CLASS(vkCmdBindVertexBuffers); + STRINGISE_ENUM_CLASS(vkCmdBindIndexBuffer); + STRINGISE_ENUM_CLASS(vkCmdCopyBufferToImage); + STRINGISE_ENUM_CLASS(vkCmdCopyImageToBuffer); + STRINGISE_ENUM_CLASS(vkCmdCopyBuffer); + STRINGISE_ENUM_CLASS(vkCmdCopyImage); + STRINGISE_ENUM_CLASS(vkCmdBlitImage); + STRINGISE_ENUM_CLASS(vkCmdResolveImage); + STRINGISE_ENUM_CLASS(vkCmdUpdateBuffer); + STRINGISE_ENUM_CLASS(vkCmdFillBuffer); + STRINGISE_ENUM_CLASS(vkCmdPushConstants); + STRINGISE_ENUM_CLASS(vkCmdClearColorImage); + STRINGISE_ENUM_CLASS(vkCmdClearDepthStencilImage); + STRINGISE_ENUM_CLASS(vkCmdClearAttachments); + STRINGISE_ENUM_CLASS(vkCmdPipelineBarrier); + STRINGISE_ENUM_CLASS(vkCmdWriteTimestamp); + STRINGISE_ENUM_CLASS(vkCmdCopyQueryPoolResults); + STRINGISE_ENUM_CLASS(vkCmdBeginQuery); + STRINGISE_ENUM_CLASS(vkCmdEndQuery); + STRINGISE_ENUM_CLASS(vkCmdResetQueryPool); + STRINGISE_ENUM_CLASS(vkCmdSetEvent); + STRINGISE_ENUM_CLASS(vkCmdResetEvent); + STRINGISE_ENUM_CLASS(vkCmdWaitEvents); + STRINGISE_ENUM_CLASS(vkCmdDraw); + STRINGISE_ENUM_CLASS(vkCmdDrawIndirect); + STRINGISE_ENUM_CLASS(vkCmdDrawIndexed); + STRINGISE_ENUM_CLASS(vkCmdDrawIndexedIndirect); + STRINGISE_ENUM_CLASS(vkCmdDispatch); + STRINGISE_ENUM_CLASS(vkCmdDispatchIndirect); + STRINGISE_ENUM_CLASS(vkCmdDebugMarkerBeginEXT); + STRINGISE_ENUM_CLASS(vkCmdDebugMarkerInsertEXT); + STRINGISE_ENUM_CLASS(vkCmdDebugMarkerEndEXT); + STRINGISE_ENUM_CLASS(vkDebugMarkerSetObjectNameEXT); + STRINGISE_ENUM_CLASS(vkCreateSwapchainKHR); + STRINGISE_ENUM_CLASS(SetShaderDebugPath); + STRINGISE_ENUM_CLASS(vkRegisterDeviceEventEXT); + STRINGISE_ENUM_CLASS(vkRegisterDisplayEventEXT); + STRINGISE_ENUM_CLASS_NAMED(CaptureScope, "Frame Capture Metadata"); + STRINGISE_ENUM_CLASS_NAMED(CaptureBegin, "Beginning of Capture"); + STRINGISE_ENUM_CLASS_NAMED(CaptureEnd, "End of Capture"); + STRINGISE_ENUM_CLASS_NAMED(Max, "Max Chunk"); + } + END_ENUM_STRINGISE() +} + template <> std::string DoStringise(const VkResourceType &el) {