diff options
| author | Jon Ashburn <jon@lunarg.com> | 2015-06-18 15:02:58 -0600 |
|---|---|---|
| committer | Jon Ashburn <jon@lunarg.com> | 2015-06-18 15:55:30 -0600 |
| commit | da2f7f2d403eed46e9a125830d8c59bc292fbd2e (patch) | |
| tree | a9d6c623f841ce44f70a0edda5b777b07b0c0ba0 /layers | |
| parent | b1f38a308b4a71dbea6292bf8803539ab68fe0bf (diff) | |
| download | usermoji-da2f7f2d403eed46e9a125830d8c59bc292fbd2e.tar.xz | |
layers: Make WSI_LUNARG a device extension and check if enabled before use
Return NULL GetProcAddr if not enabled. Also fix DEBUG_MARKER bugs
in DrawState and ParamChecker
Also advertise WSI_LUNARG as a device extension in layers where it is used.
Diffstat (limited to 'layers')
| -rw-r--r-- | layers/draw_state.cpp | 22 | ||||
| -rw-r--r-- | layers/mem_tracker.cpp | 43 | ||||
| -rw-r--r-- | layers/param_checker.cpp | 58 |
3 files changed, 80 insertions, 43 deletions
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index 6d2a74b9..3348fadb 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -1550,7 +1550,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(VkInstance instance) static void createDeviceRegisterExtensions(const VkDeviceCreateInfo* pCreateInfo, VkDevice device) { uint32_t i, ext_idx; - VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) device; + VkLayerDispatchTable *pDisp = get_dispatch_table(draw_state_device_table_map, device); deviceExtMap[pDisp].debug_marker_enabled = false; for (i = 0; i < pCreateInfo->extensionCount; i++) { @@ -1572,6 +1572,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(VkPhysicalDevice gpu, const VkDevi VkLayerDispatchTable *pTable = get_dispatch_table(draw_state_device_table_map, *pDevice); layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map); my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice); + createDeviceRegisterExtensions(pCreateInfo, *pDevice); } return result; } @@ -1590,11 +1591,11 @@ VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device) deleteLayouts(); loader_platform_thread_unlock_mutex(&globalLock); - VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) device; - VkResult result = get_dispatch_table(draw_state_device_table_map, device)->DestroyDevice(device); + VkLayerDispatchTable *pDisp = get_dispatch_table(draw_state_device_table_map, device); + VkResult result = pDisp->DestroyDevice(device); + deviceExtMap.erase(pDisp); draw_state_device_table_map.erase(pDisp); tableDebugMarkerMap.erase(pDisp); - deviceExtMap.erase(pDisp); return result; } @@ -2816,20 +2817,19 @@ VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice dev, const char* funcNa if (!strcmp("drawStateDumpPngFile", funcName)) return (void*) drawStateDumpPngFile; - VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) dev; - if (!deviceExtMap[pDisp].debug_marker_enabled) + VkLayerDispatchTable* pTable = get_dispatch_table(draw_state_device_table_map, dev); + if (deviceExtMap.size() == 0 || deviceExtMap[pTable].debug_marker_enabled) { - if (!strcmp(funcName, "CmdDbgMarkerBegin")) + if (!strcmp(funcName, "vkCmdDbgMarkerBegin")) return (void*) vkCmdDbgMarkerBegin; - if (!strcmp(funcName, "CmdDbgMarkerEnd")) + if (!strcmp(funcName, "vkCmdDbgMarkerEnd")) return (void*) vkCmdDbgMarkerEnd; - if (!strcmp(funcName, "DbgSetObjectTag")) + if (!strcmp(funcName, "vkDbgSetObjectTag")) return (void*) vkDbgSetObjectTag; - if (!strcmp(funcName, "DbgSetObjectName")) + if (!strcmp(funcName, "vkDbgSetObjectName")) return (void*) vkDbgSetObjectName; } { - VkLayerDispatchTable* pTable = get_dispatch_table(draw_state_device_table_map, dev); if (pTable->GetDeviceProcAddr == NULL) return NULL; return pTable->GetDeviceProcAddr(dev, funcName); diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index 25cc9ede..d370e9e5 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -51,6 +51,10 @@ typedef struct _layer_data { VkDbgMsgCallback logging_callback; } layer_data; +struct devExts { + bool wsi_lunarg_enabled; +}; +static std::unordered_map<void *, struct devExts> deviceExtMap; static std::unordered_map<void *, layer_data *> layer_data_map; static device_table_map mem_tracker_device_table_map; static instance_table_map mem_tracker_instance_table_map; @@ -869,6 +873,18 @@ VkResult VKAPI vkCreateInstance( return result; } +static void createDeviceRegisterExtensions(const VkDeviceCreateInfo* pCreateInfo, VkDevice device) +{ + uint32_t i, ext_idx; + VkLayerDispatchTable *pDisp = get_dispatch_table(mem_tracker_device_table_map, device); + deviceExtMap[pDisp].wsi_lunarg_enabled = false; + for (i = 0; i < pCreateInfo->extensionCount; i++) { + if (strcmp(pCreateInfo->pEnabledExtensions[i].name, VK_WSI_LUNARG_EXTENSION_NAME) == 0) + deviceExtMap[pDisp].wsi_lunarg_enabled = true; + + } +} + VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice( VkPhysicalDevice gpu, const VkDeviceCreateInfo *pCreateInfo, @@ -881,6 +897,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice( VkLayerDispatchTable *pTable = get_dispatch_table(mem_tracker_device_table_map, *pDevice); layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map); my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice); + createDeviceRegisterExtensions(pCreateInfo, *pDevice); } return result; } @@ -923,9 +940,12 @@ VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice( #if DISPATCH_MAP_DEBUG fprintf(stderr, "Device: %p, key: %p\n", device, key); #endif - VkResult result = get_dispatch_table(mem_tracker_device_table_map, device)->DestroyDevice(device); + VkLayerDispatchTable *pDisp = get_dispatch_table(mem_tracker_device_table_map, device); + VkResult result = pDisp->DestroyDevice(device); + deviceExtMap.erase(pDisp); mem_tracker_device_table_map.erase(key); assert(mem_tracker_device_table_map.size() == 0 && "Should not have any instance mappings hanging around"); + return result; } @@ -2303,17 +2323,22 @@ VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr( return (void*) vkCmdResetQueryPool; if (!strcmp(funcName, "vkGetDeviceQueue")) return (void*) vkGetDeviceQueue; - if (!strcmp(funcName, "vkCreateSwapChainWSI")) - return (void*) vkCreateSwapChainWSI; - if (!strcmp(funcName, "vkDestroySwapChainWSI")) - return (void*) vkDestroySwapChainWSI; - if (!strcmp(funcName, "vkGetSwapChainInfoWSI")) - return (void*) vkGetSwapChainInfoWSI; + + VkLayerDispatchTable *pDisp = get_dispatch_table(mem_tracker_device_table_map, dev); + if (deviceExtMap.size() == 0 || deviceExtMap[pDisp].wsi_lunarg_enabled) + { + if (!strcmp(funcName, "vkCreateSwapChainWSI")) + return (void*) vkCreateSwapChainWSI; + if (!strcmp(funcName, "vkDestroySwapChainWSI")) + return (void*) vkDestroySwapChainWSI; + if (!strcmp(funcName, "vkGetSwapChainInfoWSI")) + return (void*) vkGetSwapChainInfoWSI; + } { - if (get_dispatch_table(mem_tracker_device_table_map, dev)->GetDeviceProcAddr == NULL) + if (pDisp->GetDeviceProcAddr == NULL) return NULL; - return get_dispatch_table(mem_tracker_device_table_map, dev)->GetDeviceProcAddr(dev, funcName); + return pDisp->GetDeviceProcAddr(dev, funcName); } } diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index 670b31f1..a64435f3 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -47,6 +47,7 @@ static LOADER_PLATFORM_THREAD_ONCE_DECLARATION(initOnce); struct devExts { bool debug_marker_enabled; + bool wsi_lunarg_enabled; }; static std::unordered_map<void *, struct devExts> deviceExtMap; @@ -222,16 +223,19 @@ void PreCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo static void createDeviceRegisterExtensions(const VkDeviceCreateInfo* pCreateInfo, VkDevice device) { uint32_t i, ext_idx; - VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) device; + VkLayerDispatchTable *pDisp = device_dispatch_table(device); deviceExtMap[pDisp].debug_marker_enabled = false; + deviceExtMap[pDisp].wsi_lunarg_enabled = false; for (i = 0; i < pCreateInfo->extensionCount; i++) { if (strcmp(pCreateInfo->pEnabledExtensions[i].name, DEBUG_MARKER_EXTENSION_NAME) == 0) { /* Found a matching extension name, mark it enabled and init dispatch table*/ initDebugMarkerTable(device); deviceExtMap[pDisp].debug_marker_enabled = true; - } + } + if (strcmp(pCreateInfo->pEnabledExtensions[i].name, VK_WSI_LUNARG_EXTENSION_NAME) == 0) + deviceExtMap[pDisp].wsi_lunarg_enabled = true; } } @@ -266,12 +270,12 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(VkPhysicalDevice gpu, const VkDevi VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device) { - VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) device; + VkLayerDispatchTable *pDisp = device_dispatch_table(device); dispatch_key key = get_dispatch_key(device); - VkResult result = device_dispatch_table(device)->DestroyDevice(device); + VkResult result = pDisp->DestroyDevice(device); + deviceExtMap.erase(pDisp); destroy_device_dispatch_table(key); tableDebugMarkerMap.erase(pDisp); - deviceExtMap.erase(pDisp); return result; } @@ -326,7 +330,7 @@ VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionInfo( return VK_SUCCESS; } -#define PARAM_CHECKER_LAYER_DEV_EXT_ARRAY_SIZE 3 +#define PARAM_CHECKER_LAYER_DEV_EXT_ARRAY_SIZE 4 static const VkExtensionProperties pcDevExts[PARAM_CHECKER_LAYER_DEV_EXT_ARRAY_SIZE] = { { VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES, @@ -345,6 +349,12 @@ static const VkExtensionProperties pcDevExts[PARAM_CHECKER_LAYER_DEV_EXT_ARRAY_S DEBUG_MARKER_EXTENSION_NAME, 0x10, "Sample layer: ParamChecker", + }, + { + VK_STRUCTURE_TYPE_EXTENSION_PROPERTIES, + VK_WSI_LUNARG_EXTENSION_NAME, + 0x10, + "Sample layer: ParamChecker", } }; VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionInfo( @@ -2145,14 +2155,6 @@ static inline void* layer_intercept_proc(const char *name) return (void*) vkCmdBeginRenderPass; if (!strcmp(name, "CmdEndRenderPass")) return (void*) vkCmdEndRenderPass; - if (!strcmp(name, "CreateSwapChainWSI")) - return (void*) vkCreateSwapChainWSI; - if (!strcmp(name, "DestroySwapChainWSI")) - return (void*) vkDestroySwapChainWSI; - if (!strcmp(name, "GetSwapChainInfoWSI")) - return (void*) vkGetSwapChainInfoWSI; - if (!strcmp(name, "QueuePresentWSI")) - return (void*) vkQueuePresentWSI; return NULL; } @@ -2201,23 +2203,33 @@ VK_LAYER_EXPORT void* VKAPI vkGetDeviceProcAddr(VkDevice device, const char* fun return addr; } - VkLayerDispatchTable *pDisp = *(VkLayerDispatchTable **) device; - if (!deviceExtMap[pDisp].debug_marker_enabled) + VkLayerDispatchTable *pDisp = device_dispatch_table(device); + if (deviceExtMap.size() == 0 || deviceExtMap[pDisp].wsi_lunarg_enabled) + { + if (!strcmp(funcName, "vkCreateSwapChainWSI")) + return (void*) vkCreateSwapChainWSI; + if (!strcmp(funcName, "vkDestroySwapChainWSI")) + return (void*) vkDestroySwapChainWSI; + if (!strcmp(funcName, "vkGetSwapChainInfoWSI")) + return (void*) vkGetSwapChainInfoWSI; + if (!strcmp(funcName, "vkQueuePresentWSI")) + return (void*) vkQueuePresentWSI; + } + if (deviceExtMap.size() == 0 || deviceExtMap[pDisp].debug_marker_enabled) { - if (!strcmp(funcName, "CmdDbgMarkerBegin")) + if (!strcmp(funcName, "vkCmdDbgMarkerBegin")) return (void*) vkCmdDbgMarkerBegin; - if (!strcmp(funcName, "CmdDbgMarkerEnd")) + if (!strcmp(funcName, "vkCmdDbgMarkerEnd")) return (void*) vkCmdDbgMarkerEnd; - if (!strcmp(funcName, "DbgSetObjectTag")) + if (!strcmp(funcName, "vkDbgSetObjectTag")) return (void*) vkDbgSetObjectTag; - if (!strcmp(funcName, "DbgSetObjectName")) + if (!strcmp(funcName, "vkDbgSetObjectName")) return (void*) vkDbgSetObjectName; } { - VkLayerDispatchTable* pTable = device_dispatch_table(device); - if (pTable->GetDeviceProcAddr == NULL) + if (pDisp->GetDeviceProcAddr == NULL) return NULL; - return pTable->GetDeviceProcAddr(device, funcName); + return pDisp->GetDeviceProcAddr(device, funcName); } } |
