diff options
| author | Chia-I Wu <olvaffe@gmail.com> | 2016-04-28 15:16:59 +0800 |
|---|---|---|
| committer | Chia-I Wu <olv@google.com> | 2016-05-13 10:35:37 +0800 |
| commit | 4953006673c8a85e5f257864f83c586e49a66229 (patch) | |
| tree | 2d121b76985b5d706cf71acab84303311a927d7c /layers/swapchain.cpp | |
| parent | 26e0c08344ae07f3690893229f53e08f98abb8a4 (diff) | |
| download | usermoji-4953006673c8a85e5f257864f83c586e49a66229.tar.xz | |
swapchain: improve GetInstanceProcAddr
Handle device commands as well. Move handling of interface functions to
v0's vkGetInstanceProcAddr.
Diffstat (limited to 'layers/swapchain.cpp')
| -rw-r--r-- | layers/swapchain.cpp | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/layers/swapchain.cpp b/layers/swapchain.cpp index b7dfad14..2da7b62d 100644 --- a/layers/swapchain.cpp +++ b/layers/swapchain.cpp @@ -2168,24 +2168,22 @@ VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, cons VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *funcName) { PFN_vkVoidFunction proc = intercept_core_instance_command(funcName); + if (!proc) + proc = intercept_core_device_command(funcName); + if (!proc) + proc = intercept_khr_swapchain_command(funcName, VK_NULL_HANDLE); if (proc) return proc; - if (instance == VK_NULL_HANDLE) { - return NULL; - } - - PFN_vkVoidFunction addr; + assert(instance); layer_data *my_data; my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); VkLayerInstanceDispatchTable *pTable = my_data->instance_dispatch_table; - addr = debug_report_get_instance_proc_addr(my_data->report_data, funcName); - if (addr) { - return addr; - } - proc = intercept_khr_surface_command(funcName, instance); + proc = debug_report_get_instance_proc_addr(my_data->report_data, funcName); + if (!proc) + proc = intercept_khr_surface_command(funcName, instance); if (proc) return proc; @@ -2205,13 +2203,15 @@ intercept_core_instance_command(const char *name) { { "vkDestroyInstance", reinterpret_cast<PFN_vkVoidFunction>(DestroyInstance) }, { "vkCreateDevice", reinterpret_cast<PFN_vkVoidFunction>(CreateDevice) }, { "vkEnumeratePhysicalDevices", reinterpret_cast<PFN_vkVoidFunction>(EnumeratePhysicalDevices) }, - { "vkEnumerateInstanceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateInstanceLayerProperties) }, - { "vkEnumerateDeviceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceLayerProperties) }, - { "vkEnumerateInstanceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateInstanceExtensionProperties) }, { "vkEnumerateDeviceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(EnumerateDeviceExtensionProperties) }, { "vkGetPhysicalDeviceQueueFamilyProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceQueueFamilyProperties) }, }; + // we should never be queried for these commands + assert(strcmp(name, "vkEnumerateInstanceLayerProperties") && + strcmp(name, "vkEnumerateInstanceExtensionProperties") && + strcmp(name, "vkEnumerateDeviceLayerProperties")); + for (size_t i = 0; i < ARRAY_SIZE(core_instance_commands); i++) { if (!strcmp(core_instance_commands[i].name, name)) return core_instance_commands[i].proc; @@ -2359,5 +2359,14 @@ VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkD } VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *funcName) { + if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties")) + return reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateInstanceLayerProperties); + if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties")) + return reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateDeviceLayerProperties); + if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties")) + return reinterpret_cast<PFN_vkVoidFunction>(vkEnumerateInstanceExtensionProperties); + if (!strcmp(funcName, "vkGetInstanceProcAddr")) + return reinterpret_cast<PFN_vkVoidFunction>(vkGetInstanceProcAddr); + return swapchain::GetInstanceProcAddr(instance, funcName); } |
