Hi, I am learning to use Nsight Systems (current version: 2025.1.1.103-251135427971v0 Linux). My laptop has a Quadro P2000 GPU (driver version: 545.23.06), and I run on Debian Unstable.
My problem is that when capturing Vulkan applications it seems that many command buffer calls are missing from the capture. For instance, when trying to capture from vkgears I see that before each frame is rendered this command buffer is recorded:
When zooming in it seems that only two commands were recorded in the command buffer, vkCmdBindPipeline()
and vkCmdBindDescriptorSets()
. This is wrong, of course, the program records many other calls into each command buffer. For example, if I use ltrace
to dump the calls made by the program we can see something more sensible:
$ ltrace vkgears |& grep vkCmd
[...]
vkCmdBeginRenderPass(0x562ca498dec0, 0x7ffd1c7167a0, 0, 0x7ffd1c7169bc) = 0
vkCmdBindVertexBuffers(0x562ca498dec0, 0, 2, 0x7ffd1c7168a0) = 2
vkCmdBindPipeline(0x562ca498dec0, 0, 0x562ca499bfd0, 1) = 0
vkCmdBindDescriptorSets(0x562ca498dec0, 0, 0x562ca477ed80, 0) = 0
vkCmdSetViewport(0x562ca498dec0, 0, 1, 0x7ffd1c716820) = 0x562ca498df7c
vkCmdSetScissor(0x562ca498dec0, 0, 1, 0x7ffd1c7167e0) = 0x562ca498e0fc
vkCmdPushConstants(0x562ca498dec0, 0x562ca477ed80, 1, 0) = 0
vkCmdDraw(0x562ca498dec0, 930, 1, 0) = 0
vkCmdPushConstants(0x562ca498dec0, 0x562ca477ed80, 1, 0) = 0
vkCmdDraw(0x562ca498dec0, 470, 1, 930) = 0
vkCmdPushConstants(0x562ca498dec0, 0x562ca477ed80, 1, 0) = 0
vkCmdDraw(0x562ca498dec0, 470, 1, 1400) = 0
vkCmdEndRenderPass(0x562ca498dec0, 0, 0, 0xeffefff7ff80) = 0
vkCmdUpdateBuffer(0x562ca49c04a0, 0x562ca5113010, 0, 64) = 0
[...]
You can also see from the program source code that no command buffer is recorded with just those two commands.
So I wonder why Nsight Systems is not showing the other commands and what I could do to have them shown. Unfortunately it’s quite hard to profile command buffer recording if most of the commands are not captured.
Thanks!