Push Descriptors are broken on many Android’s except for the newest models so I reworked my code to use the descriptor pool / sets way of handling descriptors. On my PC I’m telling Vulkan to use app version 1.1 and everything works well. I allocate the pool and allocate descriptor sets as I need them up to what the pool holds. At this point everything works as expected.
For comparability on older Androids, I set the Vulkan app version to 1.0. On my PC, setting Vulkan to use app version 1.0, now the second time I allocate a descriptor set, I get validation errors about “out of pool memory”. At first I thought I broke something, spent a day stepping through the code, validating all values, can’t see anything wrong, very baffling… but then I remembered that I changed Vulkan to use app version 1.0. Changed it back to 1.1 and everything works as before.
The best I can determine is that under app version 1.0, your first descriptor set allocation will work but any subsequent allocations will fail. It doesn’t matter that you allocated a pool for 100 descriptor sets and the first allocation against the pool is just 1. What also sucks is that regardless of the app version, Android descriptor set allocation always fails on the second attempt.
The only workaround I can think of right now is on the first descriptor set allocation, allocate the whole pool worth of descriptor sets at once and hand them out as needed.