vkCmdBindDesciptorSets vs vkCmdPushDescriptorSetKHR

Which one of them is better in term of performance, optimalisation, or anything else.

Push descriptors are for making frequent changes to which resources are used in rendering commands. How frequent is “frequent”? That’s what profiling is for, but generally, you’re talking about per-object resources: matrices, object textures, etc.

Basically, if you were considering using a push constant to index an array of resources to find the right resource for something, then it’s a valid target for push descriptors.

The real question is whether push descriptors are an improvement over dynamic buffer resources. That can only be discovered based on profiling.

Also, since push descriptors are an extension, you cannot rely on them to exist. So if you use them, your application either cannot run without them, or you have to have multiple rendering paths, with multiple descriptor usage patterns.