vulkan: Add a common dispatch framework
We've got 5 different Vulkan drivers in the tree these days and every single one of them has it's own modified copy of
anv_entrypoints_gen.py, none of which are quite identical. It's time we quit messing around with copying and pasting code and start actually unifying things.
This commit adds new
vk_physical_device base structs and moves all the extension and entrypoint handling code from ANV into them. Drivers provide dispatch tables and tables of supported extensions at init time and the core code takes care of the rest. It handles extension verification, filling out dispatch tables, and provides helpers for implementing
Get*ProcAddr. The last few patches also demonstrate how this can be used to provide 100% common implementations of certain extensions where all the driver has to do is advertise the extension.
I'd like to also convert VK_EXT_debug_report and VK_deferred_host_operations but I'd like to wait until RADV and others are converted so that we can straight-up implement the entrypoints instead of adding unnecessary wrappers.