aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Ashburn <jon@lunarg.com>2015-05-15 17:15:39 -0600
committerCourtney Goeltzenleuchter <courtney@LunarG.com>2015-06-17 19:47:02 -0600
commit30092d4531df53020bdda34b9c4ee358b443db0c (patch)
treefa79a034461cac4e45c246f5a6f7c69c4ee28eae
parentd6527a39704e346adf09a3d4645206e4d1daf024 (diff)
downloadusermoji-30092d4531df53020bdda34b9c4ee358b443db0c.tar.xz
glave: Remove glave source files from this repo
-rw-r--r--layers/glave_snapshot.c1902
-rw-r--r--layers/glave_snapshot.h316
2 files changed, 0 insertions, 2218 deletions
diff --git a/layers/glave_snapshot.c b/layers/glave_snapshot.c
deleted file mode 100644
index 358fb991..00000000
--- a/layers/glave_snapshot.c
+++ /dev/null
@@ -1,1902 +0,0 @@
-/*
- * GLAVE & vulkan
- *
- * Copyright (C) 2015 LunarG, Inc. and Valve Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "loader_platform.h"
-#include "glave_snapshot.h"
-#include "vk_struct_string_helper.h"
-
-#define LAYER_NAME_STR "GlaveSnapshot"
-#define LAYER_ABBREV_STR "GLVSnap"
-
-static VkLayerDispatchTable nextTable;
-static VkBaseLayerObject *pCurObj;
-
-// The following is #included again to catch certain OS-specific functions being used:
-#include "loader_platform.h"
-#include "layers_config.h"
-#include "layers_msg.h"
-
-static LOADER_PLATFORM_THREAD_ONCE_DECLARATION(tabOnce);
-static int objLockInitialized = 0;
-static loader_platform_thread_mutex objLock;
-
-// The 'masterSnapshot' which gets the delta merged into it when 'GetSnapshot()' is called.
-static GLV_VK_SNAPSHOT s_snapshot = {0};
-
-// The 'deltaSnapshot' which tracks all object creation and deletion.
-static GLV_VK_SNAPSHOT s_delta = {0};
-
-
-//=============================================================================
-// Helper structure for a GLAVE vulkan snapshot.
-// These can probably be auto-generated at some point.
-//=============================================================================
-
-void glv_vk_malloc_and_copy(void** ppDest, size_t size, const void* pSrc)
-{
- *ppDest = malloc(size);
- memcpy(*ppDest, pSrc, size);
-}
-
-VkDeviceCreateInfo* glv_deepcopy_VkDeviceCreateInfo(const VkDeviceCreateInfo* pSrcCreateInfo)
-{
- VkDeviceCreateInfo* pDestCreateInfo;
-
- // NOTE: partially duplicated code from add_VkDeviceCreateInfo_to_packet(...)
- {
- uint32_t i;
- glv_vk_malloc_and_copy((void**)&pDestCreateInfo, sizeof(VkDeviceCreateInfo), pSrcCreateInfo);
- glv_vk_malloc_and_copy((void**)&pDestCreateInfo->pRequestedQueues, pSrcCreateInfo->queueRecordCount*sizeof(VkDeviceQueueCreateInfo), pSrcCreateInfo->pRequestedQueues);
-
- if (pSrcCreateInfo->extensionCount > 0)
- {
- glv_vk_malloc_and_copy((void**)&pDestCreateInfo->ppEnabledExtensionNames, pSrcCreateInfo->extensionCount * sizeof(char *), pSrcCreateInfo->ppEnabledExtensionNames);
- for (i = 0; i < pSrcCreateInfo->extensionCount; i++)
- {
- glv_vk_malloc_and_copy((void**)&pDestCreateInfo->ppEnabledExtensionNames[i], strlen(pSrcCreateInfo->ppEnabledExtensionNames[i]) + 1, pSrcCreateInfo->ppEnabledExtensionNames[i]);
- }
- }
- VkLayerCreateInfo *pSrcNext = ( VkLayerCreateInfo *) pSrcCreateInfo->pNext;
- VkLayerCreateInfo **ppDstNext = ( VkLayerCreateInfo **) &pDestCreateInfo->pNext;
- while (pSrcNext != NULL)
- {
- if ((pSrcNext->sType == VK_STRUCTURE_TYPE_LAYER_CREATE_INFO) && pSrcNext->layerCount > 0)
- {
- glv_vk_malloc_and_copy((void**)ppDstNext, sizeof(VkLayerCreateInfo), pSrcNext);
- glv_vk_malloc_and_copy((void**)&(*ppDstNext)->ppActiveLayerNames, pSrcNext->layerCount * sizeof(char*), pSrcNext->ppActiveLayerNames);
- for (i = 0; i < pSrcNext->layerCount; i++)
- {
- glv_vk_malloc_and_copy((void**)&(*ppDstNext)->ppActiveLayerNames[i], strlen(pSrcNext->ppActiveLayerNames[i]) + 1, pSrcNext->ppActiveLayerNames[i]);
- }
-
- ppDstNext = (VkLayerCreateInfo**) &(*ppDstNext)->pNext;
- }
- pSrcNext = (VkLayerCreateInfo*) pSrcNext->pNext;
- }
- }
-
- return pDestCreateInfo;
-}
-
-void glv_deepfree_VkDeviceCreateInfo(VkDeviceCreateInfo* pCreateInfo)
-{
- uint32_t i;
- if (pCreateInfo->pRequestedQueues != NULL)
- {
- free((void*)pCreateInfo->pRequestedQueues);
- }
-
- if (pCreateInfo->ppEnabledExtensionNames != NULL)
- {
- for (i = 0; i < pCreateInfo->extensionCount; i++)
- {
- free((void*)pCreateInfo->ppEnabledExtensionNames[i]);
- }
- free((void*)pCreateInfo->ppEnabledExtensionNames);
- }
-
- VkLayerCreateInfo *pSrcNext = (VkLayerCreateInfo*)pCreateInfo->pNext;
- while (pSrcNext != NULL)
- {
- VkLayerCreateInfo* pTmp = (VkLayerCreateInfo*)pSrcNext->pNext;
- if ((pSrcNext->sType == VK_STRUCTURE_TYPE_LAYER_CREATE_INFO) && pSrcNext->layerCount > 0)
- {
- for (i = 0; i < pSrcNext->layerCount; i++)
- {
- free((void*)pSrcNext->ppActiveLayerNames[i]);
- }
-
- free((void*)pSrcNext->ppActiveLayerNames);
- free(pSrcNext);
- }
- pSrcNext = pTmp;
- }
-
- free(pCreateInfo);
-}
-
-void glv_vk_snapshot_copy_createdevice_params(GLV_VK_SNAPSHOT_CREATEDEVICE_PARAMS* pDest, VkPhysicalGpu gpu, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice)
-{
- pDest->gpu = gpu;
-
- pDest->pCreateInfo = glv_deepcopy_VkDeviceCreateInfo(pCreateInfo);
-
- pDest->pDevice = (VkDevice*)malloc(sizeof(VkDevice));
- *pDest->pDevice = *pDevice;
-}
-
-void glv_vk_snapshot_destroy_createdevice_params(GLV_VK_SNAPSHOT_CREATEDEVICE_PARAMS* pSrc)
-{
- memset(&pSrc->gpu, 0, sizeof(VkPhysicalGpu));
-
- glv_deepfree_VkDeviceCreateInfo(pSrc->pCreateInfo);
- pSrc->pCreateInfo = NULL;
-
- free(pSrc->pDevice);
- pSrc->pDevice = NULL;
-}
-
-
-
-// add a new node to the global and object lists, then return it so the caller can populate the object information.
-static GLV_VK_SNAPSHOT_LL_NODE* snapshot_insert_object(GLV_VK_SNAPSHOT* pSnapshot, void* pObject, VK_OBJECT_TYPE type)
-{
- // Create a new node
- GLV_VK_SNAPSHOT_LL_NODE* pNewObjNode = (GLV_VK_SNAPSHOT_LL_NODE*)malloc(sizeof(GLV_VK_SNAPSHOT_LL_NODE));
- memset(pNewObjNode, 0, sizeof(GLV_VK_SNAPSHOT_LL_NODE));
- pNewObjNode->obj.pVkObject = pObject;
- pNewObjNode->obj.objType = type;
- pNewObjNode->obj.status = OBJSTATUS_NONE;
-
- // insert at front of global list
- pNewObjNode->pNextGlobal = pSnapshot->pGlobalObjs;
- pSnapshot->pGlobalObjs = pNewObjNode;
-
- // insert at front of object list
- pNewObjNode->pNextObj = pSnapshot->pObjectHead[type];
- pSnapshot->pObjectHead[type] = pNewObjNode;
-
- // increment count
- pSnapshot->globalObjCount++;
- pSnapshot->numObjs[type]++;
-
- return pNewObjNode;
-}
-
-// This is just a helper function to snapshot_remove_object(..). It is not intended for this to be called directly.
-static void snapshot_remove_obj_type(GLV_VK_SNAPSHOT* pSnapshot, void* pObj, VK_OBJECT_TYPE objType) {
- GLV_VK_SNAPSHOT_LL_NODE *pTrav = pSnapshot->pObjectHead[objType];
- GLV_VK_SNAPSHOT_LL_NODE *pPrev = pSnapshot->pObjectHead[objType];
- while (pTrav) {
- if (pTrav->obj.pVkObject == pObj) {
- pPrev->pNextObj = pTrav->pNextObj;
- // update HEAD of Obj list as needed
- if (pSnapshot->pObjectHead[objType] == pTrav)
- {
- pSnapshot->pObjectHead[objType] = pTrav->pNextObj;
- }
- assert(pSnapshot->numObjs[objType] > 0);
- pSnapshot->numObjs[objType]--;
- return;
- }
- pPrev = pTrav;
- pTrav = pTrav->pNextObj;
- }
- char str[1024];
- sprintf(str, "OBJ INTERNAL ERROR : Obj %p was in global list but not in %s list", pObj, string_VK_OBJECT_TYPE(objType));
- layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, pObj, 0, GLVSNAPSHOT_INTERNAL_ERROR, LAYER_ABBREV_STR, str);
-}
-
-// Search global list to find object,
-// if found:
-// remove object from obj_type list using snapshot_remove_obj_type()
-// remove object from global list,
-// return object.
-// else:
-// Report message that we didn't see it get created,
-// return NULL.
-static GLV_VK_SNAPSHOT_LL_NODE* snapshot_remove_object(GLV_VK_SNAPSHOT* pSnapshot, void* pObject)
-{
- GLV_VK_SNAPSHOT_LL_NODE *pTrav = pSnapshot->pGlobalObjs;
- GLV_VK_SNAPSHOT_LL_NODE *pPrev = pSnapshot->pGlobalObjs;
- while (pTrav)
- {
- if (pTrav->obj.pVkObject == pObject)
- {
- snapshot_remove_obj_type(pSnapshot, pObject, pTrav->obj.objType);
- pPrev->pNextGlobal = pTrav->pNextGlobal;
- // update HEAD of global list if needed
- if (pSnapshot->pGlobalObjs == pTrav)
- {
- pSnapshot->pGlobalObjs = pTrav->pNextGlobal;
- }
- assert(pSnapshot->globalObjCount > 0);
- pSnapshot->globalObjCount--;
- return pTrav;
- }
- pPrev = pTrav;
- pTrav = pTrav->pNextGlobal;
- }
-
- // Object not found.
- char str[1024];
- sprintf(str, "Object %p was not found in the created object list. It should be added as a deleted object.", pObject);
- layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, pObject, 0, GLVSNAPSHOT_UNKNOWN_OBJECT, LAYER_ABBREV_STR, str);
- return NULL;
-}
-
-// Add a new deleted object node to the list
-static void snapshot_insert_deleted_object(GLV_VK_SNAPSHOT* pSnapshot, void* pObject, VK_OBJECT_TYPE type)
-{
- // Create a new node
- GLV_VK_SNAPSHOT_DELETED_OBJ_NODE* pNewObjNode = (GLV_VK_SNAPSHOT_DELETED_OBJ_NODE*)malloc(sizeof(GLV_VK_SNAPSHOT_DELETED_OBJ_NODE));
- memset(pNewObjNode, 0, sizeof(GLV_VK_SNAPSHOT_DELETED_OBJ_NODE));
- pNewObjNode->objType = type;
- pNewObjNode->pVkObject = pObject;
-
- // insert at front of list
- pNewObjNode->pNextObj = pSnapshot->pDeltaDeletedObjects;
- pSnapshot->pDeltaDeletedObjects = pNewObjNode;
-
- // increment count
- pSnapshot->deltaDeletedObjectCount++;
-}
-
-// Note: the parameters after pSnapshot match the order of vkCreateDevice(..)
-static void snapshot_insert_device(GLV_VK_SNAPSHOT* pSnapshot, VkPhysicalGpu gpu, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice)
-{
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(pSnapshot, *pDevice, VK_OBJECT_TYPE_DEVICE);
- pNode->obj.pStruct = malloc(sizeof(GLV_VK_SNAPSHOT_DEVICE_NODE));
-
- GLV_VK_SNAPSHOT_DEVICE_NODE* pDevNode = (GLV_VK_SNAPSHOT_DEVICE_NODE*)pNode->obj.pStruct;
- glv_vk_snapshot_copy_createdevice_params(&pDevNode->params, gpu, pCreateInfo, pDevice);
-
- // insert at front of device list
- pNode->pNextObj = pSnapshot->pDevices;
- pSnapshot->pDevices = pNode;
-
- // increment count
- pSnapshot->deviceCount++;
-}
-
-static void snapshot_remove_device(GLV_VK_SNAPSHOT* pSnapshot, VkDevice device)
-{
- GLV_VK_SNAPSHOT_LL_NODE* pFoundObject = snapshot_remove_object(pSnapshot, device);
-
- if (pFoundObject != NULL)
- {
- GLV_VK_SNAPSHOT_LL_NODE *pTrav = pSnapshot->pDevices;
- GLV_VK_SNAPSHOT_LL_NODE *pPrev = pSnapshot->pDevices;
- while (pTrav != NULL)
- {
- if (pTrav->obj.pVkObject == device)
- {
- pPrev->pNextObj = pTrav->pNextObj;
- // update HEAD of Obj list as needed
- if (pSnapshot->pDevices == pTrav)
- pSnapshot->pDevices = pTrav->pNextObj;
-
- // delete the object
- if (pTrav->obj.pStruct != NULL)
- {
- GLV_VK_SNAPSHOT_DEVICE_NODE* pDevNode = (GLV_VK_SNAPSHOT_DEVICE_NODE*)pTrav->obj.pStruct;
- glv_vk_snapshot_destroy_createdevice_params(&pDevNode->params);
- free(pDevNode);
- }
- free(pTrav);
-
- if (pSnapshot->deviceCount > 0)
- {
- pSnapshot->deviceCount--;
- }
- else
- {
- // TODO: Callback WARNING that too many devices were deleted
- assert(!"DeviceCount <= 0 means that too many devices were deleted.");
- }
- return;
- }
- pPrev = pTrav;
- pTrav = pTrav->pNextObj;
- }
- }
-
- // If the code got here, then the device wasn't in the devices list.
- // That means we should add this device to the deleted items list.
- snapshot_insert_deleted_object(&s_delta, device, VK_OBJECT_TYPE_DEVICE);
-}
-
-// Traverse global list and return type for given object
-static VK_OBJECT_TYPE ll_get_obj_type(VkObject object) {
- GLV_VK_SNAPSHOT_LL_NODE *pTrav = s_delta.pGlobalObjs;
- while (pTrav) {
- if (pTrav->obj.pVkObject == object)
- return pTrav->obj.objType;
- pTrav = pTrav->pNextGlobal;
- }
- char str[1024];
- sprintf(str, "Attempting look-up on obj %p but it is NOT in the global list!", (void*)object);
- layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, object, 0, GLVSNAPSHOT_MISSING_OBJECT, LAYER_ABBREV_STR, str);
- return VK_OBJECT_TYPE_UNKNOWN;
-}
-
-static void ll_increment_use_count(void* pObj, VK_OBJECT_TYPE objType) {
- GLV_VK_SNAPSHOT_LL_NODE *pTrav = s_delta.pObjectHead[objType];
- while (pTrav) {
- if (pTrav->obj.pVkObject == pObj) {
- pTrav->obj.numUses++;
- return;
- }
- pTrav = pTrav->pNextObj;
- }
-
- // If we do not find obj, insert it and then increment count
- // TODO: we can't just create the object, because we don't know what it was created with.
- // Instead, we need to make a list of referenced objects. When the delta is merged with a snapshot, we'll need
- // to confirm that the referenced objects actually exist in the snapshot; otherwise I guess the merge should fail.
- char str[1024];
- sprintf(str, "Unable to increment count for obj %p, will add to list as %s type and increment count", pObj, string_VK_OBJECT_TYPE(objType));
- layerCbMsg(VK_DBG_MSG_WARNING, VK_VALIDATION_LEVEL_0, pObj, 0, GLVSNAPSHOT_UNKNOWN_OBJECT, LAYER_ABBREV_STR, str);
-
-// ll_insert_obj(pObj, objType);
-// ll_increment_use_count(pObj, objType);
-}
-
-// Set selected flag state for an object node
-static void set_status(void* pObj, VK_OBJECT_TYPE objType, OBJECT_STATUS status_flag) {
- if (pObj != NULL) {
- GLV_VK_SNAPSHOT_LL_NODE *pTrav = s_delta.pObjectHead[objType];
- while (pTrav) {
- if (pTrav->obj.pVkObject == pObj) {
- pTrav->obj.status |= status_flag;
- return;
- }
- pTrav = pTrav->pNextObj;
- }
-
- // If we do not find it print an error
- char str[1024];
- sprintf(str, "Unable to set status for non-existent object %p of %s type", pObj, string_VK_OBJECT_TYPE(objType));
- layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, pObj, 0, GLVSNAPSHOT_UNKNOWN_OBJECT, LAYER_ABBREV_STR, str);
- }
-}
-
-// Track selected state for an object node
-static void track_object_status(void* pObj, VkStateBindPoint stateBindPoint) {
- GLV_VK_SNAPSHOT_LL_NODE *pTrav = s_delta.pObjectHead[VK_OBJECT_TYPE_CMD_BUFFER];
-
- while (pTrav) {
- if (pTrav->obj.pVkObject == pObj) {
- if (stateBindPoint == VK_STATE_BIND_VIEWPORT) {
- pTrav->obj.status |= OBJSTATUS_VIEWPORT_BOUND;
- } else if (stateBindPoint == VK_STATE_BIND_RASTER) {
- pTrav->obj.status |= OBJSTATUS_RASTER_BOUND;
- } else if (stateBindPoint == VK_STATE_BIND_COLOR_BLEND) {
- pTrav->obj.status |= OBJSTATUS_COLOR_BLEND_BOUND;
- } else if (stateBindPoint == VK_STATE_BIND_DEPTH_STENCIL) {
- pTrav->obj.status |= OBJSTATUS_DEPTH_STENCIL_BOUND;
- }
- return;
- }
- pTrav = pTrav->pNextObj;
- }
-
- // If we do not find it print an error
- char str[1024];
- sprintf(str, "Unable to track status for non-existent Command Buffer object %p", pObj);
- layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, pObj, 0, GLVSNAPSHOT_UNKNOWN_OBJECT, LAYER_ABBREV_STR, str);
-}
-
-// Reset selected flag state for an object node
-static void reset_status(void* pObj, VK_OBJECT_TYPE objType, OBJECT_STATUS status_flag) {
- GLV_VK_SNAPSHOT_LL_NODE *pTrav = s_delta.pObjectHead[objType];
- while (pTrav) {
- if (pTrav->obj.pVkObject == pObj) {
- pTrav->obj.status &= ~status_flag;
- return;
- }
- pTrav = pTrav->pNextObj;
- }
-
- // If we do not find it print an error
- char str[1024];
- sprintf(str, "Unable to reset status for non-existent object %p of %s type", pObj, string_VK_OBJECT_TYPE(objType));
- layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, pObj, 0, GLVSNAPSHOT_UNKNOWN_OBJECT, LAYER_ABBREV_STR, str);
-}
-
-#include "vk_dispatch_table_helper.h"
-static void initGlaveSnapshot(void)
-{
- const char *strOpt;
- // initialize GlaveSnapshot options
- getLayerOptionEnum(LAYER_NAME_STR "ReportLevel", (uint32_t *) &g_reportingLevel);
- g_actionIsDefault = getLayerOptionEnum(LAYER_NAME_STR "DebugAction", (uint32_t *) &g_debugAction);
-
- if (g_debugAction & VK_DBG_LAYER_ACTION_LOG_MSG)
- {
- strOpt = getLayerOption(LAYER_NAME_STR "LogFilename");
- if (strOpt)
- {
- g_logFile = fopen(strOpt, "w");
- }
- if (g_logFile == NULL)
- g_logFile = stdout;
- }
-
- PFN_vkGetProcAddr fpNextGPA;
- fpNextGPA = pCurObj->pGPA;
- assert(fpNextGPA);
-
- layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalGpu) pCurObj->nextObject);
- if (!objLockInitialized)
- {
- // TODO/TBD: Need to delete this mutex sometime. How???
- loader_platform_thread_create_mutex(&objLock);
- objLockInitialized = 1;
- }
-}
-
-//=============================================================================
-// vulkan entrypoints
-//=============================================================================
-VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance)
-{
- VkResult result = nextTable.CreateInstance(pCreateInfo, pInstance);
- loader_platform_thread_lock_mutex(&objLock);
- snapshot_insert_object(&s_delta, *pInstance, VK_OBJECT_TYPE_INSTANCE);
- loader_platform_thread_unlock_mutex(&objLock);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(VkInstance instance)
-{
- VkResult result = nextTable.DestroyInstance(instance);
- loader_platform_thread_lock_mutex(&objLock);
- snapshot_remove_object(&s_delta, (void*)instance);
- loader_platform_thread_unlock_mutex(&objLock);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkEnumerateGpus(VkInstance instance, uint32_t maxGpus, uint32_t* pGpuCount, VkPhysicalGpu* pGpus)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)instance, VK_OBJECT_TYPE_INSTANCE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.EnumerateGpus(instance, maxGpus, pGpuCount, pGpus);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkGetGpuInfo(VkPhysicalGpu gpu, VkPhysicalGpuInfoType infoType, size_t* pDataSize, void* pData)
-{
- VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
- pCurObj = gpuw;
- loader_platform_thread_once(&tabOnce, initGlaveSnapshot);
- VkResult result = nextTable.GetGpuInfo((VkPhysicalGpu)gpuw->nextObject, infoType, pDataSize, pData);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(VkPhysicalGpu gpu, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice)
-{
- VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
- pCurObj = gpuw;
- loader_platform_thread_once(&tabOnce, initGlaveSnapshot);
- VkResult result = nextTable.CreateDevice((VkPhysicalGpu)gpuw->nextObject, pCreateInfo, pDevice);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- snapshot_insert_device(&s_delta, gpu, pCreateInfo, pDevice);
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device)
-{
- VkResult result = nextTable.DestroyDevice(device);
- loader_platform_thread_lock_mutex(&objLock);
- snapshot_remove_device(&s_delta, device);
- loader_platform_thread_unlock_mutex(&objLock);
-
- // Report any remaining objects in LL
- GLV_VK_SNAPSHOT_LL_NODE *pTrav = s_delta.pGlobalObjs;
- while (pTrav != NULL)
- {
- if (pTrav->obj.objType == VK_OBJECT_TYPE_SWAP_CHAIN_IMAGE_WSI ||
- pTrav->obj.objType == VK_OBJECT_TYPE_SWAP_CHAIN_MEMORY_WSI)
- {
- GLV_VK_SNAPSHOT_LL_NODE *pDel = pTrav;
- pTrav = pTrav->pNextGlobal;
- snapshot_remove_object(&s_delta, (void*)(pDel->obj.pVkObject));
- } else {
- char str[1024];
- sprintf(str, "OBJ ERROR : %s object %p has not been destroyed (was used %lu times).", string_VK_OBJECT_TYPE(pTrav->obj.objType), pTrav->obj.pVkObject, pTrav->obj.numUses);
- layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, device, 0, GLVSNAPSHOT_OBJECT_LEAK, LAYER_ABBREV_STR, str);
- pTrav = pTrav->pNextGlobal;
- }
- }
-
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkEnumerateLayers(VkPhysicalGpu gpu, size_t maxStringSize, size_t* pLayerCount, char* const* pOutLayers, void* pReserved)
-{
- if (gpu != NULL) {
- VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)gpu, VK_OBJECT_TYPE_PHYSICAL_GPU);
- loader_platform_thread_unlock_mutex(&objLock);
- pCurObj = gpuw;
- loader_platform_thread_once(&tabOnce, initGlaveSnapshot);
- VkResult result = nextTable.EnumerateLayers((VkPhysicalGpu)gpuw->nextObject, maxStringSize, pLayerCount, pOutLayers, pReserved);
- return result;
- } else {
- if (pLayerCount == NULL || pOutLayers == NULL || pOutLayers[0] == NULL)
- return VK_ERROR_INVALID_POINTER;
- // This layer compatible with all GPUs
- *pLayerCount = 1;
- strncpy((char *) pOutLayers[0], LAYER_NAME_STR, maxStringSize);
- return VK_SUCCESS;
- }
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
-{
- set_status((void*)fence, VK_OBJECT_TYPE_FENCE, OBJSTATUS_FENCE_IS_SUBMITTED);
- VkResult result = nextTable.QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
-{
- VkResult result = nextTable.QueueWaitIdle(queue);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.DeviceWaitIdle(device);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkGpuMemory* pMem)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.AllocMemory(device, pAllocInfo, pMem);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pMem, VK_OBJECT_TYPE_GPU_MEMORY);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkGpuMemory mem)
-{
- VkResult result = nextTable.FreeMemory(device, mem);
- loader_platform_thread_lock_mutex(&objLock);
- snapshot_remove_object(&s_delta, (void*)mem);
- loader_platform_thread_unlock_mutex(&objLock);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkDevice device, VkGpuMemory mem, VkMemoryPriority priority)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)mem, VK_OBJECT_TYPE_GPU_MEMORY);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.SetMemoryPriority(device, mem, priority);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkGpuMemory mem, VkFlags flags, void** ppData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)mem, VK_OBJECT_TYPE_GPU_MEMORY);
- loader_platform_thread_unlock_mutex(&objLock);
- set_status((void*)mem, VK_OBJECT_TYPE_GPU_MEMORY, OBJSTATUS_GPU_MEM_MAPPED);
- VkResult result = nextTable.MapMemory(device, mem, flags, ppData);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkGpuMemory mem)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)mem, VK_OBJECT_TYPE_GPU_MEMORY);
- loader_platform_thread_unlock_mutex(&objLock);
- reset_status((void*)mem, VK_OBJECT_TYPE_GPU_MEMORY, OBJSTATUS_GPU_MEM_MAPPED);
- VkResult result = nextTable.UnmapMemory(device, mem);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkPinSystemMemory(VkDevice device, const void* pSysMem, size_t memSize, VkGpuMemory* pMem)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.PinSystemMemory(device, pSysMem, memSize, pMem);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkGetMultiGpuCompatibility(VkPhysicalGpu gpu0, VkPhysicalGpu gpu1, VkGpuCompatibilityInfo* pInfo)
-{
- VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu0;
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)gpu0, VK_OBJECT_TYPE_PHYSICAL_GPU);
- loader_platform_thread_unlock_mutex(&objLock);
- pCurObj = gpuw;
- loader_platform_thread_once(&tabOnce, initGlaveSnapshot);
- VkResult result = nextTable.GetMultiGpuCompatibility((VkPhysicalGpu)gpuw->nextObject, gpu1, pInfo);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedMemory(VkDevice device, const VkMemoryOpenInfo* pOpenInfo, VkGpuMemory* pMem)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.OpenSharedMemory(device, pOpenInfo, pMem);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedSemaphore(VkDevice device, const VkSemaphoreOpenInfo* pOpenInfo, VkSemaphore* pSemaphore)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.OpenSharedSemaphore(device, pOpenInfo, pSemaphore);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerMemory(VkDevice device, const VkPeerMemoryOpenInfo* pOpenInfo, VkGpuMemory* pMem)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.OpenPeerMemory(device, pOpenInfo, pMem);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerImage(VkDevice device, const VkPeerImageOpenInfo* pOpenInfo, VkImage* pImage, VkGpuMemory* pMem)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.OpenPeerImage(device, pOpenInfo, pImage, pMem);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
-{
- VkResult result = nextTable.DestroyObject(device, objType, object);
- loader_platform_thread_lock_mutex(&objLock);
- snapshot_remove_object(&s_delta, (void*)object);
- loader_platform_thread_unlock_mutex(&objLock);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType objType, VkObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)object, ll_get_obj_type(object));
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.GetObjectInfo(device, objType, object, infoType, pDataSize, pData);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(VkQueue queue, VkObjectType objType, VkObject object, VkGpuMemory mem, VkGpuSize offset)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)object, ll_get_obj_type(object));
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.BindObjectMemory(queue, objType, object, mem, offset);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemoryRange(VkQueue queue, VkObjectType objType, VkObject object, VkGpuSize rangeOffset, VkGpuSize rangeSize, VkGpuMemory mem, VkGpuSize memOffset)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)object, ll_get_obj_type(object));
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.BindObjectMemoryRange(queue, objType, object, rangeOffset, rangeSize, mem, memOffset);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemoryRange(VkImage image, const VkImageMemoryBindInfo* pBindInfo, VkGpuMemory mem, VkGpuSize memOffset)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)image, VK_OBJECT_TYPE_IMAGE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.BindImageMemoryRange(image, pBindInfo, mem, memOffset);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateFence(device, pCreateInfo, pFence);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pFence, VK_OBJECT_TYPE_FENCE);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)fence, VK_OBJECT_TYPE_FENCE);
- loader_platform_thread_unlock_mutex(&objLock);
- // Warn if submitted_flag is not set
- VkResult result = nextTable.GetFenceStatus(device, fence);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.WaitForFences(device, fenceCount, pFences, waitAll, timeout);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateSemaphore(device, pCreateInfo, pSemaphore);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pSemaphore, VK_OBJECT_TYPE_QUEUE_SEMAPHORE);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
-{
- VkResult result = nextTable.QueueSignalSemaphore(queue, semaphore);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
-{
- VkResult result = nextTable.QueueWaitSemaphore(queue, semaphore);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateEvent(device, pCreateInfo, pEvent);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pEvent, VK_OBJECT_TYPE_EVENT);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)event, VK_OBJECT_TYPE_EVENT);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.GetEventStatus(device, event);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)event, VK_OBJECT_TYPE_EVENT);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.SetEvent(device, event);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)event, VK_OBJECT_TYPE_EVENT);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.ResetEvent(device, event);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateQueryPool(device, pCreateInfo, pQueryPool);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pQueryPool, VK_OBJECT_TYPE_QUERY_POOL);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)queryPool, VK_OBJECT_TYPE_QUERY_POOL);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkGetFormatInfo(VkDevice device, VkFormat format, VkFormatInfoType infoType, size_t* pDataSize, void* pData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.GetFormatInfo(device, format, infoType, pDataSize, pData);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateBuffer(device, pCreateInfo, pBuffer);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pBuffer, VK_OBJECT_TYPE_BUFFER);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateBufferView(device, pCreateInfo, pView);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pView, VK_OBJECT_TYPE_BUFFER_VIEW);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateImage(device, pCreateInfo, pImage);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pImage, VK_OBJECT_TYPE_IMAGE);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)image, VK_OBJECT_TYPE_IMAGE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.GetImageSubresourceInfo(device, image, pSubresource, infoType, pDataSize, pData);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateImageView(device, pCreateInfo, pView);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pView, VK_OBJECT_TYPE_IMAGE_VIEW);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateColorAttachmentView(device, pCreateInfo, pView);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pView, VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateDepthStencilView(device, pCreateInfo, pView);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pView, VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateShader(device, pCreateInfo, pShader);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pShader, VK_OBJECT_TYPE_SHADER);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pPipeline, VK_OBJECT_TYPE_PIPELINE);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateComputePipeline(device, pCreateInfo, pPipeline);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pPipeline, VK_OBJECT_TYPE_PIPELINE);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)pipeline, VK_OBJECT_TYPE_PIPELINE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.StorePipeline(device, pipeline, pDataSize, pData);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.LoadPipeline(device, dataSize, pData, pPipeline);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateSampler(device, pCreateInfo, pSampler);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pSampler, VK_OBJECT_TYPE_SAMPLER);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout( VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pSetLayout, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pDescriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)descriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.ResetDescriptorPool(device, descriptorPool);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)descriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
- if (result == VK_SUCCESS)
- {
- for (uint32_t i = 0; i < *pCount; i++) {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, pDescriptorSets[i], VK_OBJECT_TYPE_DESCRIPTOR_SET);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- }
- return result;
-}
-
-VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)descriptorPool, VK_OBJECT_TYPE_DESCRIPTOR_POOL);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.ClearDescriptorSets(device, descriptorPool, count, pDescriptorSets);
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateDynamicViewportState(device, pCreateInfo, pState);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pState, VK_OBJECT_TYPE_DYNAMIC_VP_STATE_OBJECT);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateDynamicRasterState(device, pCreateInfo, pState);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pState, VK_OBJECT_TYPE_DYNAMIC_RS_STATE_OBJECT);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateDynamicColorBlendState(device, pCreateInfo, pState);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pState, VK_OBJECT_TYPE_DYNAMIC_CB_STATE_OBJECT);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateDynamicDepthStencilState(device, pCreateInfo, pState);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pState, VK_OBJECT_TYPE_DYNAMIC_DS_STATE_OBJECT);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pCmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.BeginCommandBuffer(cmdBuffer, pBeginInfo);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- reset_status((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER, (OBJSTATUS_VIEWPORT_BOUND |
- OBJSTATUS_RASTER_BOUND |
- OBJSTATUS_COLOR_BLEND_BOUND |
- OBJSTATUS_DEPTH_STENCIL_BOUND));
- VkResult result = nextTable.EndCommandBuffer(cmdBuffer);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.ResetCommandBuffer(cmdBuffer);
- return result;
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- track_object_status((void*)cmdBuffer, stateBindPoint);
- nextTable.CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkDescriptorSetLayoutChain layoutChain, uint32_t layoutChainSlot, uint32_t count, const VkDescriptorSet* pDescriptorSets, const uint32_t* pUserData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layoutChain, layoutChainSlot, count, pDescriptorSets, pUserData);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
- VkCmdBuffer cmdBuffer,
- uint32_t startBinding,
- uint32_t bindingCount,
- const VkBuffer* pBuffers
- const VkGpuSize* pOffsets)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, VkIndexType indexType)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t count, uint32_t stride)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t count, uint32_t stride)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdDispatch(cmdBuffer, x, y, z);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdDispatchIndirect(cmdBuffer, buffer, offset);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkGpuSize destOffset, VkGpuSize dataSize, const uint32_t* pData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkGpuSize destOffset, VkGpuSize fillSize, uint32_t data)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColor* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencil(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t rectCount, const VkImageResolve* pRects)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, rectCount, pRects);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdSetEvent(cmdBuffer, event, pipeEvent);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdResetEvent(cmdBuffer, event, pipeEvent);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, const VkEventWaitInfo* pWaitInfo)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdWaitEvents(cmdBuffer, pWaitInfo);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, const VkPipelineBarrier* pBarrier)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdPipelineBarrier(cmdBuffer, pBarrier);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdEndQuery(cmdBuffer, queryPool, slot);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkGpuSize destOffset)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdInitAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdLoadAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer srcBuffer, VkGpuSize srcOffset)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdSaveAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer destBuffer, VkGpuSize destOffset)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset);
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateFramebuffer(device, pCreateInfo, pFramebuffer);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pFramebuffer, VK_OBJECT_TYPE_FRAMEBUFFER);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateRenderPass(device, pCreateInfo, pRenderPass);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pRenderPass, VK_OBJECT_TYPE_RENDER_PASS);
- pNode->obj.pStruct = NULL;
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin *pRenderPassBegin)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdEndRenderPass(cmdBuffer, renderPass);
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkDbgSetValidationLevel(VkDevice device, VkValidationLevel validationLevel)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.DbgSetValidationLevel(device, validationLevel);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkDbgRegisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, void* pUserData)
-{
- // This layer intercepts callbacks
- VK_LAYER_DBG_FUNCTION_NODE *pNewDbgFuncNode = (VK_LAYER_DBG_FUNCTION_NODE*)malloc(sizeof(VK_LAYER_DBG_FUNCTION_NODE));
- if (!pNewDbgFuncNode)
- return VK_ERROR_OUT_OF_MEMORY;
- pNewDbgFuncNode->pfnMsgCallback = pfnMsgCallback;
- pNewDbgFuncNode->pUserData = pUserData;
- pNewDbgFuncNode->pNext = g_pDbgFunctionHead;
- g_pDbgFunctionHead = pNewDbgFuncNode;
- // force callbacks if DebugAction hasn't been set already other than initial value
- if (g_actionIsDefault) {
- g_debugAction = VK_DBG_LAYER_ACTION_CALLBACK;
- } VkResult result = nextTable.DbgRegisterMsgCallback(instance, pfnMsgCallback, pUserData);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkDbgUnregisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback)
-{
- VK_LAYER_DBG_FUNCTION_NODE *pTrav = g_pDbgFunctionHead;
- VK_LAYER_DBG_FUNCTION_NODE *pPrev = pTrav;
- while (pTrav) {
- if (pTrav->pfnMsgCallback == pfnMsgCallback) {
- pPrev->pNext = pTrav->pNext;
- if (g_pDbgFunctionHead == pTrav)
- g_pDbgFunctionHead = pTrav->pNext;
- free(pTrav);
- break;
- }
- pPrev = pTrav;
- pTrav = pTrav->pNext;
- }
- if (g_pDbgFunctionHead == NULL)
- {
- if (g_actionIsDefault)
- g_debugAction = VK_DBG_LAYER_ACTION_LOG_MSG;
- else
- g_debugAction &= ~VK_DBG_LAYER_ACTION_CALLBACK;
- }
- VkResult result = nextTable.DbgUnregisterMsgCallback(instance, pfnMsgCallback);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkDbgSetMessageFilter(VkDevice device, int32_t msgCode, VK_DBG_MSG_FILTER filter)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.DbgSetMessageFilter(device, msgCode, filter);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkDbgSetObjectTag(VkObject object, size_t tagSize, const void* pTag)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)object, ll_get_obj_type(object));
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.DbgSetObjectTag(object, tagSize, pTag);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkDbgSetGlobalOption(VkInstance instance, VK_DBG_GLOBAL_OPTION dbgOption, size_t dataSize, const void* pData)
-{
- VkResult result = nextTable.DbgSetGlobalOption(instance, dbgOption, dataSize, pData);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI vkDbgSetDeviceOption(VkDevice device, VK_DBG_DEVICE_OPTION dbgOption, size_t dataSize, const void* pData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.DbgSetDeviceOption(device, dbgOption, dataSize, pData);
- return result;
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerBegin(VkCmdBuffer cmdBuffer, const char* pMarker)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdDbgMarkerBegin(cmdBuffer, pMarker);
-}
-
-VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerEnd(VkCmdBuffer cmdBuffer)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)cmdBuffer, VK_OBJECT_TYPE_CMD_BUFFER);
- loader_platform_thread_unlock_mutex(&objLock);
- nextTable.CmdDbgMarkerEnd(cmdBuffer);
-}
-
-VK_LAYER_EXPORT VkResult VKAPI xglGetDisplayInfoWSI(VkDisplayWSI display, VkDisplayInfoTypeWSI infoType, size_t* pDataSize, void* pData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)display, VK_OBJECT_TYPE_DISPLAY_WSI);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.GetDisplayInfoWSI(display, infoType, pDataSize, pData);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI xglCreateSwapChainWSI(VkDevice device, const VkSwapChainCreateInfoWSI* pCreateInfo, VkSwapChainWSI* pSwapChain)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)device, VK_OBJECT_TYPE_DEVICE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.CreateSwapChainWSI(device, pCreateInfo, pSwapChain);
- if (result == VK_SUCCESS)
- {
- loader_platform_thread_lock_mutex(&objLock);
-
-#if 0
- GLV_VK_SNAPSHOT_LL_NODE* pNode = snapshot_insert_object(&s_delta, *pImage, VK_OBJECT_TYPE_IMAGE);
- pNode->obj.pStruct = NULL;
-
- GLV_VK_SNAPSHOT_LL_NODE* pMemNode = snapshot_insert_object(&s_delta, *pMem, VK_OBJECT_TYPE_PRESENTABLE_IMAGE_MEMORY);
- pMemNode->obj.pStruct = NULL;
-#else
- snapshot_insert_object(&s_delta, (void*)*pSwapChain, VK_OBJECT_TYPE_SWAP_CHAIN_WSI);
-#endif
-
- loader_platform_thread_unlock_mutex(&objLock);
- }
- return result;
-
-}
-
-VK_LAYER_EXPORT VkResult VKAPI xglDestroySwapChainWSI(VkSwapChainWSI swapChain)
-{
- VkResult result = nextTable.DestroySwapChainWSI(swapChain);
- loader_platform_thread_lock_mutex(&objLock);
- snapshot_remove_object(&s_delta, (void*)swapChain);
- loader_platform_thread_unlock_mutex(&objLock);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI xglGetSwapChainInfoWSI(VkSwapChainWSI swapChain, VkSwapChainInfoTypeWSI infoType, size_t* pDataSize, void* pData)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)swapChain, VK_OBJECT_TYPE_SWAP_CHAIN_WSI);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.GetSwapChainInfoWSI(swapChain, infoType, pDataSize, pData);
- return result;
-}
-
-VK_LAYER_EXPORT VkResult VKAPI xglQueuePresentWSI(VkQueue queue, const VkPresentInfoWSI* pPresentInfo)
-{
- loader_platform_thread_lock_mutex(&objLock);
- ll_increment_use_count((void*)queue, VK_OBJECT_TYPE_QUEUE);
- loader_platform_thread_unlock_mutex(&objLock);
- VkResult result = nextTable.QueuePresentWSI(queue, pPresentInfo);
- return result;
-}
-
-//=================================================================================================
-// Exported methods
-//=================================================================================================
-void glvSnapshotStartTracking(void)
-{
- assert(!"Not Implemented");
-}
-
-//=================================================================================================
-GLV_VK_SNAPSHOT glvSnapshotGetDelta(void)
-{
- // copy the delta by merging it into an empty snapshot
- GLV_VK_SNAPSHOT empty;
- memset(&empty, 0, sizeof(GLV_VK_SNAPSHOT));
-
- return glvSnapshotMerge(&s_delta, &empty);
-}
-
-//=================================================================================================
-GLV_VK_SNAPSHOT glvSnapshotGetSnapshot(void)
-{
- // copy the master snapshot by merging it into an empty snapshot
- GLV_VK_SNAPSHOT empty;
- memset(&empty, 0, sizeof(GLV_VK_SNAPSHOT));
-
- return glvSnapshotMerge(&s_snapshot, &empty);
-}
-
-//=================================================================================================
-void glvSnapshotPrintDelta()
-{
- char str[2048];
- GLV_VK_SNAPSHOT_LL_NODE* pTrav = s_delta.pGlobalObjs;
- sprintf(str, "==== DELTA SNAPSHOT contains %lu objects, %lu devices, and %lu deleted objects", s_delta.globalObjCount, s_delta.deviceCount, s_delta.deltaDeletedObjectCount);
- layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, GLVSNAPSHOT_SNAPSHOT_DATA, LAYER_ABBREV_STR, str);
-
- // print all objects
- if (s_delta.globalObjCount > 0)
- {
- sprintf(str, "======== DELTA SNAPSHOT Created Objects:");
- layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, pTrav->obj.pVkObject, 0, GLVSNAPSHOT_SNAPSHOT_DATA, LAYER_ABBREV_STR, str);
- while (pTrav != NULL)
- {
- sprintf(str, "\t%s obj %p", string_VK_OBJECT_TYPE(pTrav->obj.objType), pTrav->obj.pVkObject);
- layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, pTrav->obj.pVkObject, 0, GLVSNAPSHOT_SNAPSHOT_DATA, LAYER_ABBREV_STR, str);
- pTrav = pTrav->pNextGlobal;
- }
- }
-
- // print devices
- if (s_delta.deviceCount > 0)
- {
- GLV_VK_SNAPSHOT_LL_NODE* pDeviceNode = s_delta.pDevices;
- sprintf(str, "======== DELTA SNAPSHOT Devices:");
- layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, GLVSNAPSHOT_SNAPSHOT_DATA, LAYER_ABBREV_STR, str);
- while (pDeviceNode != NULL)
- {
- GLV_VK_SNAPSHOT_DEVICE_NODE* pDev = (GLV_VK_SNAPSHOT_DEVICE_NODE*)pDeviceNode->obj.pStruct;
- char * createInfoStr = vk_print_vkdevicecreateinfo(pDev->params.pCreateInfo, "\t\t");
- sprintf(str, "\t%s obj %p:\n%s", string_VK_OBJECT_TYPE(VK_OBJECT_TYPE_DEVICE), pDeviceNode->obj.pVkObject, createInfoStr);
- layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, pDeviceNode->obj.pVkObject, 0, GLVSNAPSHOT_SNAPSHOT_DATA, LAYER_ABBREV_STR, str);
- pDeviceNode = pDeviceNode->pNextObj;
- }
- }
-
- // print deleted objects
- if (s_delta.deltaDeletedObjectCount > 0)
- {
- GLV_VK_SNAPSHOT_DELETED_OBJ_NODE* pDelObjNode = s_delta.pDeltaDeletedObjects;
- sprintf(str, "======== DELTA SNAPSHOT Deleted Objects:");
- layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, GLVSNAPSHOT_SNAPSHOT_DATA, LAYER_ABBREV_STR, str);
- while (pDelObjNode != NULL)
- {
- sprintf(str, " %s obj %p", string_VK_OBJECT_TYPE(pDelObjNode->objType), pDelObjNode->pVkObject);
- layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, pDelObjNode->pVkObject, 0, GLVSNAPSHOT_SNAPSHOT_DATA, LAYER_ABBREV_STR, str);
- pDelObjNode = pDelObjNode->pNextObj;
- }
- }
-}
-
-void glvSnapshotStopTracking(void)
-{
- assert(!"Not Implemented");
-}
-
-void glvSnapshotClear(void)
-{
- assert(!"Not Implemented");
-}
-
-GLV_VK_SNAPSHOT glvSnapshotMerge(const GLV_VK_SNAPSHOT* const pDelta, const GLV_VK_SNAPSHOT* const pSnapshot)
-{
- assert(!"Not Implemented");
-}
-
-
-
-
-//=============================================================================
-// Old Exported methods
-//=============================================================================
-uint64_t glvSnapshotGetObjectCount(VK_OBJECT_TYPE type)
-{
- uint64_t retVal = (type == VK_OBJECT_TYPE_ANY) ? s_delta.globalObjCount : s_delta.numObjs[type];
- return retVal;
-}
-
-VkResult glvSnapshotGetObjects(VK_OBJECT_TYPE type, uint64_t objCount, GLV_VK_SNAPSHOT_OBJECT_NODE *pObjNodeArray)
-{
- // This bool flags if we're pulling all objs or just a single class of objs
- bool32_t bAllObjs = (type == VK_OBJECT_TYPE_ANY);
- // Check the count first thing
- uint64_t maxObjCount = (bAllObjs) ? s_delta.globalObjCount : s_delta.numObjs[type];
- if (objCount > maxObjCount) {
- char str[1024];
- sprintf(str, "OBJ ERROR : Received objTrackGetObjects() request for %lu objs, but there are only %lu objs of type %s", objCount, maxObjCount, string_VK_OBJECT_TYPE(type));
- layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, 0, 0, GLVSNAPSHOT_OBJCOUNT_MAX_EXCEEDED, LAYER_ABBREV_STR, str);
- return VK_ERROR_INVALID_VALUE;
- }
-
- GLV_VK_SNAPSHOT_LL_NODE* pTrav = (bAllObjs) ? s_delta.pGlobalObjs : s_delta.pObjectHead[type];
-
- for (uint64_t i = 0; i < objCount; i++) {
- if (!pTrav) {
- char str[1024];
- sprintf(str, "OBJ INTERNAL ERROR : Ran out of %s objs! Should have %lu, but only copied %lu and not the requested %lu.", string_VK_OBJECT_TYPE(type), maxObjCount, i, objCount);
- layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, 0, 0, GLVSNAPSHOT_INTERNAL_ERROR, LAYER_ABBREV_STR, str);
- return VK_ERROR_UNKNOWN;
- }
- memcpy(&pObjNodeArray[i], pTrav, sizeof(GLV_VK_SNAPSHOT_OBJECT_NODE));
- pTrav = (bAllObjs) ? pTrav->pNextGlobal : pTrav->pNextObj;
- }
- return VK_SUCCESS;
-}
-
-void glvSnapshotPrintObjects(void)
-{
- glvSnapshotPrintDelta();
-}
-
-#include "vk_generic_intercept_proc_helper.h"
-VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalGpu gpu, const char* funcName)
-{
- VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
- void* addr;
- if (gpu == NULL)
- return NULL;
- pCurObj = gpuw;
- loader_platform_thread_once(&tabOnce, initGlaveSnapshot);
-
- addr = layer_intercept_proc(funcName);
- if (addr)
- return addr;
- else if (!strncmp("glvSnapshotGetObjectCount", funcName, sizeof("glvSnapshotGetObjectCount")))
- return glvSnapshotGetObjectCount;
- else if (!strncmp("glvSnapshotGetObjects", funcName, sizeof("glvSnapshotGetObjects")))
- return glvSnapshotGetObjects;
- else if (!strncmp("glvSnapshotPrintObjects", funcName, sizeof("glvSnapshotPrintObjects")))
- return glvSnapshotPrintObjects;
- else if (!strncmp("glvSnapshotStartTracking", funcName, sizeof("glvSnapshotStartTracking")))
- return glvSnapshotStartTracking;
- else if (!strncmp("glvSnapshotGetDelta", funcName, sizeof("glvSnapshotGetDelta")))
- return glvSnapshotGetDelta;
- else if (!strncmp("glvSnapshotGetSnapshot", funcName, sizeof("glvSnapshotGetSnapshot")))
- return glvSnapshotGetSnapshot;
- else if (!strncmp("glvSnapshotPrintDelta", funcName, sizeof("glvSnapshotPrintDelta")))
- return glvSnapshotPrintDelta;
- else if (!strncmp("glvSnapshotStopTracking", funcName, sizeof("glvSnapshotStopTracking")))
- return glvSnapshotStopTracking;
- else if (!strncmp("glvSnapshotClear", funcName, sizeof("glvSnapshotClear")))
- return glvSnapshotClear;
- else if (!strncmp("glvSnapshotMerge", funcName, sizeof("glvSnapshotMerge")))
- return glvSnapshotMerge;
- else {
- if (gpuw->pGPA == NULL)
- return NULL;
- return gpuw->pGPA((VkPhysicalGpu)gpuw->nextObject, funcName);
- }
-}
-
diff --git a/layers/glave_snapshot.h b/layers/glave_snapshot.h
deleted file mode 100644
index 9ca095b7..00000000
--- a/layers/glave_snapshot.h
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * GLAVE & vulkan
- *
- * Copyright (C) 2015 LunarG, Inc. and Valve Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included
- * in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-#include "vkLayer.h"
-
-// Glave Snapshot ERROR codes
-typedef enum _GLAVE_SNAPSHOT_ERROR
-{
- GLVSNAPSHOT_NONE, // Used for INFO & other non-error messages
- GLVSNAPSHOT_UNKNOWN_OBJECT, // Updating uses of object that's not in global object list
- GLVSNAPSHOT_INTERNAL_ERROR, // Bug with data tracking within the layer
- GLVSNAPSHOT_DESTROY_OBJECT_FAILED, // Couldn't find object to be destroyed
- GLVSNAPSHOT_MISSING_OBJECT, // Attempted look-up on object that isn't in global object list
- GLVSNAPSHOT_OBJECT_LEAK, // OBJECT was not correctly freed/destroyed
- GLVSNAPSHOT_OBJCOUNT_MAX_EXCEEDED, // Request for Object data in excess of max obj count
- GLVSNAPSHOT_INVALID_FENCE, // Requested status of unsubmitted fence object
- GLVSNAPSHOT_VIEWPORT_NOT_BOUND, // Draw submitted with no viewport state object bound
- GLVSNAPSHOT_RASTER_NOT_BOUND, // Draw submitted with no raster state object bound
- GLVSNAPSHOT_COLOR_BLEND_NOT_BOUND, // Draw submitted with no color blend state object bound
- GLVSNAPSHOT_DEPTH_STENCIL_NOT_BOUND, // Draw submitted with no depth-stencil state object bound
- GLVSNAPSHOT_GPU_MEM_MAPPED, // Mem object ref'd in cmd buff is still mapped
- GLVSNAPSHOT_GETGPUINFO_NOT_CALLED, // Gpu Information has not been requested before drawing
- GLVSNAPSHOT_MEMREFCOUNT_MAX_EXCEEDED, // Number of QueueSubmit memory references exceeds GPU maximum
- GLVSNAPSHOT_SNAPSHOT_DATA, // Message being printed is actually snapshot data
-} GLAVE_SNAPSHOT_ERROR;
-
-// Object Status -- used to track state of individual objects
-typedef enum _OBJECT_STATUS
-{
- OBJSTATUS_NONE = 0x00000000, // No status is set
- OBJSTATUS_FENCE_IS_SUBMITTED = 0x00000001, // Fence has been submitted
- OBJSTATUS_VIEWPORT_BOUND = 0x00000002, // Viewport state object has been bound
- OBJSTATUS_RASTER_BOUND = 0x00000004, // Viewport state object has been bound
- OBJSTATUS_COLOR_BLEND_BOUND = 0x00000008, // Viewport state object has been bound
- OBJSTATUS_DEPTH_STENCIL_BOUND = 0x00000010, // Viewport state object has been bound
- OBJSTATUS_GPU_MEM_MAPPED = 0x00000020, // Memory object is currently mapped
-} OBJECT_STATUS;
-
-// Object type enum
-typedef enum _VK_OBJECT_TYPE
-{
- VK_OBJECT_TYPE_UNKNOWN,
- VK_OBJECT_TYPE_SAMPLER,
- VK_OBJECT_TYPE_DYNAMIC_DS_STATE_OBJECT,
- VK_OBJECT_TYPE_DESCRIPTOR_SET,
- VK_OBJECT_TYPE_DESCRIPTOR_POOL,
- VK_OBJECT_TYPE_DYNAMIC_CB_STATE_OBJECT,
- VK_OBJECT_TYPE_IMAGE_VIEW,
- VK_OBJECT_TYPE_QUEUE_SEMAPHORE,
- VK_OBJECT_TYPE_SHADER,
- VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,
- VK_OBJECT_TYPE_BUFFER,
- VK_OBJECT_TYPE_PIPELINE,
- VK_OBJECT_TYPE_DEVICE,
- VK_OBJECT_TYPE_QUERY_POOL,
- VK_OBJECT_TYPE_EVENT,
- VK_OBJECT_TYPE_QUEUE,
- VK_OBJECT_TYPE_PHYSICAL_GPU,
- VK_OBJECT_TYPE_RENDER_PASS,
- VK_OBJECT_TYPE_FRAMEBUFFER,
- VK_OBJECT_TYPE_IMAGE,
- VK_OBJECT_TYPE_BUFFER_VIEW,
- VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW,
- VK_OBJECT_TYPE_INSTANCE,
- VK_OBJECT_TYPE_PIPELINE_DELTA,
- VK_OBJECT_TYPE_DYNAMIC_VP_STATE_OBJECT,
- VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW,
- VK_OBJECT_TYPE_GPU_MEMORY,
- VK_OBJECT_TYPE_DYNAMIC_RS_STATE_OBJECT,
- VK_OBJECT_TYPE_FENCE,
- VK_OBJECT_TYPE_CMD_BUFFER,
-
- VK_OBJECT_TYPE_DISPLAY_WSI,
- VK_OBJECT_TYPE_SWAP_CHAIN_WSI,
- VK_OBJECT_TYPE_SWAP_CHAIN_IMAGE_WSI,
- VK_OBJECT_TYPE_SWAP_CHAIN_MEMORY_WSI,
-
- VK_NUM_OBJECT_TYPE,
- VK_OBJECT_TYPE_ANY, // Allow global object list to be queried/retrieved
-} VK_OBJECT_TYPE;
-
-static const char* string_VK_OBJECT_TYPE(VK_OBJECT_TYPE type) {
- switch (type)
- {
- case VK_OBJECT_TYPE_DEVICE:
- return "DEVICE";
- case VK_OBJECT_TYPE_PIPELINE:
- return "PIPELINE";
- case VK_OBJECT_TYPE_FENCE:
- return "FENCE";
- case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT:
- return "DESCRIPTOR_SET_LAYOUT";
- case VK_OBJECT_TYPE_GPU_MEMORY:
- return "GPU_MEMORY";
- case VK_OBJECT_TYPE_QUEUE:
- return "QUEUE";
- case VK_OBJECT_TYPE_IMAGE:
- return "IMAGE";
- case VK_OBJECT_TYPE_CMD_BUFFER:
- return "CMD_BUFFER";
- case VK_OBJECT_TYPE_QUEUE_SEMAPHORE:
- return "QUEUE_SEMAPHORE";
- case VK_OBJECT_TYPE_FRAMEBUFFER:
- return "FRAMEBUFFER";
- case VK_OBJECT_TYPE_SAMPLER:
- return "SAMPLER";
- case VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW:
- return "COLOR_ATTACHMENT_VIEW";
- case VK_OBJECT_TYPE_BUFFER_VIEW:
- return "BUFFER_VIEW";
- case VK_OBJECT_TYPE_DESCRIPTOR_SET:
- return "DESCRIPTOR_SET";
- case VK_OBJECT_TYPE_PHYSICAL_GPU:
- return "PHYSICAL_GPU";
- case VK_OBJECT_TYPE_IMAGE_VIEW:
- return "IMAGE_VIEW";
- case VK_OBJECT_TYPE_BUFFER:
- return "BUFFER";
- case VK_OBJECT_TYPE_PIPELINE_DELTA:
- return "PIPELINE_DELTA";
- case VK_OBJECT_TYPE_DYNAMIC_RS_STATE_OBJECT:
- return "DYNAMIC_RS_STATE_OBJECT";
- case VK_OBJECT_TYPE_EVENT:
- return "EVENT";
- case VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW:
- return "DEPTH_STENCIL_VIEW";
- case VK_OBJECT_TYPE_SHADER:
- return "SHADER";
- case VK_OBJECT_TYPE_DYNAMIC_DS_STATE_OBJECT:
- return "DYNAMIC_DS_STATE_OBJECT";
- case VK_OBJECT_TYPE_DYNAMIC_VP_STATE_OBJECT:
- return "DYNAMIC_VP_STATE_OBJECT";
- case VK_OBJECT_TYPE_DYNAMIC_CB_STATE_OBJECT:
- return "DYNAMIC_CB_STATE_OBJECT";
- case VK_OBJECT_TYPE_INSTANCE:
- return "INSTANCE";
- case VK_OBJECT_TYPE_RENDER_PASS:
- return "RENDER_PASS";
- case VK_OBJECT_TYPE_QUERY_POOL:
- return "QUERY_POOL";
- case VK_OBJECT_TYPE_DESCRIPTOR_POOL:
- return "DESCRIPTOR_POOL";
- case VK_OBJECT_TYPE_DISPLAY_WSI:
- return "DISPLAY_WSI";
- case VK_OBJECT_TYPE_SWAP_CHAIN_WSI:
- return "SWAP_CHAIN_WSI";
- case VK_OBJECT_TYPE_SWAP_CHAIN_IMAGE_WSI:
- return "SWAP_CHAIN_IMAGE_WSI";
- case VK_OBJECT_TYPE_SWAP_CHAIN_MEMORY_WSI:
- return "SWAP_CHAIN_MEMORY_WSI";
- default:
- return "UNKNOWN";
- }
-}
-
-//=============================================================================
-// Helper structure for a GLAVE vulkan snapshot.
-// These can probably be auto-generated at some point.
-//=============================================================================
-
-void glv_vk_malloc_and_copy(void** ppDest, size_t size, const void* pSrc);
-
-typedef struct _GLV_VK_SNAPSHOT_CREATEDEVICE_PARAMS
-{
- VkPhysicalGpu gpu;
- VkDeviceCreateInfo* pCreateInfo;
- VkDevice* pDevice;
-} GLV_VK_SNAPSHOT_CREATEDEVICE_PARAMS;
-
-VkDeviceCreateInfo* glv_deepcopy_xgl_device_create_info(const VkDeviceCreateInfo* pSrcCreateInfo);void glv_deepfree_xgl_device_create_info(VkDeviceCreateInfo* pCreateInfo);
-void glv_vk_snapshot_copy_createdevice_params(GLV_VK_SNAPSHOT_CREATEDEVICE_PARAMS* pDest, VkPhysicalGpu gpu, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice);
-void glv_vk_snapshot_destroy_createdevice_params(GLV_VK_SNAPSHOT_CREATEDEVICE_PARAMS* pSrc);
-
-//=============================================================================
-// Glave Snapshot helper structs
-//=============================================================================
-
-// Node that stores information about an object
-typedef struct _GLV_VK_SNAPSHOT_OBJECT_NODE {
- void* pVkObject;
- VK_OBJECT_TYPE objType;
- uint64_t numUses;
- OBJECT_STATUS status;
- void* pStruct; //< optionally points to a device-specific struct (ie, GLV_VK_SNAPSHOT_DEVICE_NODE)
-} GLV_VK_SNAPSHOT_OBJECT_NODE;
-
-// Node that stores information about an VkDevice
-typedef struct _GLV_VK_SNAPSHOT_DEVICE_NODE {
- // This object
- VkDevice device;
-
- // CreateDevice parameters
- GLV_VK_SNAPSHOT_CREATEDEVICE_PARAMS params;
-
- // Other information a device needs to store.
- // TODO: anything?
-} GLV_VK_SNAPSHOT_DEVICE_NODE;
-
-// Linked-List node that stores information about an object
-// We maintain a "Global" list which links every object and a
-// per-Object list which just links objects of a given type
-// The object node has both pointers so the actual nodes are shared between the two lists
-typedef struct _GLV_VK_SNAPSHOT_LL_NODE {
- struct _GLV_VK_SNAPSHOT_LL_NODE *pNextObj;
- struct _GLV_VK_SNAPSHOT_LL_NODE *pNextGlobal;
- GLV_VK_SNAPSHOT_OBJECT_NODE obj;
-} GLV_VK_SNAPSHOT_LL_NODE;
-
-// Linked-List node to identify an object that has been deleted,
-// but the delta snapshot never saw it get created.
-typedef struct _GLV_VK_SNAPSHOT_DELETED_OBJ_NODE {
- struct _GLV_VK_SNAPSHOT_DELETED_OBJ_NODE* pNextObj;
- void* pVkObject;
- VK_OBJECT_TYPE objType;
-} GLV_VK_SNAPSHOT_DELETED_OBJ_NODE;
-
-//=============================================================================
-// Main structure for a GLAVE vulkan snapshot.
-//=============================================================================
-typedef struct _GLV_VK_SNAPSHOT {
- // Stores a list of all the objects known by this snapshot.
- // This may be used as a shortcut to more easily find objects.
- uint64_t globalObjCount;
- GLV_VK_SNAPSHOT_LL_NODE* pGlobalObjs;
-
- // TEMPORARY: Keep track of all objects of each type
- uint64_t numObjs[VK_NUM_OBJECT_TYPE];
- GLV_VK_SNAPSHOT_LL_NODE *pObjectHead[VK_NUM_OBJECT_TYPE];
-
- // List of created devices and [potentially] hierarchical tree of the objects on it.
- // This is used to represent ownership of the objects
- uint64_t deviceCount;
- GLV_VK_SNAPSHOT_LL_NODE* pDevices;
-
- // This is used to support snapshot deltas.
- uint64_t deltaDeletedObjectCount;
- GLV_VK_SNAPSHOT_DELETED_OBJ_NODE* pDeltaDeletedObjects;
-} GLV_VK_SNAPSHOT;
-
-//=============================================================================
-// prototype for extension functions
-//=============================================================================
-// The snapshot functionality should work similar to a stopwatch.
-// 1) 'StartTracking()' is like starting the stopwatch. This causes the snapshot
-// to start tracking the creation of objects and state. In general, this
-// should happen at the very beginning, to track all objects. During this
-// tracking time, all creations and deletions are tracked on the
-// 'deltaSnapshot'.
-// NOTE: This entrypoint currently does nothing, as tracking is implied
-// by enabling the layer.
-// 2) 'GetDelta()' is analogous to looking at the stopwatch and seeing the
-// current lap time - A copy of the 'deltaSnapshot' will be returned to the
-// caller, but nothings changes within the snapshot layer. All creations
-// and deletions continue to be applied to the 'deltaSnapshot'.
-// NOTE: This will involve a deep copy of the delta, so there may be a
-// performance hit.
-// 3) 'GetSnapshot()' is similar to hitting the 'Lap' button on a stopwatch.
-// The 'deltaSnapshot' is merged into the 'masterSnapshot', the 'deltaSnapshot'
-// is cleared, and the 'masterSnapshot' is returned. All creations and
-// deletions continue to be applied to the 'deltaSnapshot'.
-// NOTE: This will involve a deep copy of the snapshot, so there may be a
-// performance hit.
-// 4) 'PrintDelta()' will cause the delta to be output by the layer's msgCallback.
-// 5) Steps 2, 3, and 4 can happen as often as needed.
-// 6) 'StopTracking()' is like stopping the stopwatch.
-// NOTE: This entrypoint currently does nothing, as tracking is implied
-// by disabling the layer.
-// 7) 'Clear()' will clear the 'deltaSnapshot' and the 'masterSnapshot'.
-//=============================================================================
-
-void glvSnapshotStartTracking(void);
-GLV_VK_SNAPSHOT glvSnapshotGetDelta(void);
-GLV_VK_SNAPSHOT glvSnapshotGetSnapshot(void);
-void glvSnapshotPrintDelta(void);
-void glvSnapshotStopTracking(void);
-void glvSnapshotClear(void);
-
-// utility
-// merge a delta into a snapshot and return the updated snapshot
-GLV_VK_SNAPSHOT glvSnapshotMerge(const GLV_VK_SNAPSHOT * const pDelta, const GLV_VK_SNAPSHOT * const pSnapshot);
-
-uint64_t glvSnapshotGetObjectCount(VK_OBJECT_TYPE type);
-VkResult glvSnapshotGetObjects(VK_OBJECT_TYPE type, uint64_t objCount, GLV_VK_SNAPSHOT_OBJECT_NODE* pObjNodeArray);
-void glvSnapshotPrintObjects(void);
-
-// Func ptr typedefs
-typedef uint64_t (*GLVSNAPSHOT_GET_OBJECT_COUNT)(VK_OBJECT_TYPE);
-typedef VkResult (*GLVSNAPSHOT_GET_OBJECTS)(VK_OBJECT_TYPE, uint64_t, GLV_VK_SNAPSHOT_OBJECT_NODE*);
-typedef void (*GLVSNAPSHOT_PRINT_OBJECTS)(void);
-typedef void (*GLVSNAPSHOT_START_TRACKING)(void);
-typedef GLV_VK_SNAPSHOT (*GLVSNAPSHOT_GET_DELTA)(void);
-typedef GLV_VK_SNAPSHOT (*GLVSNAPSHOT_GET_SNAPSHOT)(void);
-typedef void (*GLVSNAPSHOT_PRINT_DELTA)(void);
-typedef void (*GLVSNAPSHOT_STOP_TRACKING)(void);
-typedef void (*GLVSNAPSHOT_CLEAR)(void);