Commit dc85364a by Nicolas Capens Committed by Nicolas Capens

Fix entry function pointer queries.

vkGetInstanceProcAddr must return NULL when the instance parameter is NULL, except for a few global functions. vkGetDeviceProcAddr must return NULL for any non-device-level functions. Fixes dEQP-VK.api.version_check.entry_points Bug b/116336664 Change-Id: I446edb0b8c4b94938e0ab77913c8ad391d490f4f Reviewed-on: https://swiftshader-review.googlesource.com/c/22688Tested-by: 's avatarNicolas Capens <nicolascapens@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com>
parent 318d5e03
...@@ -19,7 +19,8 @@ ...@@ -19,7 +19,8 @@
namespace vk namespace vk
{ {
PFN_vkVoidFunction GetProcAddr(const char* pName); PFN_vkVoidFunction GetInstanceProcAddr(VkInstance instance, const char* pName);
PFN_vkVoidFunction GetDeviceProcAddr(VkDevice device, const char* pName);
} }
#endif // VK_UTILS_HPP_ #endif // VK_UTILS_HPP_
\ No newline at end of file
...@@ -45,7 +45,9 @@ extern "C" ...@@ -45,7 +45,9 @@ extern "C"
{ {
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char* pName) VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char* pName)
{ {
return vk::GetProcAddr(pName); TRACE("(VkInstance instance = 0x%X, const char* pName = 0x%X)", instance, pName);
return vk::GetInstanceProcAddr(instance, pName);
} }
VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance) VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance)
...@@ -186,13 +188,15 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice ...@@ -186,13 +188,15 @@ VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(VkPhysicalDevice
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* pName) VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* pName)
{ {
TRACE("(VkInstance instance = 0x%X, const char* pName = 0x%X)", instance, pName); TRACE("(VkInstance instance = 0x%X, const char* pName = 0x%X)", instance, pName);
return vk::GetProcAddr(pName);
return vk::GetInstanceProcAddr(instance, pName);
} }
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* pName) VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* pName)
{ {
TRACE("(VkDevice device = 0x%X, const char* pName = 0x%X)", device, pName); TRACE("(VkDevice device = 0x%X, const char* pName = 0x%X)", device, pName);
return vk::GetProcAddr(pName);
return vk::GetDeviceProcAddr(device, pName);
} }
VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice) VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment