Using vkCmdWriteTimestamp to measure the execution time of a command buffer

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 https://www.khronos.org/registry/vulkan/specs/1.1-extensions/man/html/vkCmdWriteTimestamp.html 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…

I resolved my issue.

To get relevant results for a command buffer, I just need to use two vkCmdWriteTimestamp, one just after vkBeginCommandBuffer and one just before vkEndCommandBuffer and compute the difference.