timing renderpass using renderdoc

Hi Forum,

This is in follow up with my previous query about timing drawcall: https://community.arm.com/support-forums/f/graphics-gaming-and-vr-forum/54832/vulkan-app-drawcall-timing/

I experimented with SSAO application, https://github.com/SaschaWillems/Vulkan/tree/master/examples/ssao and trying to understand the timing at renderpass level.

Attached is the timing which shows 4 renderpasses in which the ssao shader is invoked in renderpass 2. The timing of this renderpass 2 looks reasonable.

What I could not understand is why the timing of other render passes is so high. And this seems to be the case for all renderpass with more that 1 drawcall, the timing seems way off.

Could this be a bug in renderdoc or am I missing anything here?

Thank you,

cmd-timing.txt
 EID  | Event                                                                     | Action # | Duration (Microseconds)
-----------------------------------------------------------------------------------------------------------
1     | - vkDeviceWaitIdle(Device 9)                                              |        |
2     | - vkDeviceWaitIdle(Device 9)                                              |        |
3     | - vkUnmapMemory(Memory 983, (200 bytes))                                  |        |
4     | - vkUnmapMemory(Memory 986, (76 bytes))                                   |        |
5     | - vkQueueWaitIdle(Queue 124)                                              |        |
6     | - vkFlushMappedMemoryRanges(Memory 2530, (11200 bytes))                   |        |
7     | - vkFlushMappedMemoryRanges(Memory 2533, (1860 bytes))                    |        |
8     | - Coherent Mapped Memory Write(Memory 2530, (11200 bytes))                |        |
9     | - Coherent Mapped Memory Write(Memory 2533, (1860 bytes))                 |        |
10    | - vkQueueSubmit({ { Command Buffer 4845 } })                              |        |
11    | - => vkQueueSubmit(1)[0]: vkBeginCommandBuffer(Baked Command Buffer 4863) | 1      |
104   | - Colour Pass #1 (3 Targets + Depth)                                      | 1-26   | 97961.00448
12    |  \- vkCmdBeginRenderPass(C=Clear, D=Clear, S=Don't Care)                  | 1      |
13    |   - vkCmdSetViewport(0, { { 0.00, 0.00, 2696.00, 1260.00 } })             |        |
14    |   - vkCmdSetScissor(0, { { { 0, 0 }, { 2696, 1260 } } })                  |        |
15    |   - vkCmdBindPipeline(Graphics Pipeline 1025)                             |        |
16    |   - vkCmdBindDescriptorSets(0, { Descriptor Set 1006 })                   |        |
17    |   - vkCmdBindVertexBuffers(0, { Buffer 900 })                             |        |
18    |   - vkCmdBindIndexBuffer(Buffer 903, VK_INDEX_TYPE_UINT32)                |        |
19    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 926 })                    |        |
20    |   - vkCmdDrawIndexed(2388, 1)                                             | 1      | 4347.61558
21    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 927 })                    |        |
22    |   - vkCmdDrawIndexed(30504, 1)                                            | 2      | 4266.84635
23    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 928 })                    |        |
24    |   - vkCmdDrawIndexed(17628, 1)                                            | 3      | 4264.38481
25    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 929 })                    |        |
26    |   - vkCmdDrawIndexed(8448, 1)                                             | 4      | 4219.38481
27    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 930 })                    |        |
28    |   - vkCmdDrawIndexed(63, 1)                                               | 5      | 4218.15404
29    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 931 })                    |        |
30    |   - vkCmdDrawIndexed(21264, 1)                                            | 6      | 4161.84634
31    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 932 })                    |        |
32    |   - vkCmdDrawIndexed(2640, 1)                                             | 7      | 4161.46173
33    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 933 })                    |        |
34    |   - vkCmdDrawIndexed(69624, 1)                                            | 8      | 4063.61557
35    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 934 })                    |        |
36    |   - vkCmdDrawIndexed(54, 1)                                               | 9      | 4062.76942
37    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 935 })                    |        |
38    |   - vkCmdDrawIndexed(53064, 1)                                            | 10     | 4018.53865
39    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 936 })                    |        |
40    |   - vkCmdDrawIndexed(10416, 1)                                            | 11     | 4017.53865
41    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 937 })                    |        |
42    |   - vkCmdDrawIndexed(12258, 1)                                            | 12     | 3991.07711
43    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 938 })                    |        |
44    |   - vkCmdDrawIndexed(9126, 1)                                             | 13     | 3990.3848
45    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 939 })                    |        |
46    |   - vkCmdDrawIndexed(94308, 1)                                            | 14     | 3870.69248
47    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 940 })                    |        |
48    |   - vkCmdDrawIndexed(49536, 1)                                            | 15     | 3868.30787
49    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 941 })                    |        |
50    |   - vkCmdDrawIndexed(43008, 1)                                            | 16     | 3777.23094
51    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 942 })                    |        |
52    |   - vkCmdDrawIndexed(49536, 1)                                            | 17     | 3776.00017
53    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 943 })                    |        |
54    |   - vkCmdDrawIndexed(43008, 1)                                            | 18     | 3698.15402
55    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 944 })                    |        |
56    |   - vkCmdDrawIndexed(33024, 1)                                            | 19     | 3697.30786
57    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 945 })                    |        |
58    |   - vkCmdDrawIndexed(56832, 1)                                            | 20     | 3629.4617
59    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 946 })                    |        |
60    |   - vkCmdDrawIndexed(59484, 1)                                            | 21     | 3628.61555
61    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 947 })                    |        |
62    |   - vkCmdDrawIndexed(96, 1)                                               | 22     | 3586.69247
63    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 948 })                    |        |
64    |   - vkCmdDrawIndexed(27552, 1)                                            | 23     | 3586.07709
65    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 949 })                    |        |
66    |   - vkCmdDrawIndexed(49488, 1)                                            | 24     | 3529.92324
67    |   - vkCmdBindDescriptorSets(1, { Descriptor Set 950 })                    |        |
68    |   - vkCmdDrawIndexed(43452, 1)                                            | 25     | 3528.92324
69    |   - vkCmdEndRenderPass(C=Store, D=Store, S=Don't Care)                    | 26     |
105   | - Colour Pass #2 (1 Targets)                                              | 26-27  | 34781.92467
70    |  \- vkCmdBeginRenderPass(Clear)                                           | 26     |
71    |   - vkCmdSetViewport(0, { { 0.00, 0.00, 1348.00, 630.00 } })              |        |
72    |   - vkCmdSetScissor(0, { { { 0, 0 }, { 1348, 630 } } })                   |        |
73    |   - vkCmdBindDescriptorSets(0, { Descriptor Set 1009 })                   |        |
74    |   - vkCmdBindPipeline(Graphics Pipeline 1020)                             |        |
75    |   - vkCmdDraw(3, 1)                                                       | 26     | 34781.92467
76    |   - vkCmdEndRenderPass(Store)                                             | 27     |
106   | - Colour Pass #3 (1 Targets)                                              | 27-28  | 1208.92313
77    |  \- vkCmdBeginRenderPass(Clear)                                           | 27     |
78    |   - vkCmdSetViewport(0, { { 0.00, 0.00, 2696.00, 1260.00 } })             |        |
79    |   - vkCmdSetScissor(0, { { { 0, 0 }, { 2696, 1260 } } })                  |        |
80    |   - vkCmdBindDescriptorSets(0, { Descriptor Set 1012 })                   |        |
81    |   - vkCmdBindPipeline(Graphics Pipeline 1022)                             |        |
82    |   - vkCmdDraw(3, 1)                                                       | 27     | 1208.92313
83    |   - vkCmdEndRenderPass(Store)                                             | 28     |
107   | - Colour Pass #4 (1 Targets + Depth)                                      | 28-31  | 8441.61577
84    |  \- vkCmdBeginRenderPass(C=Clear, DS=Clear)                               | 28     |
85    |   - vkCmdSetViewport(0, { { 0.00, 0.00, 2696.00, 1260.00 } })             |        |
86    |   - vkCmdSetScissor(0, { { { 0, 0 }, { 2696, 1260 } } })                  |        |
87    |   - vkCmdBindDescriptorSets(0, { Descriptor Set 1015 })                   |        |
88    |   - vkCmdBindPipeline(Graphics Pipeline 1018)                             |        |
89    |   - vkCmdDraw(3, 1)                                                       | 28     | 2864.61552
90    |   - vkCmdSetViewport(0, { { 0.00, 0.00, 2696.00, 1260.00 } })             |        |
91    |   - vkCmdSetScissor(0, { { { 0, 0 }, { 2696, 1260 } } })                  |        |
92    |   - vkCmdBindPipeline(Graphics Pipeline 254)                              |        |
93    |   - vkCmdBindDescriptorSets(0, { Descriptor Set 252 })                    |        |
94    |   - vkCmdPushConstants(VK_SHADER_STAGE_VERTEX_BIT, (16 bytes))            |        |
95    |   - vkCmdBindVertexBuffers(0, { Buffer 2529 })                            |        |
96    |   - vkCmdBindIndexBuffer(Buffer 2532, VK_INDEX_TYPE_UINT16)               |        |
97    |   - vkCmdSetScissor(0, { { { 0, 0 }, { 2696, 1260 } } })                  |        |
98    |   - vkCmdDrawIndexed(159, 1)                                              | 29     | 2800.30782
99    |   - vkCmdSetScissor(0, { { { 24, 43 }, { 237, 283 } } })                  |        |
100   |   - vkCmdDrawIndexed(771, 1)                                              | 30     | 2776.69243
101   |   - vkCmdEndRenderPass(C=Store, D=Store, S=Don't Care)                    | 31     |
102   | - => vkQueueSubmit(1)[0]: vkEndCommandBuffer(Baked Command Buffer 4863)   | 31     |
103   | - vkQueuePresentKHR(Swapchain Image 4778)                                 | 31     |

  • Not sure what RenderDoc is doing under the hood here, but in general a lot of timing techniques only really make sense for an immediate-mode GPU architecture. The fact that RenderDoc seems to be trying to time individual draw commands makes me think that's it's relatively invasive in terms of what it's doing.