aboutsummaryrefslogtreecommitdiff
path: root/layers/threading.cpp
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-06-07 13:08:41 -0600
committerMark Lobodzinski <mark@lunarg.com>2017-06-09 08:48:10 -0600
commit9fd722c87a9f47e9925e395200d3fec9c602b567 (patch)
tree72a09c4aa16864ff50dfc507e1757c47522446bf /layers/threading.cpp
parent606965338ce98e4722fbe69b5c51627a45781489 (diff)
downloadusermoji-9fd722c87a9f47e9925e395200d3fec9c602b567.tar.xz
layers: Simplify threadchecker GPA handling
Change-Id: I11cdc2f6524926714d22abd08fba0a670a3a4a97
Diffstat (limited to 'layers/threading.cpp')
-rw-r--r--layers/threading.cpp71
1 files changed, 15 insertions, 56 deletions
diff --git a/layers/threading.cpp b/layers/threading.cpp
index 7808a818..b3e2a17c 100644
--- a/layers/threading.cpp
+++ b/layers/threading.cpp
@@ -203,13 +203,6 @@ static const VkLayerProperties layerProps = {
1, "Google Validation Layer",
};
-static inline PFN_vkVoidFunction layer_intercept_proc(const char *name) {
- for (unsigned int i = 0; i < sizeof(procmap) / sizeof(procmap[0]); i++) {
- if (!strcmp(name, procmap[i].name)) return procmap[i].pFunc;
- }
- return NULL;
-}
-
VKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(uint32_t *pCount, VkLayerProperties *pProperties) {
return util_GetLayerProperties(1, &layerProps, pCount, pProperties);
}
@@ -243,62 +236,28 @@ VKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevi
// Need to prototype this call because it's internal and does not show up in vk.xml
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetPhysicalDeviceProcAddr(VkInstance instance, const char *funcName);
-static inline PFN_vkVoidFunction layer_intercept_instance_proc(const char *name) {
- if (!name || name[0] != 'v' || name[1] != 'k') return NULL;
-
- name += 2;
- if (!strcmp(name, "CreateInstance")) return (PFN_vkVoidFunction)CreateInstance;
- if (!strcmp(name, "DestroyInstance")) return (PFN_vkVoidFunction)DestroyInstance;
- if (!strcmp(name, "EnumerateInstanceLayerProperties")) return (PFN_vkVoidFunction)EnumerateInstanceLayerProperties;
- if (!strcmp(name, "EnumerateInstanceExtensionProperties")) return (PFN_vkVoidFunction)EnumerateInstanceExtensionProperties;
- if (!strcmp(name, "EnumerateDeviceLayerProperties")) return (PFN_vkVoidFunction)EnumerateDeviceLayerProperties;
- if (!strcmp(name, "EnumerateDeviceExtensionProperties")) return (PFN_vkVoidFunction)EnumerateDeviceExtensionProperties;
- if (!strcmp(name, "CreateDevice")) return (PFN_vkVoidFunction)CreateDevice;
- if (!strcmp(name, "GetInstanceProcAddr")) return (PFN_vkVoidFunction)GetInstanceProcAddr;
- if (!strcmp(name, "GetPhysicalDeviceProcAddr")) return (PFN_vkVoidFunction)GetPhysicalDeviceProcAddr;
-
- return NULL;
-}
-
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *funcName) {
- PFN_vkVoidFunction addr;
- layer_data *dev_data;
-
- assert(device);
-
- addr = layer_intercept_proc(funcName);
- if (addr) return addr;
-
- dev_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
- VkLayerDispatchTable *pTable = dev_data->device_dispatch_table;
+ const auto item = name_to_funcptr_map.find(funcName);
+ if (item != name_to_funcptr_map.end()) {
+ return reinterpret_cast<PFN_vkVoidFunction>(item->second);
+ }
- if (pTable->GetDeviceProcAddr == NULL) return NULL;
- return pTable->GetDeviceProcAddr(device, funcName);
+ layer_data *device_data = GetLayerDataPtr(get_dispatch_key(device), layer_data_map);
+ auto &table = device_data->device_dispatch_table;
+ if (!table->GetDeviceProcAddr) return nullptr;
+ return table->GetDeviceProcAddr(device, funcName);
}
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *funcName) {
- PFN_vkVoidFunction addr;
- layer_data *my_data;
-
- addr = layer_intercept_instance_proc(funcName);
- if (!addr) addr = layer_intercept_proc(funcName);
- if (addr) {
- return addr;
+ const auto item = name_to_funcptr_map.find(funcName);
+ if (item != name_to_funcptr_map.end()) {
+ return reinterpret_cast<PFN_vkVoidFunction>(item->second);
}
- assert(instance);
-
- my_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
- addr = debug_report_get_instance_proc_addr(my_data->report_data, funcName);
- if (addr) {
- return addr;
- }
-
- VkLayerInstanceDispatchTable *pTable = my_data->instance_dispatch_table;
- if (pTable->GetInstanceProcAddr == NULL) {
- return NULL;
- }
- return pTable->GetInstanceProcAddr(instance, funcName);
+ auto instance_data = GetLayerDataPtr(get_dispatch_key(instance), layer_data_map);
+ auto &table = instance_data->instance_dispatch_table;
+ if (!table->GetInstanceProcAddr) return nullptr;
+ return table->GetInstanceProcAddr(instance, funcName);
}
VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetPhysicalDeviceProcAddr(VkInstance instance, const char *funcName) {