The problem seems to be Vega-specific (reproed on Vega 64, 20.2.2). On the R7 360 as well as on other cards it works correctly.
The sample in a nutshell is:
- record secondary command buffers wrt. the current view frustum
- subpass 0: execute secondary command buffers (topology: triangle list)
- subpass 1: render bounding boxes (topology: line list)
With a (probably unnecessary) dependency between the subpasses.
Actual | "Expected" |
---|
![actual.jpg actual.jpg](/t5/image/serverpage/image-id/22429iEB9F820DD471D814/image-size/large?v=v2&px=999) | ![expected.jpg expected.jpg](/t5/image/serverpage/image-id/22431i3973722C2F083A64/image-size/large?v=v2&px=999) |
The code is not a "minimal" sample, as I didn't want to change too many things (I only replaced the models and changed some of the behavior), sorry for that. Build in Release, with the latest Vulkan SDK installed: FOR_AMD_5.zip
My first thought was that this is a subpass dependency problem, but didn't find any indication for it. Then I traced the problem to the vkCmdExecuteCommands call (commenting it fixes the box rendering).
Also tested with RenderDoc; it shows the box rendering done correctly, but when I step to the next call, it "retroactively" produces the incorrect result.
UPDATE
Minimal repro, which clearly shows that the problem is caused by the secondary command buffer: FOR_AMD_6.zip