From 1818420a8e9033de320b0aac091c90f884c05924 Mon Sep 17 00:00:00 2001 From: Jon Ashburn Date: Thu, 7 May 2015 10:27:37 -0600 Subject: layers: Add initialization of instance dispatch table Make the layer init separate from either device or instance dispatch table init, since these are done at different times. --- layers/basic.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'layers/basic.cpp') diff --git a/layers/basic.cpp b/layers/basic.cpp index e889e31d..9f43c6d7 100644 --- a/layers/basic.cpp +++ b/layers/basic.cpp @@ -33,6 +33,27 @@ #include "loader_platform.h" static std::unordered_map tableMap; +static std::unordered_map tableInstanceMap; + +static VkLayerInstanceDispatchTable * initLayerInstanceTable(const VkBaseLayerObject *instancew) +{ + VkLayerInstanceDispatchTable *pTable; + + assert(instancew); + std::unordered_map::const_iterator it = tableInstanceMap.find((void *) instancew->baseObject); + if (it == tableInstanceMap.end()) + { + pTable = new VkLayerInstanceDispatchTable; + tableInstanceMap[(void *) instancew->baseObject] = pTable; + } else + { + return it->second; + } + + layer_init_instance_dispatch_table(pTable, (PFN_vkGetInstanceProcAddr) instancew->pGPA, (VkInstance) instancew->nextObject); + + return pTable; +} static VkLayerDispatchTable * initLayerTable(const VkBaseLayerObject *gpuw) { @@ -198,7 +219,7 @@ VK_LAYER_EXPORT void * VKAPI vkGetInstanceProcAddr(VkInstance instance, const ch if (instance == NULL) return NULL; - // TODO initInstanceLayerTable((const VkBaseLayerObject *) instance); + initLayerInstanceTable((const VkBaseLayerObject *) instance); if (!strcmp("vkGetInstanceProcAddr", pName)) return (void *) vkGetInstanceProcAddr; -- cgit v1.2.3