diff options
| author | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-05-01 17:56:13 -0600 |
|---|---|---|
| committer | Courtney Goeltzenleuchter <courtney@LunarG.com> | 2015-05-04 17:32:41 -0600 |
| commit | 5446669fdb7655f5cf7c97b1d5e0de3ae2a9e2de (patch) | |
| tree | 2628730bec26dc7c3dad0633d7ae84cd37eb4cb7 | |
| parent | 2bda8330c5bf332db9b0560ea358af6564116de7 (diff) | |
| download | usermoji-5446669fdb7655f5cf7c97b1d5e0de3ae2a9e2de.tar.xz | |
bug 13854: Remove memory references
header: 0.93.0
svn: 30980
| -rw-r--r-- | demos/cube.c | 27 | ||||
| -rw-r--r-- | demos/tri.c | 27 | ||||
| -rw-r--r-- | demos/vulkaninfo.c | 2 | ||||
| -rw-r--r-- | icd/nulldrv/nulldrv.c | 19 | ||||
| -rw-r--r-- | include/vkLayer.h | 2 | ||||
| -rw-r--r-- | include/vulkan.h | 36 | ||||
| -rw-r--r-- | layers/mem_tracker.cpp | 150 | ||||
| -rw-r--r-- | layers/param_checker.cpp | 11 | ||||
| -rwxr-xr-x | vk-layer-generate.py | 2 | ||||
| -rwxr-xr-x | vulkan.py | 10 |
10 files changed, 12 insertions, 274 deletions
diff --git a/demos/cube.c b/demos/cube.c index faa9fa17..e9ea5923 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -370,20 +370,6 @@ static void demo_flush_init_cmd(struct demo *demo) demo->cmd = VK_NULL_HANDLE; } -static void demo_add_mem_refs( - struct demo *demo, - int num_refs, VkDeviceMemory *mem) -{ - vkQueueAddMemReferences(demo->queue, num_refs, mem); -} - -static void demo_remove_mem_refs( - struct demo *demo, - int num_refs, VkDeviceMemory *mem) -{ - vkQueueRemoveMemReferences(demo->queue, num_refs, mem); -} - static void demo_set_image_layout( struct demo *demo, VkImage image, @@ -633,8 +619,6 @@ static void demo_prepare_buffers(struct demo *demo) demo->buffers[i].image = images[i].image; demo->buffers[i].mem = images[i].memory; - demo_add_mem_refs(demo, 1, &demo->buffers[i].mem); - demo_set_image_layout(demo, demo->buffers[i].image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); @@ -725,8 +709,6 @@ static void demo_prepare_depth(struct demo *demo) VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); - demo_add_mem_refs(demo, demo->depth.num_mem, demo->depth.mem); - /* create image view */ view.image = demo->depth.image; err = vkCreateDepthStencilView(demo->device, &view, @@ -1070,16 +1052,12 @@ static void demo_prepare_textures(struct demo *demo) demo->textures[i].image, VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL, 1, ©_region); - demo_add_mem_refs(demo, staging_texture.num_mem, staging_texture.mem); - demo_add_mem_refs(demo, demo->textures[i].num_mem, demo->textures[i].mem); - demo_set_image_layout(demo, demo->textures[i].image, VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL, demo->textures[i].imageLayout); demo_flush_init_cmd(demo); - demo_remove_mem_refs(demo, staging_texture.num_mem, staging_texture.mem); demo_destroy_texture_image(demo, &staging_texture); } else { /* Can't support VK_FORMAT_B8G8R8A8_UNORM !? */ @@ -1206,7 +1184,6 @@ void demo_prepare_cube_data_buffer(struct demo *demo) i, demo->uniform_data.mem[i], 0); assert(!err); } - demo_add_mem_refs(demo, demo->uniform_data.num_mem, demo->uniform_data.mem); memset(&view_info, 0, sizeof(view_info)); view_info.sType = VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO; @@ -2076,7 +2053,6 @@ static void demo_cleanup(struct demo *demo) vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE_VIEW, demo->textures[i].view); vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image, 0, VK_NULL_HANDLE, 0); vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image); - demo_remove_mem_refs(demo, demo->textures[i].num_mem, demo->textures[i].mem); for (j = 0; j < demo->textures[i].num_mem; j++) vkFreeMemory(demo->device, demo->textures[i].mem[j]); free(demo->textures[i].mem); @@ -2086,7 +2062,6 @@ static void demo_cleanup(struct demo *demo) vkDestroyObject(demo->device, VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW, demo->depth.view); vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_IMAGE, demo->depth.image, 0, VK_NULL_HANDLE, 0); - demo_remove_mem_refs(demo, demo->depth.num_mem, demo->depth.mem); vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, demo->depth.image); for (j = 0; j < demo->depth.num_mem; j++) { vkFreeMemory(demo->device, demo->depth.mem[j]); @@ -2095,14 +2070,12 @@ static void demo_cleanup(struct demo *demo) vkDestroyObject(demo->device, VK_OBJECT_TYPE_BUFFER_VIEW, demo->uniform_data.view); vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf, 0, VK_NULL_HANDLE, 0); vkDestroyObject(demo->device, VK_OBJECT_TYPE_BUFFER, demo->uniform_data.buf); - demo_remove_mem_refs(demo, demo->uniform_data.num_mem, demo->uniform_data.mem); for (j = 0; j < demo->uniform_data.num_mem; j++) vkFreeMemory(demo->device, demo->uniform_data.mem[j]); for (i = 0; i < DEMO_BUFFER_COUNT; i++) { vkDestroyObject(demo->device, VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW, demo->buffers[i].view); vkDestroyObject(demo->device, VK_OBJECT_TYPE_COMMAND_BUFFER, demo->buffers[i].cmd); - demo_remove_mem_refs(demo, 1, &demo->buffers[i].mem); } vkDestroyDevice(demo->device); diff --git a/demos/tri.c b/demos/tri.c index 3990e696..58d19a24 100644 --- a/demos/tri.c +++ b/demos/tri.c @@ -187,20 +187,6 @@ static void demo_flush_init_cmd(struct demo *demo) demo->setup_cmd = VK_NULL_HANDLE; } -static void demo_add_mem_refs( - struct demo *demo, - int num_refs, VkDeviceMemory *mem) -{ - vkQueueAddMemReferences(demo->queue, num_refs, mem); -} - -static void demo_remove_mem_refs( - struct demo *demo, - int num_refs, VkDeviceMemory *mem) -{ - vkQueueRemoveMemReferences(demo->queue, num_refs, mem); -} - static void demo_set_image_layout( struct demo *demo, VkImage image, @@ -429,7 +415,6 @@ static void demo_prepare_buffers(struct demo *demo) demo->buffers[i].image = images[i].image; demo->buffers[i].mem = images[i].memory; - demo_add_mem_refs(demo, 1, &demo->buffers[i].mem); demo_set_image_layout(demo, demo->buffers[i].image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); @@ -522,8 +507,6 @@ static void demo_prepare_depth(struct demo *demo) VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); - demo_add_mem_refs(demo, demo->depth.num_mem, demo->depth.mem); - /* create image view */ view.image = demo->depth.image; err = vkCreateDepthStencilView(demo->device, &view, @@ -712,16 +695,12 @@ static void demo_prepare_textures(struct demo *demo) demo->textures[i].image, VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL, 1, ©_region); - demo_add_mem_refs(demo, staging_texture.num_mem, staging_texture.mem); - demo_add_mem_refs(demo, demo->textures[i].num_mem, demo->textures[i].mem); - demo_set_image_layout(demo, demo->textures[i].image, VK_IMAGE_LAYOUT_TRANSFER_DESTINATION_OPTIMAL, demo->textures[i].imageLayout); demo_flush_init_cmd(demo); - demo_remove_mem_refs(demo, staging_texture.num_mem, staging_texture.mem); demo_destroy_texture_image(demo, &staging_texture); } else { /* Can't support VK_FORMAT_B8G8R8A8_UNORM !? */ @@ -838,8 +817,6 @@ static void demo_prepare_vertices(struct demo *demo) assert(!err); } - demo_add_mem_refs(demo, demo->vertices.num_mem, demo->vertices.mem); - demo->vertices.vi.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_CREATE_INFO; demo->vertices.vi.pNext = NULL; demo->vertices.vi.bindingCount = 1; @@ -1574,7 +1551,6 @@ static void demo_cleanup(struct demo *demo) vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_BUFFER, demo->vertices.buf, 0, VK_NULL_HANDLE, 0); vkDestroyObject(demo->device, VK_OBJECT_TYPE_BUFFER, demo->vertices.buf); - demo_remove_mem_refs(demo, demo->vertices.num_mem, demo->vertices.mem); for (j = 0; j < demo->vertices.num_mem; j++) vkFreeMemory(demo->device, demo->vertices.mem[j]); @@ -1582,7 +1558,6 @@ static void demo_cleanup(struct demo *demo) vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE_VIEW, demo->textures[i].view); vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image, 0, VK_NULL_HANDLE, 0); vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, demo->textures[i].image); - demo_remove_mem_refs(demo, demo->textures[i].num_mem, demo->textures[i].mem); for (j = 0; j < demo->textures[i].num_mem; j++) vkFreeMemory(demo->device, demo->textures[i].mem[j]); free(demo->textures[i].mem); @@ -1591,7 +1566,6 @@ static void demo_cleanup(struct demo *demo) vkDestroyObject(demo->device, VK_OBJECT_TYPE_DEPTH_STENCIL_VIEW, demo->depth.view); vkQueueBindObjectMemory(demo->queue, VK_OBJECT_TYPE_IMAGE, demo->depth.image, 0, VK_NULL_HANDLE, 0); - demo_remove_mem_refs(demo, demo->depth.num_mem, demo->depth.mem); vkDestroyObject(demo->device, VK_OBJECT_TYPE_IMAGE, demo->depth.image); for (j = 0; j < demo->depth.num_mem; j++) { vkFreeMemory(demo->device, demo->depth.mem[j]); @@ -1599,7 +1573,6 @@ static void demo_cleanup(struct demo *demo) for (i = 0; i < DEMO_BUFFER_COUNT; i++) { vkDestroyObject(demo->device, VK_OBJECT_TYPE_COLOR_ATTACHMENT_VIEW, demo->buffers[i].view); - demo_remove_mem_refs(demo, 1, &demo->buffers[i].mem); } vkDestroySwapChainWSI(demo->swap_chain); diff --git a/demos/vulkaninfo.c b/demos/vulkaninfo.c index 89dedadc..69a85f9d 100644 --- a/demos/vulkaninfo.c +++ b/demos/vulkaninfo.c @@ -136,7 +136,6 @@ static const char *vk_result_string(VkResult err) STR(VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION); STR(VK_ERROR_BAD_SHADER_CODE); STR(VK_ERROR_BAD_PIPELINE_DATA); - STR(VK_ERROR_TOO_MANY_MEMORY_REFERENCES); STR(VK_ERROR_NOT_MAPPABLE); STR(VK_ERROR_MEMORY_MAP_FAILED); STR(VK_ERROR_MEMORY_UNMAP_FAILED); @@ -652,7 +651,6 @@ static void app_gpu_dump_queue_props(const struct app_gpu *gpu, uint32_t id) printf("\tqueueCount = %u\n", props->queueCount); printf("\tmaxAtomicCounters = %u\n", props->maxAtomicCounters); printf("\tsupportsTimestamps = %u\n", props->supportsTimestamps); - printf("\tmaxMemReferences = %u\n", props->maxMemReferences); } static void app_gpu_dump_memory_props(const struct app_gpu *gpu) diff --git a/icd/nulldrv/nulldrv.c b/icd/nulldrv/nulldrv.c index 69c26c22..b7e42dd0 100644 --- a/icd/nulldrv/nulldrv.c +++ b/icd/nulldrv/nulldrv.c @@ -1531,7 +1531,6 @@ ICD_EXPORT VkResult VKAPI vkGetPhysicalDeviceInfo( props->queueCount = 1; props->maxAtomicCounters = 1; props->supportsTimestamps = false; - props->maxMemReferences = 1; break; } default: @@ -2014,24 +2013,6 @@ ICD_EXPORT VkResult VKAPI vkGetQueryPoolResults( return VK_SUCCESS; } -ICD_EXPORT VkResult VKAPI vkQueueAddMemReferences( - VkQueue queue, - uint32_t count, - const VkDeviceMemory* pMems) -{ - NULLDRV_LOG_FUNC; - return VK_SUCCESS; -} - -ICD_EXPORT VkResult VKAPI vkQueueRemoveMemReferences( - VkQueue queue, - uint32_t count, - const VkDeviceMemory* pMems) -{ - NULLDRV_LOG_FUNC; - return VK_SUCCESS; -} - ICD_EXPORT VkResult VKAPI vkQueueWaitIdle( VkQueue queue_) { diff --git a/include/vkLayer.h b/include/vkLayer.h index 0b629b80..e95811b8 100644 --- a/include/vkLayer.h +++ b/include/vkLayer.h @@ -37,8 +37,6 @@ typedef struct VkLayerDispatchTable_ PFN_vkEnumerateLayers EnumerateLayers; PFN_vkGetDeviceQueue GetDeviceQueue; PFN_vkQueueSubmit QueueSubmit; - PFN_vkQueueAddMemReferences QueueAddMemReferences; - PFN_vkQueueRemoveMemReferences QueueRemoveMemReferences; PFN_vkQueueWaitIdle QueueWaitIdle; PFN_vkDeviceWaitIdle DeviceWaitIdle; PFN_vkAllocMemory AllocMemory; diff --git a/include/vulkan.h b/include/vulkan.h index f4ac9357..00ebbf51 100644 --- a/include/vulkan.h +++ b/include/vulkan.h @@ -33,7 +33,7 @@ #include "vk_platform.h" // Vulkan API version supported by this file -#define VK_API_VERSION VK_MAKE_VERSION(0, 92, 0) +#define VK_API_VERSION VK_MAKE_VERSION(0, 93, 0) #ifdef __cplusplus extern "C" @@ -938,17 +938,16 @@ typedef enum VkResult_ VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION = -(0x00000015), VK_ERROR_BAD_SHADER_CODE = -(0x00000016), VK_ERROR_BAD_PIPELINE_DATA = -(0x00000017), - VK_ERROR_TOO_MANY_MEMORY_REFERENCES = -(0x00000018), - VK_ERROR_NOT_MAPPABLE = -(0x00000019), - VK_ERROR_MEMORY_MAP_FAILED = -(0x0000001A), - VK_ERROR_MEMORY_UNMAP_FAILED = -(0x0000001B), - VK_ERROR_INCOMPATIBLE_DEVICE = -(0x0000001C), - VK_ERROR_INCOMPATIBLE_DRIVER = -(0x0000001D), - VK_ERROR_INCOMPLETE_COMMAND_BUFFER = -(0x0000001E), - VK_ERROR_BUILDING_COMMAND_BUFFER = -(0x0000001F), - VK_ERROR_MEMORY_NOT_BOUND = -(0x00000020), - VK_ERROR_INCOMPATIBLE_QUEUE = -(0x00000021), - VK_ERROR_NOT_SHAREABLE = -(0x00000022), + VK_ERROR_NOT_MAPPABLE = -(0x00000018), + VK_ERROR_MEMORY_MAP_FAILED = -(0x00000019), + VK_ERROR_MEMORY_UNMAP_FAILED = -(0x0000001A), + VK_ERROR_INCOMPATIBLE_DEVICE = -(0x0000001B), + VK_ERROR_INCOMPATIBLE_DRIVER = -(0x0000001C), + VK_ERROR_INCOMPLETE_COMMAND_BUFFER = -(0x0000001D), + VK_ERROR_BUILDING_COMMAND_BUFFER = -(0x0000001E), + VK_ERROR_MEMORY_NOT_BOUND = -(0x0000001F), + VK_ERROR_INCOMPATIBLE_QUEUE = -(0x00000020), + VK_ERROR_NOT_SHAREABLE = -(0x00000021), VK_MAX_ENUM(RESULT) } VkResult; @@ -1368,7 +1367,6 @@ typedef struct VkPhysicalDeviceQueueProperties_ uint32_t queueCount; uint32_t maxAtomicCounters; bool32_t supportsTimestamps; - uint32_t maxMemReferences; // Tells how many memory references can be active for the given queue } VkPhysicalDeviceQueueProperties; typedef struct VkPhysicalDeviceMemoryProperties_ @@ -2146,8 +2144,6 @@ typedef VkResult (VKAPI *PFN_vkGetPhysicalDeviceExtensionInfo)(VkPhysicalDevice typedef VkResult (VKAPI *PFN_vkEnumerateLayers)(VkPhysicalDevice physicalDevice, size_t maxStringSize, size_t* pLayerCount, char* const* pOutLayers, void* pReserved); typedef VkResult (VKAPI *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue); typedef VkResult (VKAPI *PFN_vkQueueSubmit)(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence); -typedef VkResult (VKAPI *PFN_vkQueueAddMemReferences)(VkQueue queue, uint32_t count, const VkDeviceMemory* pMems); -typedef VkResult (VKAPI *PFN_vkQueueRemoveMemReferences)(VkQueue queue, uint32_t count, const VkDeviceMemory* pMems); typedef VkResult (VKAPI *PFN_vkQueueWaitIdle)(VkQueue queue); typedef VkResult (VKAPI *PFN_vkDeviceWaitIdle)(VkDevice device); typedef VkResult (VKAPI *PFN_vkAllocMemory)(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem); @@ -2327,16 +2323,6 @@ VkResult VKAPI vkQueueSubmit( const VkCmdBuffer* pCmdBuffers, VkFence fence); -VkResult VKAPI vkQueueAddMemReferences( - VkQueue queue, - uint32_t count, - const VkDeviceMemory* pMems); - -VkResult VKAPI vkQueueRemoveMemReferences( - VkQueue queue, - uint32_t count, - const VkDeviceMemory* pMems); - VkResult VKAPI vkQueueWaitIdle( VkQueue queue); diff --git a/layers/mem_tracker.cpp b/layers/mem_tracker.cpp index 27f69245..d8a1df80 100644 --- a/layers/mem_tracker.cpp +++ b/layers/mem_tracker.cpp @@ -306,84 +306,6 @@ static void retireDeviceFences( } } -// Returns True if a memory reference is present in a Queue's memory reference list -// Queue is validated by caller -static bool32_t checkMemRef( - VkQueue queue, - VkDeviceMemory mem) -{ - bool32_t result = VK_FALSE; - list<VkDeviceMemory>::iterator it; - MT_QUEUE_INFO *pQueueInfo = queueMap[queue]; - if (pQueueInfo->pMemRefList.size() <= 0) - return result; - for (it = pQueueInfo->pMemRefList.begin(); it != pQueueInfo->pMemRefList.end(); ++it) { - if ((*it) == mem) { - result = VK_TRUE; - break; - } - } - return result; -} - -static bool32_t validateQueueMemRefs( - VkQueue queue, - uint32_t cmdBufferCount, - const VkCmdBuffer *pCmdBuffers) -{ - bool32_t result = VK_TRUE; - - // Verify Queue - MT_QUEUE_INFO *pQueueInfo = queueMap[queue]; - if (pQueueInfo == NULL) { - char str[1024]; - sprintf(str, "Unknown Queue %p specified in vkQueueSubmit", queue); - layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, queue, 0, MEMTRACK_INVALID_QUEUE, "MEM", str); - } - else { - // Iterate through all CBs in pCmdBuffers - for (uint32_t i = 0; i < cmdBufferCount; i++) { - MT_CB_INFO* pCBInfo = getCBInfo(pCmdBuffers[i]); - if (!pCBInfo) { - char str[1024]; - sprintf(str, "Unable to find info for CB %p in order to check memory references in " - "vkQueueSubmit for queue %p", - (void*)pCmdBuffers[i], queue); - layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, pCmdBuffers[i], 0, MEMTRACK_INVALID_CB, "MEM", str); - result = VK_FALSE; - } else { - // Validate that all actual references are accounted for in pMemRefs - if (pCBInfo->pMemObjList.size() > 0) { - for (list<VkDeviceMemory>::iterator it = pCBInfo->pMemObjList.begin(); it != pCBInfo->pMemObjList.end(); ++it) { - // Search for each memref in queues memreflist. - if (checkMemRef(queue, *it)) { - char str[1024]; - sprintf(str, "Found Mem Obj %p binding to CB %p for queue %p", (*it), pCmdBuffers[i], queue); - layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, pCmdBuffers[i], 0, MEMTRACK_NONE, "MEM", str); - } - else { - char str[1024]; - sprintf(str, "Queue %p Memory reference list for Command Buffer %p is missing ref to mem obj %p", - queue, pCmdBuffers[i], (*it)); - layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, pCmdBuffers[i], 0, MEMTRACK_INVALID_MEM_REF, "MEM", str); - result = VK_FALSE; - } - } - } - } - } - if (result == VK_TRUE) { - char str[1024]; - sprintf(str, "Verified all memory dependencies for Queue %p are included in pMemRefs list", queue); - layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, queue, 0, MEMTRACK_NONE, "MEM", str); - // TODO : Could report mem refs in pMemRefs that AREN'T in mem list, that would be primarily informational - // Currently just noting that there is a difference - } - } - - return result; -} - // Return ptr to info in map container containing mem, or NULL if not found // Calls to this function should be wrapped in mutex static MT_MEM_OBJ_INFO* getMemObjInfo( @@ -1087,72 +1009,6 @@ VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue( return result; } -VK_LAYER_EXPORT VkResult VKAPI vkQueueAddMemReferences( - VkQueue queue, - uint32_t count, - const VkDeviceMemory *pMems) -{ - VkResult result = nextTable.QueueAddMemReferences(queue, count, pMems); - if (result == VK_SUCCESS) { - loader_platform_thread_lock_mutex(&globalLock); - - MT_QUEUE_INFO *pQueueInfo = queueMap[queue]; - if (pQueueInfo == NULL) { - char str[1024]; - sprintf(str, "Unknown Queue %p", queue); - layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, queue, 0, MEMTRACK_INVALID_QUEUE, "MEM", str); - } else { - for (uint32_t i = 0; i < count; i++) { - if (checkMemRef(queue, pMems[i]) == VK_TRUE) { - // Alread in list, just warn - char str[1024]; - sprintf(str, "Request to add a memory reference (%p) to Queue %p -- ref is already " - "present in the queue's reference list", pMems[i], queue); - layerCbMsg(VK_DBG_MSG_WARNING, VK_VALIDATION_LEVEL_0, pMems[i], 0, MEMTRACK_INVALID_MEM_REF, "MEM", str); - } else { - // Add to queue's memory reference list - pQueueInfo->pMemRefList.push_front(pMems[i]); - } - } - } - loader_platform_thread_unlock_mutex(&globalLock); - } - return result; -} - -VK_LAYER_EXPORT VkResult VKAPI vkQueueRemoveMemReferences( - VkQueue queue, - uint32_t count, - const VkDeviceMemory *pMems) -{ - // TODO : Decrement ref count for this memory reference on this queue. Remove if ref count is zero. - VkResult result = nextTable.QueueRemoveMemReferences(queue, count, pMems); - if (result == VK_SUCCESS) { - loader_platform_thread_lock_mutex(&globalLock); - - MT_QUEUE_INFO *pQueueInfo = queueMap[queue]; - if (pQueueInfo == NULL) { - char str[1024]; - sprintf(str, "Unknown Queue %p", queue); - layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, queue, 0, MEMTRACK_INVALID_QUEUE, "MEM", str); - } else { - for (uint32_t i = 0; i < count; i++) { - if (pQueueInfo->pMemRefList.size() > 0) { - for (list<VkDeviceMemory>::iterator it = pQueueInfo->pMemRefList.begin(); it != pQueueInfo->pMemRefList.end();) { - if ((*it) == pMems[i]) { - it = pQueueInfo->pMemRefList.erase(it); - } else { - ++it; - } - } - } - } - } - loader_platform_thread_unlock_mutex(&globalLock); - } - return result; -} - VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit( VkQueue queue, uint32_t cmdBufferCount, @@ -1171,8 +1027,6 @@ VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit( pCBInfo->fenceId = fenceId; } - validateQueueMemRefs(queue, cmdBufferCount, pCmdBuffers); - loader_platform_thread_unlock_mutex(&globalLock); VkResult result = nextTable.QueueSubmit(queue, cmdBufferCount, pCmdBuffers, getFenceFromId(fenceId)); return result; @@ -2522,10 +2376,6 @@ VK_LAYER_EXPORT void* VKAPI vkGetProcAddr( return (void*) vkDbgUnregisterMsgCallback; if (!strcmp(funcName, "vkGetDeviceQueue")) return (void*) vkGetDeviceQueue; - if (!strcmp(funcName, "vkQueueAddMemReferences")) - return (void*) vkQueueAddMemReferences; - if (!strcmp(funcName, "vkQueueRemoveMemReferences")) - return (void*) vkQueueRemoveMemReferences; if (!strcmp(funcName, "vkCreateSwapChainWSI")) return (void*) vkCreateSwapChainWSI; if (!strcmp(funcName, "vkDestroySwapChainWSI")) diff --git a/layers/param_checker.cpp b/layers/param_checker.cpp index 01328bf1..50f61571 100644 --- a/layers/param_checker.cpp +++ b/layers/param_checker.cpp @@ -342,17 +342,6 @@ VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCo return result; } -VK_LAYER_EXPORT VkResult VKAPI vkQueueAddMemReferences(VkQueue queue, uint32_t count, const VkDeviceMemory* pMems) -{ - VkResult result = nextTable.QueueAddMemReferences(queue, count, pMems); - return result; -} - -VK_LAYER_EXPORT VkResult VKAPI vkQueueRemoveMemReferences(VkQueue queue, uint32_t count, const VkDeviceMemory* pMems) -{ - VkResult result = nextTable.QueueRemoveMemReferences(queue, count, pMems); - return result; -} VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue) { diff --git a/vk-layer-generate.py b/vk-layer-generate.py index 326a47e5..0ab2ed8b 100755 --- a/vk-layer-generate.py +++ b/vk-layer-generate.py @@ -1157,7 +1157,7 @@ class ObjectTrackerSubcommand(Subcommand): destroy_line = '' funcs = [] # Special cases for API funcs that don't use an object as first arg - if True in [no_use_proto in proto.name for no_use_proto in ['GlobalOption', 'GetPhysicalDeviceInfo', 'CreateInstance', 'QueueSubmit', 'QueueAddMemReferences', 'QueueRemoveMemReferences', 'QueueWaitIdle', 'QueueBindObjectMemory', 'QueueBindObjectMemoryRange', 'QueueBindImageMemoryRange', 'QueuePresentWSI', 'GetGlobalExtensionInfo', 'CreateDevice', 'GetGpuInfo', 'QueueSignalSemaphore', 'QueueWaitSemaphore']]: + if True in [no_use_proto in proto.name for no_use_proto in ['GlobalOption', 'GetPhysicalDeviceInfo', 'CreateInstance', 'QueueSubmit', 'QueueWaitIdle', 'QueueBindObjectMemory', 'QueueBindObjectMemoryRange', 'QueueBindImageMemoryRange', 'QueuePresentWSI', 'GetGlobalExtensionInfo', 'CreateDevice', 'GetGpuInfo', 'QueueSignalSemaphore', 'QueueWaitSemaphore']]: using_line = '' else: using_line = ' loader_platform_thread_lock_mutex(&objLock);\n' @@ -279,16 +279,6 @@ core = Extension( Param("const VkCmdBuffer*", "pCmdBuffers"), Param("VkFence", "fence")]), - Proto("VkResult", "QueueAddMemReferences", - [Param("VkQueue", "queue"), - Param("uint32_t", "count"), - Param("const VkDeviceMemory*", "pMems")]), - - Proto("VkResult", "QueueRemoveMemReferences", - [Param("VkQueue", "queue"), - Param("uint32_t", "count"), - Param("const VkDeviceMemory*", "pMems")]), - Proto("VkResult", "QueueWaitIdle", [Param("VkQueue", "queue")]), |
