From eadf998a558e2098f2fb2d04a6b7aba54a2f1f06 Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Thu, 2 Jul 2015 16:49:40 -0600 Subject: vulkan.h: V115 -- Reintroduce memory heaps & types. Bug #14082. Reworked memory properties and types and added support for multiple heaps. --- layers/mem_tracker.cpp | 27 ++++++++++++++++++++++----- layers/param_checker.cpp | 18 ------------------ 2 files changed, 22 insertions(+), 23 deletions(-) (limited to 'layers') diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index 789899ab..6b5ead3a 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -58,6 +58,7 @@ static std::unordered_map deviceExtMap; static std::unordered_map layer_data_map; static device_table_map mem_tracker_device_table_map; static instance_table_map mem_tracker_instance_table_map; +static VkPhysicalDeviceMemoryProperties memProps; // TODO : This can be much smarter, using separate locks for separate global data static int globalLockInitialized = 0; @@ -828,6 +829,9 @@ static void init_mem_tracker( loader_platform_thread_create_mutex(&globalLock); globalLockInitialized = 1; } + + // Zero out memory property data + memset(&memProps, 0, sizeof(VkPhysicalDeviceMemoryProperties)); } // hook DestroyInstance to remove tableInstanceMap entry @@ -947,10 +951,20 @@ VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice( return result; } -struct extProps { - uint32_t version; - const char * const name; -}; +VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties( + VkPhysicalDevice physicalDevice, + VkPhysicalDeviceMemoryProperties *pMemoryProperties) +{ + VkLayerInstanceDispatchTable *pInstanceTable = get_dispatch_table(mem_tracker_instance_table_map, physicalDevice); + VkResult result = pInstanceTable->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties); + if (result == VK_SUCCESS) { + // copy mem props to local var... + memcpy(&memProps, pMemoryProperties, sizeof(VkPhysicalDeviceMemoryProperties)); + } + return result; +} + + #define MEM_TRACKER_LAYER_EXT_ARRAY_SIZE 2 static const VkExtensionProperties mtExts[MEM_TRACKER_LAYER_EXT_ARRAY_SIZE] = { { @@ -1113,7 +1127,8 @@ VK_LAYER_EXPORT VkResult VKAPI vkMapMemory( // TODO : Track when memory is mapped loader_platform_thread_lock_mutex(&globalLock); MT_MEM_OBJ_INFO *pMemObj = get_mem_obj_info(mem); - if ((pMemObj->allocInfo.memProps & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0) { + if ((memProps.memoryTypes[pMemObj->allocInfo.memoryTypeIndex].propertyFlags & + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0) { log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, VK_OBJECT_TYPE_DEVICE_MEMORY, mem, 0, MEMTRACK_INVALID_STATE, "MEM", "Mapping Memory without VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT set: mem obj %p", (void*)mem); } @@ -2306,6 +2321,8 @@ VK_LAYER_EXPORT void* VKAPI vkGetInstanceProcAddr( return (void *) vkDestroyInstance; if (!strcmp(funcName, "vkCreateInstance")) return (void*) vkCreateInstance; + if (!strcmp(funcName, "vkGetPhysicalDeviceMemoryProperties")) + return (void*) vkGetPhysicalDeviceMemoryProperties; if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionCount")) return (void*) vkGetGlobalExtensionCount; if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties")) diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index 8fa33ceb..f77bd47d 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -2346,12 +2346,6 @@ void PreAllocMemory( "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is unrecognized enumerator"); return; } - if(!ValidateEnumerator((VkMemoryPropertyFlagBits)pAllocInfo->memProps)) - { - std::string reason = "vkAllocMemory parameter, VkMemoryPropertyFlags pAllocInfo->memProps, is " + EnumeratorString((VkMemoryPropertyFlagBits)pAllocInfo->memProps); - log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); - return; - } } void PostAllocMemory( @@ -2878,18 +2872,6 @@ void PostGetObjectMemoryRequirements( "vkGetObjectMemoryRequirements parameter, VkMemoryRequirements* pMemoryRequirements, is null pointer"); return; } - if(!ValidateEnumerator((VkMemoryPropertyFlagBits)pMemoryRequirements->memPropsAllowed)) - { - std::string reason = "vkGetObjectMemoryRequirements parameter, VkMemoryPropertyFlags pMemoryRequirements->memPropsAllowed, is " + EnumeratorString((VkMemoryPropertyFlagBits)pMemoryRequirements->memPropsAllowed); - log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); - return; - } - if(!ValidateEnumerator((VkMemoryPropertyFlagBits)pMemoryRequirements->memPropsRequired)) - { - std::string reason = "vkGetObjectMemoryRequirements parameter, VkMemoryPropertyFlags pMemoryRequirements->memPropsRequired, is " + EnumeratorString((VkMemoryPropertyFlagBits)pMemoryRequirements->memPropsRequired); - log_msg(mdd(device), VK_DBG_REPORT_WARN_BIT, (VkObjectType)0, NULL, 0, 1, "PARAMCHECK", reason.c_str()); - return; - } if(result != VK_SUCCESS) { -- cgit v1.2.3