From a774a3a992b7380d6d38cd9bdc63658261ae672a Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Wed, 6 Jan 2016 14:58:59 -0700 Subject: layers: MR82, merge-related fixes --- layers/draw_state.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/layers/draw_state.cpp b/layers/draw_state.cpp index 8cc5ff02..32458137 100644 --- a/layers/draw_state.cpp +++ b/layers/draw_state.cpp @@ -108,9 +108,9 @@ struct layer_data { unordered_map descriptorSetLayoutMap; unordered_map pipelineLayoutMap; unordered_map memImageMap; - unordered_map fenceMap; - unordered_map queueMap; - unordered_map deviceMap; + unordered_map fenceMap; + unordered_map queueMap; + unordered_map deviceMap; // Map for layout chains unordered_map commandBufferMap; unordered_map frameBufferMap; @@ -1024,7 +1024,6 @@ static uint64_t g_drawCount[NUM_DRAW_TYPES] = {0, 0, 0, 0}; // to that same cmd buffer by separate thread are not changing state from underneath us // Track the last cmd buffer touched by this thread -#define MAX_BINDING 0xFFFFFFFF // Default vtxBinding value in CB Node to identify if no vtxBinding set // prototype static GLOBAL_CB_NODE* getCBNode(layer_data*, const VkCommandBuffer); @@ -2818,7 +2817,7 @@ static void createDeviceRegisterExtensions(const VkDeviceCreateInfo* pCreateInfo pDisp->DestroySwapchainKHR = (PFN_vkDestroySwapchainKHR) gpa(device, "vkDestroySwapchainKHR"); pDisp->GetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR) gpa(device, "vkGetSwapchainImagesKHR"); pDisp->AcquireNextImageKHR = (PFN_vkAcquireNextImageKHR) gpa(device, "vkAcquireNextImageKHR"); - pDisp->QueuePresentKHR = (PFN_vkQueuePresentKHR) gpa(device, "vkQueuePresentKHR"); + pDisp->QueuePresentKHR = (PFN_vkQueuePresentKHR) gpa(device, "vkQueuePresentKHR"); for (i = 0; i < pCreateInfo->enabledExtensionNameCount; i++) { if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) { @@ -3013,13 +3012,14 @@ void decrementResources(layer_data* my_data, uint32_t fenceCount, const VkFence* } } } - + void decrementResources(layer_data* my_data, VkQueue queue) { auto queue_data = my_data->queueMap.find(queue); if (queue_data != my_data->queueMap.end()) { for (auto cmdBuffer : queue_data->second.untrackedCmdBuffers) { decrementResources(my_data, cmdBuffer); } + queue_data->second.untrackedCmdBuffers.clear(); decrementResources(my_data, 1, &queue_data->second.priorFence); } } @@ -4229,13 +4229,13 @@ VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(VkCommandBuffer dev_data->device_dispatch_table->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType); } -void updateResourceTracking(GLOBAL_CB_NODE* pCB, uint32_t startBinding, uint32_t bindingCount, const VkBuffer* pBuffers) { - uint32_t end = startBinding + bindingCount; +void updateResourceTracking(GLOBAL_CB_NODE* pCB, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers) { + uint32_t end = firstBinding + bindingCount; if (pCB->currentDrawData.buffers.size() < end) { pCB->currentDrawData.buffers.resize(end); } for (uint32_t i = 0; i < bindingCount; ++i) { - pCB->currentDrawData.buffers[i + startBinding] = pBuffers[i]; + pCB->currentDrawData.buffers[i + firstBinding] = pBuffers[i]; } } @@ -4255,8 +4255,8 @@ VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers( GLOBAL_CB_NODE* pCB = getCBNode(dev_data, commandBuffer); if (pCB) { addCmd(dev_data, pCB, CMD_BINDVERTEXBUFFER, "vkCmdBindVertexBuffer()"); - pCB->lastVtxBinding = startBinding + bindingCount -1; - updateResourceTracking(pCB, startBinding, bindingCount, pBuffers); + pCB->lastVtxBinding = firstBinding + bindingCount - 1; + updateResourceTracking(pCB, firstBinding, bindingCount, pBuffers); } else { skipCall |= report_error_no_cb_begin(dev_data, commandBuffer, "vkCmdBindVertexBuffer()"); } @@ -5776,6 +5776,10 @@ VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkD return (PFN_vkVoidFunction) vkWaitForFences; if (!strcmp(funcName, "vkGetFenceStatus")) return (PFN_vkVoidFunction) vkGetFenceStatus; + if (!strcmp(funcName, "vkQueueWaitIdle")) + return (PFN_vkVoidFunction) vkQueueWaitIdle; + if (!strcmp(funcName, "vkDeviceWaitIdle")) + return (PFN_vkVoidFunction) vkDeviceWaitIdle; if (!strcmp(funcName, "vkGetDeviceQueue")) return (PFN_vkVoidFunction) vkGetDeviceQueue; if (!strcmp(funcName, "vkDestroyInstance")) -- cgit v1.2.3