diff options
Diffstat (limited to 'layers/basic.cpp')
| -rw-r--r-- | layers/basic.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
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<void *, VkLayerDispatchTable *> tableMap; +static std::unordered_map<void *, VkLayerInstanceDispatchTable *> tableInstanceMap; + +static VkLayerInstanceDispatchTable * initLayerInstanceTable(const VkBaseLayerObject *instancew) +{ + VkLayerInstanceDispatchTable *pTable; + + assert(instancew); + std::unordered_map<void *, VkLayerInstanceDispatchTable *>::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; |
