vkCmdBindDescriptorSets sizeof pDynamicOffsets[0]

why does the type of pDynamicOffsets is uint32_t but not VkDeviceSize?

The specs about vkAllocateMemory says:

Some platforms may have a limit on the maximum size of a single allocation. For example, certain systems may fail to create allocations with a size greater than or equal to 4GB. Such a limit is implementation-dependent, and if such a failure occurs then the error VK_ERROR_OUT_OF_DEVICE_MEMORY should be returned.

So in theory, I can allocate more than 4GB in one call ( don’t ask me what for ) but pDynamicOffsets in vkCmdBindDescriptorSets put the limit to 4GB.