Skip to content

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_instance and 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.

Merge request reports