Intercept device functions via vkGetInstanceProcAddr() #22
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Vulkan allows device functions to be (less efficiently) intercepted via
vkGetInstanceProcAddr() instead of vkGetDeviceProcAddr(). This PR adds
support for intercepting these correctly.
This includes a custom vkGetDeviceImageMemoryRequirementsKHR() to skip
driver invocations if the driver dispatch pointer is nullptr. This is a
workaround for a bug in Unreal Engine which fetches this function using
vkGetInstanceProcAddr() with a Vulkan 1.1 instance (when it is available
and is therefore non-null) and then tries to use it later with a device
created from a Vulkan 1.0 instance (when it is not available because
VK_KHR_maintenance4 is a Vulkan 1.1 extension).