I was pleased to find that upon updating to the Android 14 preview, VK_EXT_dynamic_state + VK 1.3 were both supported. However when updating my application to take advantage of the new vertex binding call - 'bindVertexBuffers2EXT' - making use of both the dynamic stride and limit capabilities, I found that causes severe graphical corruption. Almost as if the GPU just skips some draws entirely and lets others through just fine. I can send an RDC capture or a demo app if necessary.
Pixel 6 Pro
Thanks for another report, it's much appreciated :) This is unfortunately indeed broken on r36p0 up-to-and-including r39 (except for r38p2) -- there are multiple scenarios where we fail to handle the pStrides argument correctly, so in practice we can only recommend to never pass anything except nullptr here...
This is fixed on r40p0 and up -- however there is a separate issue affecting vkCmdBindVertexBuffers2EXT on r40 and r41 related to calling the function multiple times. I'm clarifying the specific issue there now (i.e. if redundantly binding the same PSO is a workaround for this or not); will report back on this once I know.
On the r40/r41 point -- seems like on these drivers vkCmdBindVertexBuffers2EXT will incorrectly apply the dynamic stride to all previous draws using the same PSO. In other words redundant re-bind is not a workaround, unfortunately.
In practice, best to avoid dynamic stride (pStrides != nullptr) until R42 and up.
I'll follow your advice of avoiding dynamic stride for <r42 then, appreciate the quick and detailed response :) Are there any other known dynamic state issues or should I be fine with just the stride workaround?
Sounds good :) There were various issues with other dynamic state as well but I believe we caught them in time. That said there's always a small non-zero chance not all patches made it to all partners before ship -- so it might be a good idea to be on the lookout for issues and test without dynamic state if you see any weird behaviours. As far as I know only vkCmdBindVertexBuffers2EXT is the only one that is definitely problematic.