Use global Vulkan dispatch for vkGetInstanceProcAddr
vkGetInstanceProcAddr(instance, "vkGetInstanceProcAddr") may return
nullptr on some drivers. The global dispatch is guaranteed to be valid.
The spec forces vkGetInstanceProcAddr to return a valid function pointer
when pName = "vkGetInstanceProcAddr": https://www.khronos.org/registry/vulkan/specs/1.3-extensions/html/vkspec.html#initialization-functionpointers.
The language is a bit vague though.
Bug: b/217395292
Change-Id: Ie7b814eb324f815ad6ff7309d4fb75619aeff8c4
diff --git a/stream-servers/vulkan/VkCommonOperations.cpp b/stream-servers/vulkan/VkCommonOperations.cpp
index bb7f42f..a3e4e14 100644
--- a/stream-servers/vulkan/VkCommonOperations.cpp
+++ b/stream-servers/vulkan/VkCommonOperations.cpp
@@ -601,22 +601,17 @@
sVkEmulation->instanceSupportsMoltenVK = moltenVKSupported;
if (sVkEmulation->instanceSupportsExternalMemoryCapabilities) {
- sVkEmulation->getImageFormatProperties2Func = reinterpret_cast<
- PFN_vkGetPhysicalDeviceImageFormatProperties2KHR>(
- ivk->vkGetInstanceProcAddr(
- sVkEmulation->instance,
- "vkGetPhysicalDeviceImageFormatProperties2KHR"));
- sVkEmulation->getPhysicalDeviceProperties2Func = reinterpret_cast<
- PFN_vkGetPhysicalDeviceProperties2KHR>(
- ivk->vkGetInstanceProcAddr(
- sVkEmulation->instance,
- "vkGetPhysicalDeviceProperties2KHR"));
+ sVkEmulation->getImageFormatProperties2Func =
+ reinterpret_cast<PFN_vkGetPhysicalDeviceImageFormatProperties2KHR>(
+ vk->vkGetInstanceProcAddr(sVkEmulation->instance,
+ "vkGetPhysicalDeviceImageFormatProperties2KHR"));
+ sVkEmulation->getPhysicalDeviceProperties2Func =
+ reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2KHR>(vk->vkGetInstanceProcAddr(
+ sVkEmulation->instance, "vkGetPhysicalDeviceProperties2KHR"));
if (!sVkEmulation->getPhysicalDeviceProperties2Func) {
- sVkEmulation->getPhysicalDeviceProperties2Func = reinterpret_cast<
- PFN_vkGetPhysicalDeviceProperties2KHR>(
- ivk->vkGetInstanceProcAddr(
- sVkEmulation->instance,
- "vkGetPhysicalDeviceProperties2"));
+ sVkEmulation->getPhysicalDeviceProperties2Func =
+ reinterpret_cast<PFN_vkGetPhysicalDeviceProperties2KHR>(vk->vkGetInstanceProcAddr(
+ sVkEmulation->instance, "vkGetPhysicalDeviceProperties2"));
}
}
diff --git a/stream-servers/vulkan/VkDecoderGlobalState.cpp b/stream-servers/vulkan/VkDecoderGlobalState.cpp
index 31cf817..e7b2985 100644
--- a/stream-servers/vulkan/VkDecoderGlobalState.cpp
+++ b/stream-servers/vulkan/VkDecoderGlobalState.cpp
@@ -572,13 +572,12 @@
if (m_emu->instanceSupportsExternalMemoryCapabilities) {
PFN_vkGetPhysicalDeviceProperties2KHR getPhysdevProps2Func =
- (PFN_vkGetPhysicalDeviceProperties2KHR)(vk->vkGetInstanceProcAddr(
- instance, "vkGetPhysicalDeviceProperties2KHR"));
+ (PFN_vkGetPhysicalDeviceProperties2KHR)(
+ m_vk->vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2KHR"));
if (!getPhysdevProps2Func) {
- getPhysdevProps2Func =
- (PFN_vkGetPhysicalDeviceProperties2KHR)(vk->vkGetInstanceProcAddr(
- instance, "vkGetPhysicalDeviceProperties2"));
+ getPhysdevProps2Func = (PFN_vkGetPhysicalDeviceProperties2KHR)(
+ m_vk->vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceProperties2"));
}
if (!getPhysdevProps2Func) {