diff options
| author | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-06-08 14:58:39 -0600 |
|---|---|---|
| committer | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-06-18 10:18:20 -0600 |
| commit | 330730656fa94b09baf008d1ca712534f3512fc1 (patch) | |
| tree | 49e60cfcbd4664d5d2b3275630ad479ca98be372 | |
| parent | 1f7e1b54bfb089677646ce22c9a9ec0b15450a04 (diff) | |
| download | usermoji-330730656fa94b09baf008d1ca712534f3512fc1.tar.xz | |
layers: Initialize debug_report instance proc table
| -rw-r--r-- | layers/draw_state.cpp | 5 | ||||
| -rw-r--r-- | layers/layers_msg.h | 9 | ||||
| -rw-r--r-- | layers/mem_tracker.cpp | 8 | ||||
| -rw-r--r-- | layers/param_checker.cpp | 6 | ||||
| -rw-r--r-- | layers/shader_checker.cpp | 5 | ||||
| -rwxr-xr-x | vk-layer-generate.py | 35 |
6 files changed, 62 insertions, 6 deletions
diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index 4b76f05e..33712714 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -1536,6 +1536,11 @@ VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(const VkInstanceCreateInfo* pCre if (result == VK_SUCCESS) { enable_debug_report(pCreateInfo->extensionCount, pCreateInfo->pEnabledExtensions); + + debug_report_init_instance_extension_dispatch_table( + pTable, + pTable->GetInstanceProcAddr, + *pInstance); } return result; } diff --git a/layers/layers_msg.h b/layers/layers_msg.h index a5e90de3..f73e4d3d 100644 --- a/layers/layers_msg.h +++ b/layers/layers_msg.h @@ -96,6 +96,15 @@ static VkResult layer_destroy_msg_callback( return result; } +static inline void debug_report_init_instance_extension_dispatch_table( + VkLayerInstanceDispatchTable *table, + PFN_vkGetInstanceProcAddr gpa, + VkInstance inst) +{ + table->DbgCreateMsgCallback = (PFN_vkDbgCreateMsgCallback) gpa(inst, "vkDbgCreateMsgCallback"); + table->DbgDestroyMsgCallback = (PFN_vkDbgDestroyMsgCallback) gpa(inst, "vkDbgDestroyMsgCallback"); +} + static void* msg_callback_get_proc_addr( const char *funcName) { diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index b6a839d3..9e51e889 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -869,10 +869,16 @@ VkResult VKAPI vkCreateInstance( { loader_platform_thread_once(&g_initOnce, initMemTracker); - VkResult result = instance_dispatch_table(*pInstance)->CreateInstance(pCreateInfo, pInstance); + VkLayerInstanceDispatchTable *pTable = instance_dispatch_table(*pInstance); + VkResult result = pTable->CreateInstance(pCreateInfo, pInstance); if (result == VK_SUCCESS) { enable_debug_report(pCreateInfo->extensionCount, pCreateInfo->pEnabledExtensions); + + debug_report_init_instance_extension_dispatch_table( + pTable, + pTable->GetInstanceProcAddr, + *pInstance); } return result; } diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index 79903f3f..15056f5a 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -189,6 +189,12 @@ void PostCreateInstance(VkResult result, const VkInstanceCreateInfo *pCreateInfo layerCbMsg(VK_DBG_REPORT_INFO_BIT, (VkObjectType) 0, NULL, 0, 1, "PARAMCHECK", str); return; } + + VkLayerInstanceDispatchTable *pTable = instance_dispatch_table(*pInstance); + debug_report_init_instance_extension_dispatch_table( + pTable, + pTable->GetInstanceProcAddr, + *pInstance); } VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance) diff --git a/layers/shader_checker.cpp b/layers/shader_checker.cpp index 20f1aae4..d31d7f65 100644 --- a/layers/shader_checker.cpp +++ b/layers/shader_checker.cpp @@ -955,6 +955,11 @@ VkResult VKAPI vkCreateInstance( if (result == VK_SUCCESS) { enable_debug_report(pCreateInfo->extensionCount, pCreateInfo->pEnabledExtensions); + + debug_report_init_instance_extension_dispatch_table( + pTable, + pTable->GetInstanceProcAddr, + *pInstance); } return result; } diff --git a/vk-layer-generate.py b/vk-layer-generate.py index c4a529d3..57584c74 100755 --- a/vk-layer-generate.py +++ b/vk-layer-generate.py @@ -1378,12 +1378,19 @@ class ObjectTrackerSubcommand(Subcommand): create_line += ' loader_platform_thread_unlock_mutex(&objLock);\n' elif 'Create' in proto.name or 'Alloc' in proto.name: create_line = ' loader_platform_thread_lock_mutex(&objLock);\n' - create_line += ' create_obj(*%s, %s);\n' % (proto.params[-1].name, obj_type_mapping[proto.params[-1].ty.strip('*').replace('const ', '')]) - create_line += ' loader_platform_thread_unlock_mutex(&objLock);\n' + create_line += ' if (result == VK_SUCCESS) {\n' if 'CreateDevice' in proto.name: - create_line += ' if (result == VK_SUCCESS) {\n' - create_line += ' enable_debug_report(pCreateInfo->extensionCount, pCreateInfo->pEnabledExtensions);\n' - create_line += ' }\n' + create_line += ' enable_debug_report(pCreateInfo->extensionCount, pCreateInfo->pEnabledExtensions);\n' + elif 'CreateInstance' in proto.name: + create_line += ' enable_debug_report(pCreateInfo->extensionCount, pCreateInfo->pEnabledExtensions);\n' + create_line += ' VkLayerInstanceDispatchTable *pTable = instance_dispatch_table(*pInstance);\n' + create_line += ' debug_report_init_instance_extension_dispatch_table(\n' + create_line += ' pTable,\n' + create_line += ' pTable->GetInstanceProcAddr,\n' + create_line += ' *pInstance);\n' + create_line += ' create_obj(*%s, %s);\n' % (proto.params[-1].name, obj_type_mapping[proto.params[-1].ty.strip('*').replace('const ', '')]) + create_line += ' }\n' + create_line += ' loader_platform_thread_unlock_mutex(&objLock);\n' if 'GetDeviceQueue' in proto.name: destroy_line = ' loader_platform_thread_lock_mutex(&objLock);\n' @@ -1664,6 +1671,24 @@ class ThreadingSubcommand(Subcommand): ' return result;\n' '}\n' % (qual, decl, ret_val, table, proto.params[0].name, proto.c_call())) return "\n".join(funcs); + elif proto.name == "CreateInstance": + funcs.append('%s%s\n' + '{\n' + ' loader_platform_thread_once(&initOnce, initThreading);\n' + '\n' + ' %s %s_dispatch_table(*pInstance)->CreateInstance(pCreateInfo, pInstance);\n' + '\n' + ' if (result == VK_SUCCESS) {\n' + ' enable_debug_report(pCreateInfo->extensionCount, pCreateInfo->pEnabledExtensions);\n' + ' VkLayerInstanceDispatchTable *pTable = instance_dispatch_table(*pInstance);\n' + ' debug_report_init_instance_extension_dispatch_table(\n' + ' pTable,\n' + ' pTable->GetInstanceProcAddr,\n' + ' *pInstance);\n' + ' }\n' + ' return result;\n' + '}\n' % (qual, decl, ret_val, table)) + return "\n".join(funcs); if len(checked_params) == 0: return None # Surround call with useObject and finishUsingObject for each checked_param |
