I am trying to measure the execution time of a command buffer using vkCmdWriteTimestamp.
For this, I am using:
vkCmdWriteTimestamp(this->drawCmdBuffers[currentBuffer], VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, this->timestampPool, currentBuffer * TIMESTAMP_MAX + TIMESTAMP_TOP);
vkCmdWriteTimestamp(this->drawCmdBuffers[currentBuffer], VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, this->timestampPool, currentBuffer * TIMESTAMP_MAX + TIMESTAMP_BOTTOM);
And I query the results when it’s available.
However, I am getting pretty much the same time whatever the load in the command buffer… I have the same result on AMD and NVIDIA so I expect I am not quite understanding how this feature is supposed to work.
When I use vkCmdWriteTimestamp
between frames, I am getting something relevant to get a frame rate using either VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT
or VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
.
Is it possible to measure the execution time of a command buffer?
Is there some good documentation somewhere?
I already read vkCmdWriteTimestamp(3) which led me to believe I could measure the execution time of the GPU for a command buffer but I am guessing I misunderstand something here…