From ef79bc8e5a81cc33257f1192e341cbea8d83ab7a Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Mon, 26 Oct 2015 20:14:54 +0800 Subject: bug 14876: Can timestamps be written inside a renderpass? (WIP) Timestamps are written to a query pool. https://cvs.khronos.org/bugzilla/show_bug.cgi?id=14876 --- icd/nulldrv/nulldrv.c | 4 ++-- include/vulkan.h | 11 ++++++----- layers/draw_state.cpp | 4 ++-- layers/param_checker.cpp | 12 ++++++------ loader/trampoline.c | 4 ++-- vulkan.py | 4 ++-- 6 files changed, 20 insertions(+), 19 deletions(-) diff --git a/icd/nulldrv/nulldrv.c b/icd/nulldrv/nulldrv.c index 3c7f4bfe..cc837867 100644 --- a/icd/nulldrv/nulldrv.c +++ b/icd/nulldrv/nulldrv.c @@ -1062,8 +1062,8 @@ ICD_EXPORT void VKAPI vkCmdCopyQueryPoolResults( ICD_EXPORT void VKAPI vkCmdWriteTimestamp( VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, - VkBuffer destBuffer, - VkDeviceSize destOffset) + VkQueryPool queryPool, + uint32_t slot) { NULLDRV_LOG_FUNC; } diff --git a/include/vulkan.h b/include/vulkan.h index e17207b3..514c118d 100644 --- a/include/vulkan.h +++ b/include/vulkan.h @@ -412,9 +412,10 @@ typedef enum { typedef enum { VK_QUERY_TYPE_OCCLUSION = 0, VK_QUERY_TYPE_PIPELINE_STATISTICS = 1, + VK_QUERY_TYPE_TIMESTAMP = 2, VK_QUERY_TYPE_BEGIN_RANGE = VK_QUERY_TYPE_OCCLUSION, - VK_QUERY_TYPE_END_RANGE = VK_QUERY_TYPE_PIPELINE_STATISTICS, - VK_QUERY_TYPE_NUM = (VK_QUERY_TYPE_PIPELINE_STATISTICS - VK_QUERY_TYPE_OCCLUSION + 1), + VK_QUERY_TYPE_END_RANGE = VK_QUERY_TYPE_TIMESTAMP, + VK_QUERY_TYPE_NUM = (VK_QUERY_TYPE_TIMESTAMP - VK_QUERY_TYPE_OCCLUSION + 1), VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF } VkQueryType; @@ -2177,7 +2178,7 @@ typedef void (VKAPI *PFN_vkCmdPipelineBarrier)(VkCmdBuffer cmdBuffer, VkPipeline typedef void (VKAPI *PFN_vkCmdBeginQuery)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkQueryControlFlags flags); typedef void (VKAPI *PFN_vkCmdEndQuery)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot); typedef void (VKAPI *PFN_vkCmdResetQueryPool)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount); -typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer destBuffer, VkDeviceSize destOffset); +typedef void (VKAPI *PFN_vkCmdWriteTimestamp)(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot); typedef void (VKAPI *PFN_vkCmdCopyQueryPoolResults)(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize stride, VkQueryResultFlags flags); typedef void (VKAPI *PFN_vkCmdPushConstants)(VkCmdBuffer cmdBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t start, uint32_t length, const void* values); typedef void (VKAPI *PFN_vkCmdBeginRenderPass)(VkCmdBuffer cmdBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkRenderPassContents contents); @@ -2913,8 +2914,8 @@ void VKAPI vkCmdResetQueryPool( void VKAPI vkCmdWriteTimestamp( VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, - VkBuffer destBuffer, - VkDeviceSize destOffset); + VkQueryPool queryPool, + uint32_t slot); void VKAPI vkCmdCopyQueryPoolResults( VkCmdBuffer cmdBuffer, diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index 2b6d55ee..fec569f9 100755 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -3236,7 +3236,7 @@ VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQu startQuery, queryCount, destBuffer, destOffset, stride, flags); } -VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer destBuffer, VkDeviceSize destOffset) +VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot) { VkBool32 skipCall = VK_FALSE; layer_data* dev_data = get_my_data_ptr(get_dispatch_key(cmdBuffer), layer_data_map); @@ -3250,7 +3250,7 @@ VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipeline } } if (VK_FALSE == skipCall) - dev_data->device_dispatch_table->CmdWriteTimestamp(cmdBuffer, pipelineStage, destBuffer, destOffset); + dev_data->device_dispatch_table->CmdWriteTimestamp(cmdBuffer, pipelineStage, queryPool, slot); } VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer) diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index d7c13d40..bdb5dad6 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -6362,8 +6362,8 @@ VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool( bool PostCmdWriteTimestamp( VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, - VkBuffer destBuffer, - VkDeviceSize destOffset) + VkQueryPool queryPool, + uint32_t slot) { ValidateEnumerator(pipelineStage); @@ -6374,12 +6374,12 @@ bool PostCmdWriteTimestamp( VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp( VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, - VkBuffer destBuffer, - VkDeviceSize destOffset) + VkQueryPool queryPool, + uint32_t slot) { - get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, pipelineStage, destBuffer, destOffset); + get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, pipelineStage, queryPool, slot); - PostCmdWriteTimestamp(cmdBuffer, pipelineStage, destBuffer, destOffset); + PostCmdWriteTimestamp(cmdBuffer, pipelineStage, queryPool, slot); } bool PostCmdCopyQueryPoolResults( diff --git a/loader/trampoline.c b/loader/trampoline.c index 53a1a685..d2f28a82 100644 --- a/loader/trampoline.c +++ b/loader/trampoline.c @@ -1405,13 +1405,13 @@ LOADER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool disp->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount); } -LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer destBuffer, VkDeviceSize destOffset) +LOADER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t slot) { const VkLayerDispatchTable *disp; disp = loader_get_dispatch(cmdBuffer); - disp->CmdWriteTimestamp(cmdBuffer, pipelineStage, destBuffer, destOffset); + disp->CmdWriteTimestamp(cmdBuffer, pipelineStage, queryPool, slot); } LOADER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize stride, VkFlags flags) diff --git a/vulkan.py b/vulkan.py index 174501ea..40d41de0 100755 --- a/vulkan.py +++ b/vulkan.py @@ -938,8 +938,8 @@ core = Extension( Proto("void", "CmdWriteTimestamp", [Param("VkCmdBuffer", "cmdBuffer"), Param("VkPipelineStageFlagBits", "pipelineStage"), - Param("VkBuffer", "destBuffer"), - Param("VkDeviceSize", "destOffset")]), + Param("VkQueryPool", "queryPool"), + Param("uint32_t", "slot")]), Proto("void", "CmdCopyQueryPoolResults", [Param("VkCmdBuffer", "cmdBuffer"), -- cgit v1.2.3