From: Tobin Ehlis Date: Thu, 12 May 2016 22:57:14 +0000 (-0600) Subject: layers: Clean up old mem_tracker merge remnants X-Git-Tag: upstream/1.1.92~3049 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=efe84c0bb65299f03ac0cbb09b34c1119ea135e1;p=platform%2Fupstream%2FVulkan-Tools.git layers: Clean up old mem_tracker merge remnants Clean up most of the remaining MTMERGESOURCE defines. Many of these come straight out. A number of copy functions were able to merge some code to provide a slight efficiency gain. --- diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index 4720d25..0274a2a 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -245,8 +245,7 @@ struct shader_module { // TODO : This can be much smarter, using separate locks for separate global data static std::mutex global_lock; -#if MTMERGESOURCE -// MTMERGESOURCE - start of direct pull + static VkDeviceMemory *get_object_mem_binding(layer_data *my_data, uint64_t handle, VkDebugReportObjectTypeEXT type) { switch (type) { case VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT: { @@ -266,13 +265,10 @@ static VkDeviceMemory *get_object_mem_binding(layer_data *my_data, uint64_t hand } return nullptr; } -// MTMERGESOURCE - end section -#endif // prototype static GLOBAL_CB_NODE *getCBNode(layer_data const *, const VkCommandBuffer); -#if MTMERGESOURCE // Helper function to validate correct usage bits set for buffers or images // Verify that (actual & desired) flags != 0 or, // if strict is true, verify that (actual & desired) flags == desired @@ -736,8 +732,6 @@ static void printCBList(layer_data *my_data) { } } -#endif - // Return a string representation of CMD_TYPE enum static string cmdTypeToString(CMD_TYPE cmd) { switch (cmd) { @@ -4629,7 +4623,6 @@ QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, V return result; } -#if MTMERGESOURCE VKAPI_ATTR VkResult VKAPI_CALL AllocateMemory(VkDevice device, const VkMemoryAllocateInfo *pAllocateInfo, const VkAllocationCallbacks *pAllocator, VkDeviceMemory *pMemory) { layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); @@ -4747,7 +4740,6 @@ static void initializeAndTrackMemory(layer_data *dev_data, VkDeviceMemory mem, V } } } -#endif // Verify that state for fence being waited on is appropriate. That is, // a fence being waited on should not already be signalled and // it should have been submitted on a queue or during acquire next image @@ -5135,7 +5127,6 @@ VKAPI_ATTR void VKAPI_CALL DestroyImage(VkDevice device, VkImage image, const Vk } } -#if MTMERGESOURCE VKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory mem, VkDeviceSize memoryOffset) { layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); @@ -5228,7 +5219,7 @@ GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements // Could potentially save returned mem requirements and validate values passed into BindImageMemory my_data->device_dispatch_table->GetImageMemoryRequirements(device, image, pMemoryRequirements); } -#endif + VKAPI_ATTR void VKAPI_CALL DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks *pAllocator) { get_my_data_ptr(get_dispatch_key(device), layer_data_map) @@ -5334,9 +5325,7 @@ FreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandB // Remove commandBuffer reference from commandPoolMap dev_data->commandPoolMap[commandPool].commandBuffers.remove(pCommandBuffers[i]); } -#if MTMERGESOURCE printCBList(dev_data); -#endif lock.unlock(); if (!skip_call) @@ -5499,13 +5488,11 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateBufferView(VkDevice device, const VkBufferV if (VK_SUCCESS == result) { std::lock_guard lock(global_lock); dev_data->bufferViewMap[*pView] = VkBufferViewCreateInfo(*pCreateInfo); -#if MTMERGESOURCE // In order to create a valid buffer view, the buffer must have been created with at least one of the // following flags: UNIFORM_TEXEL_BUFFER_BIT or STORAGE_TEXEL_BUFFER_BIT validate_buffer_usage_flags(dev_data, pCreateInfo->buffer, VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, false, "vkCreateBufferView()", "VK_BUFFER_USAGE_[STORAGE|UNIFORM]_TEXEL_BUFFER_BIT"); -#endif } return result; } @@ -6105,9 +6092,7 @@ AllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo *pCrea pCB->device = device; } } -#if MTMERGESOURCE printCBList(dev_data); -#endif lock.unlock(); } return result; @@ -6319,10 +6304,6 @@ ResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flag return result; } -#if MTMERGESOURCE -// TODO : For any vkCmdBind* calls that include an object which has mem bound to it, -// need to account for that mem now having binding to given commandBuffer -#endif VKAPI_ATTR void VKAPI_CALL CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline) { bool skipCall = false; @@ -6669,8 +6650,8 @@ VKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType) { bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); + // TODO : Somewhere need to verify that IBs have correct usage state flagged std::unique_lock lock(global_lock); -#if MTMERGESOURCE VkDeviceMemory mem; skipCall = get_mem_binding_from_object(dev_data, (uint64_t)buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); @@ -6678,12 +6659,7 @@ CmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize if (cb_data != dev_data->commandBufferMap.end()) { std::function function = [=]() { return validate_memory_is_valid(dev_data, mem, "vkCmdBindIndexBuffer()"); }; cb_data->second->validate_functions.push_back(function); - } - // TODO : Somewhere need to verify that IBs have correct usage state flagged -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= addCmd(dev_data, pCB, CMD_BINDINDEXBUFFER, "vkCmdBindIndexBuffer()"); + skipCall |= addCmd(dev_data, cb_data->second, CMD_BINDINDEXBUFFER, "vkCmdBindIndexBuffer()"); VkDeviceSize offset_align = 0; switch (indexType) { case VK_INDEX_TYPE_UINT16: @@ -6702,7 +6678,7 @@ CmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize "vkCmdBindIndexBuffer() offset (0x%" PRIxLEAST64 ") does not fall on alignment (%s) boundary.", offset, string_VkIndexType(indexType)); } - pCB->status |= CBSTATUS_INDEX_BUFFER_BOUND; + cb_data->second->status |= CBSTATUS_INDEX_BUFFER_BOUND; } lock.unlock(); if (!skipCall) @@ -6726,23 +6702,19 @@ VKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers(VkCommandBuffer commandBuffer, u const VkDeviceSize *pOffsets) { bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); + // TODO : Somewhere need to verify that VBs have correct usage state flagged std::unique_lock lock(global_lock); -#if MTMERGESOURCE - for (uint32_t i = 0; i < bindingCount; ++i) { - VkDeviceMemory mem; - skipCall |= get_mem_binding_from_object(dev_data, (uint64_t)pBuffers[i], VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); - auto cb_data = dev_data->commandBufferMap.find(commandBuffer); - if (cb_data != dev_data->commandBufferMap.end()) { + auto cb_data = dev_data->commandBufferMap.find(commandBuffer); + if (cb_data != dev_data->commandBufferMap.end()) { + for (uint32_t i = 0; i < bindingCount; ++i) { + VkDeviceMemory mem; + skipCall |= get_mem_binding_from_object(dev_data, (uint64_t)pBuffers[i], VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); + std::function function = [=]() { return validate_memory_is_valid(dev_data, mem, "vkCmdBindVertexBuffers()"); }; cb_data->second->validate_functions.push_back(function); } - } - // TODO : Somewhere need to verify that VBs have correct usage state flagged -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - addCmd(dev_data, pCB, CMD_BINDVERTEXBUFFER, "vkCmdBindVertexBuffer()"); - updateResourceTracking(pCB, firstBinding, bindingCount, pBuffers); + addCmd(dev_data, cb_data->second, CMD_BINDVERTEXBUFFER, "vkCmdBindVertexBuffer()"); + updateResourceTracking(cb_data->second, firstBinding, bindingCount, pBuffers); } else { skipCall |= report_error_no_cb_begin(dev_data, commandBuffer, "vkCmdBindVertexBuffer()"); } @@ -6841,13 +6813,11 @@ CmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize off layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); bool skipCall = false; std::unique_lock lock(global_lock); -#if MTMERGESOURCE VkDeviceMemory mem; // MTMTODO : merge with code below skipCall = get_mem_binding_from_object(dev_data, (uint64_t)buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdDrawIndirect"); -#endif GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); if (pCB) { skipCall |= addCmd(dev_data, pCB, CMD_DRAWINDIRECT, "vkCmdDrawIndirect()"); @@ -6874,13 +6844,11 @@ CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceS bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE VkDeviceMemory mem; // MTMTODO : merge with code below skipCall = get_mem_binding_from_object(dev_data, (uint64_t)buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdDrawIndexedIndirect"); -#endif GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); if (pCB) { skipCall |= addCmd(dev_data, pCB, CMD_DRAWINDEXEDINDIRECT, "vkCmdDrawIndexedIndirect()"); @@ -6926,12 +6894,10 @@ CmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE VkDeviceMemory mem; skipCall = get_mem_binding_from_object(dev_data, (uint64_t)buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdDispatchIndirect"); -#endif GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); if (pCB) { skipCall |= validate_and_update_draw_state(dev_data, pCB, false, VK_PIPELINE_BIND_POINT_COMPUTE); @@ -6951,36 +6917,29 @@ VKAPI_ATTR void VKAPI_CALL CmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE - VkDeviceMemory mem; + VkDeviceMemory src_mem, dst_mem; + skipCall = get_mem_binding_from_object(dev_data, (uint64_t)srcBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &src_mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, src_mem, "vkCmdCopyBuffer"); + skipCall |= get_mem_binding_from_object(dev_data, (uint64_t)dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &dst_mem); + + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, dst_mem, "vkCmdCopyBuffer"); + // Validate that SRC & DST buffers have correct usage flags set + skipCall |= validate_buffer_usage_flags(dev_data, srcBuffer, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, true, + "vkCmdCopyBuffer()", "VK_BUFFER_USAGE_TRANSFER_SRC_BIT"); + skipCall |= validate_buffer_usage_flags(dev_data, dstBuffer, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, + "vkCmdCopyBuffer()", "VK_BUFFER_USAGE_TRANSFER_DST_BIT"); auto cb_data = dev_data->commandBufferMap.find(commandBuffer); - skipCall = - get_mem_binding_from_object(dev_data, (uint64_t)srcBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); if (cb_data != dev_data->commandBufferMap.end()) { - std::function function = [=]() { return validate_memory_is_valid(dev_data, mem, "vkCmdCopyBuffer()"); }; + std::function function = [=]() { return validate_memory_is_valid(dev_data, src_mem, "vkCmdCopyBuffer()"); }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdCopyBuffer"); - skipCall |= - get_mem_binding_from_object(dev_data, (uint64_t)dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); - if (cb_data != dev_data->commandBufferMap.end()) { - std::function function = [=]() { - set_memory_valid(dev_data, mem, true); + function = [=]() { + set_memory_valid(dev_data, dst_mem, true); return false; }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdCopyBuffer"); - // Validate that SRC & DST buffers have correct usage flags set - skipCall |= validate_buffer_usage_flags(dev_data, srcBuffer, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, true, - "vkCmdCopyBuffer()", "VK_BUFFER_USAGE_TRANSFER_SRC_BIT"); - skipCall |= validate_buffer_usage_flags(dev_data, dstBuffer, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, - "vkCmdCopyBuffer()", "VK_BUFFER_USAGE_TRANSFER_DST_BIT"); -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= addCmd(dev_data, pCB, CMD_COPYBUFFER, "vkCmdCopyBuffer()"); - skipCall |= insideRenderPass(dev_data, pCB, "vkCmdCopyBuffer"); + + skipCall |= addCmd(dev_data, cb_data->second, CMD_COPYBUFFER, "vkCmdCopyBuffer()"); + skipCall |= insideRenderPass(dev_data, cb_data->second, "vkCmdCopyBuffer"); } lock.unlock(); if (!skipCall) @@ -7070,35 +7029,31 @@ CmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcI bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE - VkDeviceMemory mem; - auto cb_data = dev_data->commandBufferMap.find(commandBuffer); + VkDeviceMemory src_mem, dst_mem; // Validate that src & dst images have correct usage flags set - skipCall = get_mem_binding_from_object(dev_data, (uint64_t)srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &mem); - if (cb_data != dev_data->commandBufferMap.end()) { - std::function function = [=]() { return validate_memory_is_valid(dev_data, mem, "vkCmdCopyImage()", srcImage); }; - cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdCopyImage"); - skipCall |= - get_mem_binding_from_object(dev_data, (uint64_t)dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &mem); + skipCall = get_mem_binding_from_object(dev_data, (uint64_t)srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &src_mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, src_mem, "vkCmdCopyImage"); + + skipCall |= get_mem_binding_from_object(dev_data, (uint64_t)dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &dst_mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, dst_mem, "vkCmdCopyImage"); + skipCall |= validate_image_usage_flags(dev_data, srcImage, VK_IMAGE_USAGE_TRANSFER_SRC_BIT, true, + "vkCmdCopyImage()", "VK_IMAGE_USAGE_TRANSFER_SRC_BIT"); + skipCall |= validate_image_usage_flags(dev_data, dstImage, VK_IMAGE_USAGE_TRANSFER_DST_BIT, true, + "vkCmdCopyImage()", "VK_IMAGE_USAGE_TRANSFER_DST_BIT"); + auto cb_data = dev_data->commandBufferMap.find(commandBuffer); if (cb_data != dev_data->commandBufferMap.end()) { std::function function = [=]() { - set_memory_valid(dev_data, mem, true, dstImage); + return validate_memory_is_valid(dev_data, src_mem, "vkCmdCopyImage()", srcImage); + }; + cb_data->second->validate_functions.push_back(function); + function = [=]() { + set_memory_valid(dev_data, dst_mem, true, dstImage); return false; }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdCopyImage"); - skipCall |= validate_image_usage_flags(dev_data, srcImage, VK_IMAGE_USAGE_TRANSFER_SRC_BIT, true, - "vkCmdCopyImage()", "VK_IMAGE_USAGE_TRANSFER_SRC_BIT"); - skipCall |= validate_image_usage_flags(dev_data, dstImage, VK_IMAGE_USAGE_TRANSFER_DST_BIT, true, - "vkCmdCopyImage()", "VK_IMAGE_USAGE_TRANSFER_DST_BIT"); -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= addCmd(dev_data, pCB, CMD_COPYIMAGE, "vkCmdCopyImage()"); - skipCall |= insideRenderPass(dev_data, pCB, "vkCmdCopyImage"); + + skipCall |= addCmd(dev_data, cb_data->second, CMD_COPYIMAGE, "vkCmdCopyImage()"); + skipCall |= insideRenderPass(dev_data, cb_data->second, "vkCmdCopyImage"); for (uint32_t i = 0; i < regionCount; ++i) { skipCall |= VerifySourceImageLayout(commandBuffer, srcImage, pRegions[i].srcSubresource, srcImageLayout); skipCall |= VerifyDestImageLayout(commandBuffer, dstImage, pRegions[i].dstSubresource, dstImageLayout); @@ -7116,35 +7071,32 @@ CmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcI bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE - VkDeviceMemory mem; - auto cb_data = dev_data->commandBufferMap.find(commandBuffer); + VkDeviceMemory src_mem, dst_mem; // Validate that src & dst images have correct usage flags set - skipCall = get_mem_binding_from_object(dev_data, (uint64_t)srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &mem); - if (cb_data != dev_data->commandBufferMap.end()) { - std::function function = [=]() { return validate_memory_is_valid(dev_data, mem, "vkCmdBlitImage()", srcImage); }; - cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdBlitImage"); - skipCall |= - get_mem_binding_from_object(dev_data, (uint64_t)dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &mem); + skipCall = get_mem_binding_from_object(dev_data, (uint64_t)srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &src_mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, src_mem, "vkCmdBlitImage"); + + skipCall |= get_mem_binding_from_object(dev_data, (uint64_t)dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &dst_mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, dst_mem, "vkCmdBlitImage"); + skipCall |= validate_image_usage_flags(dev_data, srcImage, VK_IMAGE_USAGE_TRANSFER_SRC_BIT, true, + "vkCmdBlitImage()", "VK_IMAGE_USAGE_TRANSFER_SRC_BIT"); + skipCall |= validate_image_usage_flags(dev_data, dstImage, VK_IMAGE_USAGE_TRANSFER_DST_BIT, true, + "vkCmdBlitImage()", "VK_IMAGE_USAGE_TRANSFER_DST_BIT"); + + auto cb_data = dev_data->commandBufferMap.find(commandBuffer); if (cb_data != dev_data->commandBufferMap.end()) { std::function function = [=]() { - set_memory_valid(dev_data, mem, true, dstImage); + return validate_memory_is_valid(dev_data, src_mem, "vkCmdBlitImage()", srcImage); + }; + cb_data->second->validate_functions.push_back(function); + function = [=]() { + set_memory_valid(dev_data, dst_mem, true, dstImage); return false; }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdBlitImage"); - skipCall |= validate_image_usage_flags(dev_data, srcImage, VK_IMAGE_USAGE_TRANSFER_SRC_BIT, true, - "vkCmdBlitImage()", "VK_IMAGE_USAGE_TRANSFER_SRC_BIT"); - skipCall |= validate_image_usage_flags(dev_data, dstImage, VK_IMAGE_USAGE_TRANSFER_DST_BIT, true, - "vkCmdBlitImage()", "VK_IMAGE_USAGE_TRANSFER_DST_BIT"); -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= addCmd(dev_data, pCB, CMD_BLITIMAGE, "vkCmdBlitImage()"); - skipCall |= insideRenderPass(dev_data, pCB, "vkCmdBlitImage"); + + skipCall |= addCmd(dev_data, cb_data->second, CMD_BLITIMAGE, "vkCmdBlitImage()"); + skipCall |= insideRenderPass(dev_data, cb_data->second, "vkCmdBlitImage"); } lock.unlock(); if (!skipCall) @@ -7158,35 +7110,29 @@ VKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage(VkCommandBuffer commandBuffer, V bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE - VkDeviceMemory mem; + VkDeviceMemory dst_mem, src_mem; + skipCall = get_mem_binding_from_object(dev_data, (uint64_t)dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &dst_mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, dst_mem, "vkCmdCopyBufferToImage"); + + skipCall |= get_mem_binding_from_object(dev_data, (uint64_t)srcBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &src_mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, src_mem, "vkCmdCopyBufferToImage"); + // Validate that src buff & dst image have correct usage flags set + skipCall |= validate_buffer_usage_flags(dev_data, srcBuffer, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, true, "vkCmdCopyBufferToImage()", + "VK_BUFFER_USAGE_TRANSFER_SRC_BIT"); + skipCall |= validate_image_usage_flags(dev_data, dstImage, VK_IMAGE_USAGE_TRANSFER_DST_BIT, true, "vkCmdCopyBufferToImage()", + "VK_IMAGE_USAGE_TRANSFER_DST_BIT"); auto cb_data = dev_data->commandBufferMap.find(commandBuffer); - skipCall = get_mem_binding_from_object(dev_data, (uint64_t)dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &mem); if (cb_data != dev_data->commandBufferMap.end()) { std::function function = [=]() { - set_memory_valid(dev_data, mem, true, dstImage); + set_memory_valid(dev_data, dst_mem, true, dstImage); return false; }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdCopyBufferToImage"); - skipCall |= - get_mem_binding_from_object(dev_data, (uint64_t)srcBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); - if (cb_data != dev_data->commandBufferMap.end()) { - std::function function = [=]() { return validate_memory_is_valid(dev_data, mem, "vkCmdCopyBufferToImage()"); }; + function = [=]() { return validate_memory_is_valid(dev_data, src_mem, "vkCmdCopyBufferToImage()"); }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdCopyBufferToImage"); - // Validate that src buff & dst image have correct usage flags set - skipCall |= validate_buffer_usage_flags(dev_data, srcBuffer, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, true, - "vkCmdCopyBufferToImage()", "VK_BUFFER_USAGE_TRANSFER_SRC_BIT"); - skipCall |= validate_image_usage_flags(dev_data, dstImage, VK_IMAGE_USAGE_TRANSFER_DST_BIT, true, - "vkCmdCopyBufferToImage()", "VK_IMAGE_USAGE_TRANSFER_DST_BIT"); -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= addCmd(dev_data, pCB, CMD_COPYBUFFERTOIMAGE, "vkCmdCopyBufferToImage()"); - skipCall |= insideRenderPass(dev_data, pCB, "vkCmdCopyBufferToImage"); + + skipCall |= addCmd(dev_data, cb_data->second, CMD_COPYBUFFERTOIMAGE, "vkCmdCopyBufferToImage()"); + skipCall |= insideRenderPass(dev_data, cb_data->second, "vkCmdCopyBufferToImage"); for (uint32_t i = 0; i < regionCount; ++i) { skipCall |= VerifyDestImageLayout(commandBuffer, dstImage, pRegions[i].imageSubresource, dstImageLayout); } @@ -7203,37 +7149,32 @@ VKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer(VkCommandBuffer commandBuffer, V bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE - VkDeviceMemory mem; + VkDeviceMemory src_mem, dst_mem; + skipCall = get_mem_binding_from_object(dev_data, (uint64_t)srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &src_mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, src_mem, "vkCmdCopyImageToBuffer"); + + skipCall |= get_mem_binding_from_object(dev_data, (uint64_t)dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &dst_mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, dst_mem, "vkCmdCopyImageToBuffer"); + // Validate that dst buff & src image have correct usage flags set + skipCall |= validate_image_usage_flags(dev_data, srcImage, VK_IMAGE_USAGE_TRANSFER_SRC_BIT, true, "vkCmdCopyImageToBuffer()", + "VK_IMAGE_USAGE_TRANSFER_SRC_BIT"); + skipCall |= validate_buffer_usage_flags(dev_data, dstBuffer, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, "vkCmdCopyImageToBuffer()", + "VK_BUFFER_USAGE_TRANSFER_DST_BIT"); + auto cb_data = dev_data->commandBufferMap.find(commandBuffer); - skipCall = get_mem_binding_from_object(dev_data, (uint64_t)srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &mem); if (cb_data != dev_data->commandBufferMap.end()) { std::function function = [=]() { - return validate_memory_is_valid(dev_data, mem, "vkCmdCopyImageToBuffer()", srcImage); + return validate_memory_is_valid(dev_data, src_mem, "vkCmdCopyImageToBuffer()", srcImage); }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdCopyImageToBuffer"); - skipCall |= - get_mem_binding_from_object(dev_data, (uint64_t)dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); - if (cb_data != dev_data->commandBufferMap.end()) { - std::function function = [=]() { - set_memory_valid(dev_data, mem, true); + function = [=]() { + set_memory_valid(dev_data, dst_mem, true); return false; }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdCopyImageToBuffer"); - // Validate that dst buff & src image have correct usage flags set - skipCall |= validate_image_usage_flags(dev_data, srcImage, VK_IMAGE_USAGE_TRANSFER_SRC_BIT, true, - "vkCmdCopyImageToBuffer()", "VK_IMAGE_USAGE_TRANSFER_SRC_BIT"); - skipCall |= validate_buffer_usage_flags(dev_data, dstBuffer, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, - "vkCmdCopyImageToBuffer()", "VK_BUFFER_USAGE_TRANSFER_DST_BIT"); -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= addCmd(dev_data, pCB, CMD_COPYIMAGETOBUFFER, "vkCmdCopyImageToBuffer()"); - skipCall |= insideRenderPass(dev_data, pCB, "vkCmdCopyImageToBuffer"); + + skipCall |= addCmd(dev_data, cb_data->second, CMD_COPYIMAGETOBUFFER, "vkCmdCopyImageToBuffer()"); + skipCall |= insideRenderPass(dev_data, cb_data->second, "vkCmdCopyImageToBuffer"); for (uint32_t i = 0; i < regionCount; ++i) { skipCall |= VerifySourceImageLayout(commandBuffer, srcImage, pRegions[i].imageSubresource, srcImageLayout); } @@ -7249,27 +7190,24 @@ VKAPI_ATTR void VKAPI_CALL CmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuff bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE VkDeviceMemory mem; - auto cb_data = dev_data->commandBufferMap.find(commandBuffer); skipCall = get_mem_binding_from_object(dev_data, (uint64_t)dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdUpdateBuffer"); + // Validate that dst buff has correct usage flags set + skipCall |= validate_buffer_usage_flags(dev_data, dstBuffer, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, "vkCmdUpdateBuffer()", + "VK_BUFFER_USAGE_TRANSFER_DST_BIT"); + + auto cb_data = dev_data->commandBufferMap.find(commandBuffer); if (cb_data != dev_data->commandBufferMap.end()) { std::function function = [=]() { set_memory_valid(dev_data, mem, true); return false; }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdUpdateBuffer"); - // Validate that dst buff has correct usage flags set - skipCall |= validate_buffer_usage_flags(dev_data, dstBuffer, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, - "vkCmdUpdateBuffer()", "VK_BUFFER_USAGE_TRANSFER_DST_BIT"); -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= addCmd(dev_data, pCB, CMD_UPDATEBUFFER, "vkCmdUpdateBuffer()"); - skipCall |= insideRenderPass(dev_data, pCB, "vkCmdCopyUpdateBuffer"); + + skipCall |= addCmd(dev_data, cb_data->second, CMD_UPDATEBUFFER, "vkCmdUpdateBuffer()"); + skipCall |= insideRenderPass(dev_data, cb_data->second, "vkCmdCopyUpdateBuffer"); } lock.unlock(); if (!skipCall) @@ -7281,27 +7219,24 @@ CmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize ds bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE VkDeviceMemory mem; - auto cb_data = dev_data->commandBufferMap.find(commandBuffer); skipCall = get_mem_binding_from_object(dev_data, (uint64_t)dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, &mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdFillBuffer"); + // Validate that dst buff has correct usage flags set + skipCall |= validate_buffer_usage_flags(dev_data, dstBuffer, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, "vkCmdFillBuffer()", + "VK_BUFFER_USAGE_TRANSFER_DST_BIT"); + + auto cb_data = dev_data->commandBufferMap.find(commandBuffer); if (cb_data != dev_data->commandBufferMap.end()) { std::function function = [=]() { set_memory_valid(dev_data, mem, true); return false; }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdFillBuffer"); - // Validate that dst buff has correct usage flags set - skipCall |= validate_buffer_usage_flags(dev_data, dstBuffer, VK_BUFFER_USAGE_TRANSFER_DST_BIT, true, - "vkCmdFillBuffer()", "VK_BUFFER_USAGE_TRANSFER_DST_BIT"); -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= addCmd(dev_data, pCB, CMD_FILLBUFFER, "vkCmdFillBuffer()"); - skipCall |= insideRenderPass(dev_data, pCB, "vkCmdCopyFillBuffer"); + + skipCall |= addCmd(dev_data, cb_data->second, CMD_FILLBUFFER, "vkCmdFillBuffer()"); + skipCall |= insideRenderPass(dev_data, cb_data->second, "vkCmdCopyFillBuffer"); } lock.unlock(); if (!skipCall) @@ -7384,24 +7319,20 @@ VKAPI_ATTR void VKAPI_CALL CmdClearColorImage(VkCommandBuffer commandBuffer, VkI bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE // TODO : Verify memory is in VK_IMAGE_STATE_CLEAR state VkDeviceMemory mem; - auto cb_data = dev_data->commandBufferMap.find(commandBuffer); skipCall = get_mem_binding_from_object(dev_data, (uint64_t)image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdClearColorImage"); + auto cb_data = dev_data->commandBufferMap.find(commandBuffer); if (cb_data != dev_data->commandBufferMap.end()) { std::function function = [=]() { set_memory_valid(dev_data, mem, true, image); return false; }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdClearColorImage"); -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= addCmd(dev_data, pCB, CMD_CLEARCOLORIMAGE, "vkCmdClearColorImage()"); - skipCall |= insideRenderPass(dev_data, pCB, "vkCmdClearColorImage"); + + skipCall |= addCmd(dev_data, cb_data->second, CMD_CLEARCOLORIMAGE, "vkCmdClearColorImage()"); + skipCall |= insideRenderPass(dev_data, cb_data->second, "vkCmdClearColorImage"); } lock.unlock(); if (!skipCall) @@ -7415,24 +7346,20 @@ CmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageL bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE // TODO : Verify memory is in VK_IMAGE_STATE_CLEAR state VkDeviceMemory mem; - auto cb_data = dev_data->commandBufferMap.find(commandBuffer); skipCall = get_mem_binding_from_object(dev_data, (uint64_t)image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdClearDepthStencilImage"); + auto cb_data = dev_data->commandBufferMap.find(commandBuffer); if (cb_data != dev_data->commandBufferMap.end()) { std::function function = [=]() { set_memory_valid(dev_data, mem, true, image); return false; }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdClearDepthStencilImage"); -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= addCmd(dev_data, pCB, CMD_CLEARDEPTHSTENCILIMAGE, "vkCmdClearDepthStencilImage()"); - skipCall |= insideRenderPass(dev_data, pCB, "vkCmdClearDepthStencilImage"); + + skipCall |= addCmd(dev_data, cb_data->second, CMD_CLEARDEPTHSTENCILIMAGE, "vkCmdClearDepthStencilImage()"); + skipCall |= insideRenderPass(dev_data, cb_data->second, "vkCmdClearDepthStencilImage"); } lock.unlock(); if (!skipCall) @@ -7446,30 +7373,26 @@ CmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout s bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE + VkDeviceMemory src_mem, dst_mem; + skipCall = get_mem_binding_from_object(dev_data, (uint64_t)srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &src_mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, src_mem, "vkCmdResolveImage"); + + skipCall |= get_mem_binding_from_object(dev_data, (uint64_t)dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &dst_mem); + skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, dst_mem, "vkCmdResolveImage"); auto cb_data = dev_data->commandBufferMap.find(commandBuffer); - VkDeviceMemory mem; - skipCall = get_mem_binding_from_object(dev_data, (uint64_t)srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &mem); - if (cb_data != dev_data->commandBufferMap.end()) { - std::function function = [=]() { return validate_memory_is_valid(dev_data, mem, "vkCmdResolveImage()", srcImage); }; - cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdResolveImage"); - skipCall |= - get_mem_binding_from_object(dev_data, (uint64_t)dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, &mem); if (cb_data != dev_data->commandBufferMap.end()) { std::function function = [=]() { - set_memory_valid(dev_data, mem, true, dstImage); + return validate_memory_is_valid(dev_data, src_mem, "vkCmdResolveImage()", srcImage); + }; + cb_data->second->validate_functions.push_back(function); + function = [=]() { + set_memory_valid(dev_data, dst_mem, true, dstImage); return false; }; cb_data->second->validate_functions.push_back(function); - } - skipCall |= update_cmd_buf_and_mem_references(dev_data, commandBuffer, mem, "vkCmdResolveImage"); -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= addCmd(dev_data, pCB, CMD_RESOLVEIMAGE, "vkCmdResolveImage()"); - skipCall |= insideRenderPass(dev_data, pCB, "vkCmdResolveImage"); + + skipCall |= addCmd(dev_data, cb_data->second, CMD_RESOLVEIMAGE, "vkCmdResolveImage()"); + skipCall |= insideRenderPass(dev_data, cb_data->second, "vkCmdResolveImage"); } lock.unlock(); if (!skipCall) @@ -9019,7 +8942,6 @@ VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(VkCommandBuffer commandBuffer) { bool skipCall = false; layer_data *dev_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); std::unique_lock lock(global_lock); -#if MTMERGESOURCE auto cb_data = dev_data->commandBufferMap.find(commandBuffer); if (cb_data != dev_data->commandBufferMap.end()) { RENDER_PASS_NODE* pRPNode = cb_data->second->activeRenderPass; @@ -9045,17 +8967,13 @@ VKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(VkCommandBuffer commandBuffer) { } } } - } -#endif - GLOBAL_CB_NODE *pCB = getCBNode(dev_data, commandBuffer); - if (pCB) { - skipCall |= outsideRenderPass(dev_data, pCB, "vkCmdEndRenderpass"); - skipCall |= validatePrimaryCommandBuffer(dev_data, pCB, "vkCmdEndRenderPass"); - skipCall |= addCmd(dev_data, pCB, CMD_ENDRENDERPASS, "vkCmdEndRenderPass()"); - TransitionFinalSubpassLayouts(commandBuffer, &pCB->activeRenderPassBeginInfo); - pCB->activeRenderPass = nullptr; - pCB->activeSubpass = 0; - pCB->activeFramebuffer = VK_NULL_HANDLE; + skipCall |= outsideRenderPass(dev_data, cb_data->second, "vkCmdEndRenderpass"); + skipCall |= validatePrimaryCommandBuffer(dev_data, cb_data->second, "vkCmdEndRenderPass"); + skipCall |= addCmd(dev_data, cb_data->second, CMD_ENDRENDERPASS, "vkCmdEndRenderPass()"); + TransitionFinalSubpassLayouts(commandBuffer, &cb_data->second->activeRenderPassBeginInfo); + cb_data->second->activeRenderPass = nullptr; + cb_data->second->activeSubpass = 0; + cb_data->second->activeFramebuffer = VK_NULL_HANDLE; } lock.unlock(); if (!skipCall) @@ -9445,7 +9363,6 @@ MapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize return result; } -#if MTMERGESOURCE VKAPI_ATTR void VKAPI_CALL UnmapMemory(VkDevice device, VkDeviceMemory mem) { layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); bool skipCall = false; @@ -9551,7 +9468,6 @@ InvalidateMappedMemoryRanges(VkDevice device, uint32_t memRangeCount, const VkMa } return result; } -#endif VKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory mem, VkDeviceSize memoryOffset) { layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); @@ -10058,125 +9974,122 @@ intercept_core_device_command(const char *name) { const char *name; PFN_vkVoidFunction proc; } core_device_commands[] = { - { "vkGetDeviceProcAddr", reinterpret_cast(GetDeviceProcAddr) }, - { "vkDestroyDevice", reinterpret_cast(DestroyDevice) }, - { "vkQueueSubmit", reinterpret_cast(QueueSubmit) }, - { "vkWaitForFences", reinterpret_cast(WaitForFences) }, - { "vkGetFenceStatus", reinterpret_cast(GetFenceStatus) }, - { "vkQueueWaitIdle", reinterpret_cast(QueueWaitIdle) }, - { "vkDeviceWaitIdle", reinterpret_cast(DeviceWaitIdle) }, - { "vkGetDeviceQueue", reinterpret_cast(GetDeviceQueue) }, - { "vkDestroyInstance", reinterpret_cast(DestroyInstance) }, - { "vkDestroyDevice", reinterpret_cast(DestroyDevice) }, - { "vkDestroyFence", reinterpret_cast(DestroyFence) }, - { "vkResetFences", reinterpret_cast(ResetFences) }, - { "vkDestroySemaphore", reinterpret_cast(DestroySemaphore) }, - { "vkDestroyEvent", reinterpret_cast(DestroyEvent) }, - { "vkDestroyQueryPool", reinterpret_cast(DestroyQueryPool) }, - { "vkDestroyBuffer", reinterpret_cast(DestroyBuffer) }, - { "vkDestroyBufferView", reinterpret_cast(DestroyBufferView) }, - { "vkDestroyImage", reinterpret_cast(DestroyImage) }, - { "vkDestroyImageView", reinterpret_cast(DestroyImageView) }, - { "vkDestroyShaderModule", reinterpret_cast(DestroyShaderModule) }, - { "vkDestroyPipeline", reinterpret_cast(DestroyPipeline) }, - { "vkDestroyPipelineLayout", reinterpret_cast(DestroyPipelineLayout) }, - { "vkDestroySampler", reinterpret_cast(DestroySampler) }, - { "vkDestroyDescriptorSetLayout", reinterpret_cast(DestroyDescriptorSetLayout) }, - { "vkDestroyDescriptorPool", reinterpret_cast(DestroyDescriptorPool) }, - { "vkDestroyFramebuffer", reinterpret_cast(DestroyFramebuffer) }, - { "vkDestroyRenderPass", reinterpret_cast(DestroyRenderPass) }, - { "vkCreateBuffer", reinterpret_cast(CreateBuffer) }, - { "vkCreateBufferView", reinterpret_cast(CreateBufferView) }, - { "vkCreateImage", reinterpret_cast(CreateImage) }, - { "vkCreateImageView", reinterpret_cast(CreateImageView) }, - { "vkCreateFence", reinterpret_cast(CreateFence) }, - { "CreatePipelineCache", reinterpret_cast(CreatePipelineCache) }, - { "DestroyPipelineCache", reinterpret_cast(DestroyPipelineCache) }, - { "GetPipelineCacheData", reinterpret_cast(GetPipelineCacheData) }, - { "MergePipelineCaches", reinterpret_cast(MergePipelineCaches) }, - { "vkCreateGraphicsPipelines", reinterpret_cast(CreateGraphicsPipelines) }, - { "vkCreateComputePipelines", reinterpret_cast(CreateComputePipelines) }, - { "vkCreateSampler", reinterpret_cast(CreateSampler) }, - { "vkCreateDescriptorSetLayout", reinterpret_cast(CreateDescriptorSetLayout) }, - { "vkCreatePipelineLayout", reinterpret_cast(CreatePipelineLayout) }, - { "vkCreateDescriptorPool", reinterpret_cast(CreateDescriptorPool) }, - { "vkResetDescriptorPool", reinterpret_cast(ResetDescriptorPool) }, - { "vkAllocateDescriptorSets", reinterpret_cast(AllocateDescriptorSets) }, - { "vkFreeDescriptorSets", reinterpret_cast(FreeDescriptorSets) }, - { "vkUpdateDescriptorSets", reinterpret_cast(UpdateDescriptorSets) }, - { "vkCreateCommandPool", reinterpret_cast(CreateCommandPool) }, - { "vkDestroyCommandPool", reinterpret_cast(DestroyCommandPool) }, - { "vkResetCommandPool", reinterpret_cast(ResetCommandPool) }, - { "vkCreateQueryPool", reinterpret_cast(CreateQueryPool) }, - { "vkAllocateCommandBuffers", reinterpret_cast(AllocateCommandBuffers) }, - { "vkFreeCommandBuffers", reinterpret_cast(FreeCommandBuffers) }, - { "vkBeginCommandBuffer", reinterpret_cast(BeginCommandBuffer) }, - { "vkEndCommandBuffer", reinterpret_cast(EndCommandBuffer) }, - { "vkResetCommandBuffer", reinterpret_cast(ResetCommandBuffer) }, - { "vkCmdBindPipeline", reinterpret_cast(CmdBindPipeline) }, - { "vkCmdSetViewport", reinterpret_cast(CmdSetViewport) }, - { "vkCmdSetScissor", reinterpret_cast(CmdSetScissor) }, - { "vkCmdSetLineWidth", reinterpret_cast(CmdSetLineWidth) }, - { "vkCmdSetDepthBias", reinterpret_cast(CmdSetDepthBias) }, - { "vkCmdSetBlendConstants", reinterpret_cast(CmdSetBlendConstants) }, - { "vkCmdSetDepthBounds", reinterpret_cast(CmdSetDepthBounds) }, - { "vkCmdSetStencilCompareMask", reinterpret_cast(CmdSetStencilCompareMask) }, - { "vkCmdSetStencilWriteMask", reinterpret_cast(CmdSetStencilWriteMask) }, - { "vkCmdSetStencilReference", reinterpret_cast(CmdSetStencilReference) }, - { "vkCmdBindDescriptorSets", reinterpret_cast(CmdBindDescriptorSets) }, - { "vkCmdBindVertexBuffers", reinterpret_cast(CmdBindVertexBuffers) }, - { "vkCmdBindIndexBuffer", reinterpret_cast(CmdBindIndexBuffer) }, - { "vkCmdDraw", reinterpret_cast(CmdDraw) }, - { "vkCmdDrawIndexed", reinterpret_cast(CmdDrawIndexed) }, - { "vkCmdDrawIndirect", reinterpret_cast(CmdDrawIndirect) }, - { "vkCmdDrawIndexedIndirect", reinterpret_cast(CmdDrawIndexedIndirect) }, - { "vkCmdDispatch", reinterpret_cast(CmdDispatch) }, - { "vkCmdDispatchIndirect", reinterpret_cast(CmdDispatchIndirect) }, - { "vkCmdCopyBuffer", reinterpret_cast(CmdCopyBuffer) }, - { "vkCmdCopyImage", reinterpret_cast(CmdCopyImage) }, - { "vkCmdBlitImage", reinterpret_cast(CmdBlitImage) }, - { "vkCmdCopyBufferToImage", reinterpret_cast(CmdCopyBufferToImage) }, - { "vkCmdCopyImageToBuffer", reinterpret_cast(CmdCopyImageToBuffer) }, - { "vkCmdUpdateBuffer", reinterpret_cast(CmdUpdateBuffer) }, - { "vkCmdFillBuffer", reinterpret_cast(CmdFillBuffer) }, - { "vkCmdClearColorImage", reinterpret_cast(CmdClearColorImage) }, - { "vkCmdClearDepthStencilImage", reinterpret_cast(CmdClearDepthStencilImage) }, - { "vkCmdClearAttachments", reinterpret_cast(CmdClearAttachments) }, - { "vkCmdResolveImage", reinterpret_cast(CmdResolveImage) }, - { "vkCmdSetEvent", reinterpret_cast(CmdSetEvent) }, - { "vkCmdResetEvent", reinterpret_cast(CmdResetEvent) }, - { "vkCmdWaitEvents", reinterpret_cast(CmdWaitEvents) }, - { "vkCmdPipelineBarrier", reinterpret_cast(CmdPipelineBarrier) }, - { "vkCmdBeginQuery", reinterpret_cast(CmdBeginQuery) }, - { "vkCmdEndQuery", reinterpret_cast(CmdEndQuery) }, - { "vkCmdResetQueryPool", reinterpret_cast(CmdResetQueryPool) }, - { "vkCmdCopyQueryPoolResults", reinterpret_cast(CmdCopyQueryPoolResults) }, - { "vkCmdPushConstants", reinterpret_cast(CmdPushConstants) }, - { "vkCmdWriteTimestamp", reinterpret_cast(CmdWriteTimestamp) }, - { "vkCreateFramebuffer", reinterpret_cast(CreateFramebuffer) }, - { "vkCreateShaderModule", reinterpret_cast(CreateShaderModule) }, - { "vkCreateRenderPass", reinterpret_cast(CreateRenderPass) }, - { "vkCmdBeginRenderPass", reinterpret_cast(CmdBeginRenderPass) }, - { "vkCmdNextSubpass", reinterpret_cast(CmdNextSubpass) }, - { "vkCmdEndRenderPass", reinterpret_cast(CmdEndRenderPass) }, - { "vkCmdExecuteCommands", reinterpret_cast(CmdExecuteCommands) }, - { "vkSetEvent", reinterpret_cast(SetEvent) }, - { "vkMapMemory", reinterpret_cast(MapMemory) }, -#if MTMERGESOURCE - { "vkUnmapMemory", reinterpret_cast(UnmapMemory) }, - { "vkAllocateMemory", reinterpret_cast(AllocateMemory) }, - { "vkFreeMemory", reinterpret_cast(FreeMemory) }, - { "vkFlushMappedMemoryRanges", reinterpret_cast(FlushMappedMemoryRanges) }, - { "vkInvalidateMappedMemoryRanges", reinterpret_cast(InvalidateMappedMemoryRanges) }, - { "vkBindBufferMemory", reinterpret_cast(BindBufferMemory) }, - { "vkGetBufferMemoryRequirements", reinterpret_cast(GetBufferMemoryRequirements) }, - { "vkGetImageMemoryRequirements", reinterpret_cast(GetImageMemoryRequirements) }, -#endif - { "vkGetQueryPoolResults", reinterpret_cast(GetQueryPoolResults) }, - { "vkBindImageMemory", reinterpret_cast(BindImageMemory) }, - { "vkQueueBindSparse", reinterpret_cast(QueueBindSparse) }, - { "vkCreateSemaphore", reinterpret_cast(CreateSemaphore) }, - { "vkCreateEvent", reinterpret_cast(CreateEvent) }, + {"vkGetDeviceProcAddr", reinterpret_cast(GetDeviceProcAddr)}, + {"vkQueueSubmit", reinterpret_cast(QueueSubmit)}, + {"vkWaitForFences", reinterpret_cast(WaitForFences)}, + {"vkGetFenceStatus", reinterpret_cast(GetFenceStatus)}, + {"vkQueueWaitIdle", reinterpret_cast(QueueWaitIdle)}, + {"vkDeviceWaitIdle", reinterpret_cast(DeviceWaitIdle)}, + {"vkGetDeviceQueue", reinterpret_cast(GetDeviceQueue)}, + {"vkDestroyInstance", reinterpret_cast(DestroyInstance)}, + {"vkDestroyDevice", reinterpret_cast(DestroyDevice)}, + {"vkDestroyFence", reinterpret_cast(DestroyFence)}, + {"vkResetFences", reinterpret_cast(ResetFences)}, + {"vkDestroySemaphore", reinterpret_cast(DestroySemaphore)}, + {"vkDestroyEvent", reinterpret_cast(DestroyEvent)}, + {"vkDestroyQueryPool", reinterpret_cast(DestroyQueryPool)}, + {"vkDestroyBuffer", reinterpret_cast(DestroyBuffer)}, + {"vkDestroyBufferView", reinterpret_cast(DestroyBufferView)}, + {"vkDestroyImage", reinterpret_cast(DestroyImage)}, + {"vkDestroyImageView", reinterpret_cast(DestroyImageView)}, + {"vkDestroyShaderModule", reinterpret_cast(DestroyShaderModule)}, + {"vkDestroyPipeline", reinterpret_cast(DestroyPipeline)}, + {"vkDestroyPipelineLayout", reinterpret_cast(DestroyPipelineLayout)}, + {"vkDestroySampler", reinterpret_cast(DestroySampler)}, + {"vkDestroyDescriptorSetLayout", reinterpret_cast(DestroyDescriptorSetLayout)}, + {"vkDestroyDescriptorPool", reinterpret_cast(DestroyDescriptorPool)}, + {"vkDestroyFramebuffer", reinterpret_cast(DestroyFramebuffer)}, + {"vkDestroyRenderPass", reinterpret_cast(DestroyRenderPass)}, + {"vkCreateBuffer", reinterpret_cast(CreateBuffer)}, + {"vkCreateBufferView", reinterpret_cast(CreateBufferView)}, + {"vkCreateImage", reinterpret_cast(CreateImage)}, + {"vkCreateImageView", reinterpret_cast(CreateImageView)}, + {"vkCreateFence", reinterpret_cast(CreateFence)}, + {"vkCreatePipelineCache", reinterpret_cast(CreatePipelineCache)}, + {"vkDestroyPipelineCache", reinterpret_cast(DestroyPipelineCache)}, + {"vkGetPipelineCacheData", reinterpret_cast(GetPipelineCacheData)}, + {"vkMergePipelineCaches", reinterpret_cast(MergePipelineCaches)}, + {"vkCreateGraphicsPipelines", reinterpret_cast(CreateGraphicsPipelines)}, + {"vkCreateComputePipelines", reinterpret_cast(CreateComputePipelines)}, + {"vkCreateSampler", reinterpret_cast(CreateSampler)}, + {"vkCreateDescriptorSetLayout", reinterpret_cast(CreateDescriptorSetLayout)}, + {"vkCreatePipelineLayout", reinterpret_cast(CreatePipelineLayout)}, + {"vkCreateDescriptorPool", reinterpret_cast(CreateDescriptorPool)}, + {"vkResetDescriptorPool", reinterpret_cast(ResetDescriptorPool)}, + {"vkAllocateDescriptorSets", reinterpret_cast(AllocateDescriptorSets)}, + {"vkFreeDescriptorSets", reinterpret_cast(FreeDescriptorSets)}, + {"vkUpdateDescriptorSets", reinterpret_cast(UpdateDescriptorSets)}, + {"vkCreateCommandPool", reinterpret_cast(CreateCommandPool)}, + {"vkDestroyCommandPool", reinterpret_cast(DestroyCommandPool)}, + {"vkResetCommandPool", reinterpret_cast(ResetCommandPool)}, + {"vkCreateQueryPool", reinterpret_cast(CreateQueryPool)}, + {"vkAllocateCommandBuffers", reinterpret_cast(AllocateCommandBuffers)}, + {"vkFreeCommandBuffers", reinterpret_cast(FreeCommandBuffers)}, + {"vkBeginCommandBuffer", reinterpret_cast(BeginCommandBuffer)}, + {"vkEndCommandBuffer", reinterpret_cast(EndCommandBuffer)}, + {"vkResetCommandBuffer", reinterpret_cast(ResetCommandBuffer)}, + {"vkCmdBindPipeline", reinterpret_cast(CmdBindPipeline)}, + {"vkCmdSetViewport", reinterpret_cast(CmdSetViewport)}, + {"vkCmdSetScissor", reinterpret_cast(CmdSetScissor)}, + {"vkCmdSetLineWidth", reinterpret_cast(CmdSetLineWidth)}, + {"vkCmdSetDepthBias", reinterpret_cast(CmdSetDepthBias)}, + {"vkCmdSetBlendConstants", reinterpret_cast(CmdSetBlendConstants)}, + {"vkCmdSetDepthBounds", reinterpret_cast(CmdSetDepthBounds)}, + {"vkCmdSetStencilCompareMask", reinterpret_cast(CmdSetStencilCompareMask)}, + {"vkCmdSetStencilWriteMask", reinterpret_cast(CmdSetStencilWriteMask)}, + {"vkCmdSetStencilReference", reinterpret_cast(CmdSetStencilReference)}, + {"vkCmdBindDescriptorSets", reinterpret_cast(CmdBindDescriptorSets)}, + {"vkCmdBindVertexBuffers", reinterpret_cast(CmdBindVertexBuffers)}, + {"vkCmdBindIndexBuffer", reinterpret_cast(CmdBindIndexBuffer)}, + {"vkCmdDraw", reinterpret_cast(CmdDraw)}, + {"vkCmdDrawIndexed", reinterpret_cast(CmdDrawIndexed)}, + {"vkCmdDrawIndirect", reinterpret_cast(CmdDrawIndirect)}, + {"vkCmdDrawIndexedIndirect", reinterpret_cast(CmdDrawIndexedIndirect)}, + {"vkCmdDispatch", reinterpret_cast(CmdDispatch)}, + {"vkCmdDispatchIndirect", reinterpret_cast(CmdDispatchIndirect)}, + {"vkCmdCopyBuffer", reinterpret_cast(CmdCopyBuffer)}, + {"vkCmdCopyImage", reinterpret_cast(CmdCopyImage)}, + {"vkCmdBlitImage", reinterpret_cast(CmdBlitImage)}, + {"vkCmdCopyBufferToImage", reinterpret_cast(CmdCopyBufferToImage)}, + {"vkCmdCopyImageToBuffer", reinterpret_cast(CmdCopyImageToBuffer)}, + {"vkCmdUpdateBuffer", reinterpret_cast(CmdUpdateBuffer)}, + {"vkCmdFillBuffer", reinterpret_cast(CmdFillBuffer)}, + {"vkCmdClearColorImage", reinterpret_cast(CmdClearColorImage)}, + {"vkCmdClearDepthStencilImage", reinterpret_cast(CmdClearDepthStencilImage)}, + {"vkCmdClearAttachments", reinterpret_cast(CmdClearAttachments)}, + {"vkCmdResolveImage", reinterpret_cast(CmdResolveImage)}, + {"vkCmdSetEvent", reinterpret_cast(CmdSetEvent)}, + {"vkCmdResetEvent", reinterpret_cast(CmdResetEvent)}, + {"vkCmdWaitEvents", reinterpret_cast(CmdWaitEvents)}, + {"vkCmdPipelineBarrier", reinterpret_cast(CmdPipelineBarrier)}, + {"vkCmdBeginQuery", reinterpret_cast(CmdBeginQuery)}, + {"vkCmdEndQuery", reinterpret_cast(CmdEndQuery)}, + {"vkCmdResetQueryPool", reinterpret_cast(CmdResetQueryPool)}, + {"vkCmdCopyQueryPoolResults", reinterpret_cast(CmdCopyQueryPoolResults)}, + {"vkCmdPushConstants", reinterpret_cast(CmdPushConstants)}, + {"vkCmdWriteTimestamp", reinterpret_cast(CmdWriteTimestamp)}, + {"vkCreateFramebuffer", reinterpret_cast(CreateFramebuffer)}, + {"vkCreateShaderModule", reinterpret_cast(CreateShaderModule)}, + {"vkCreateRenderPass", reinterpret_cast(CreateRenderPass)}, + {"vkCmdBeginRenderPass", reinterpret_cast(CmdBeginRenderPass)}, + {"vkCmdNextSubpass", reinterpret_cast(CmdNextSubpass)}, + {"vkCmdEndRenderPass", reinterpret_cast(CmdEndRenderPass)}, + {"vkCmdExecuteCommands", reinterpret_cast(CmdExecuteCommands)}, + {"vkSetEvent", reinterpret_cast(SetEvent)}, + {"vkMapMemory", reinterpret_cast(MapMemory)}, + {"vkUnmapMemory", reinterpret_cast(UnmapMemory)}, + {"vkFlushMappedMemoryRanges", reinterpret_cast(FlushMappedMemoryRanges)}, + {"vkInvalidateMappedMemoryRanges", reinterpret_cast(InvalidateMappedMemoryRanges)}, + {"vkAllocateMemory", reinterpret_cast(AllocateMemory)}, + {"vkFreeMemory", reinterpret_cast(FreeMemory)}, + {"vkBindBufferMemory", reinterpret_cast(BindBufferMemory)}, + {"vkGetBufferMemoryRequirements", reinterpret_cast(GetBufferMemoryRequirements)}, + {"vkGetImageMemoryRequirements", reinterpret_cast(GetImageMemoryRequirements)}, + {"vkGetQueryPoolResults", reinterpret_cast(GetQueryPoolResults)}, + {"vkBindImageMemory", reinterpret_cast(BindImageMemory)}, + {"vkQueueBindSparse", reinterpret_cast(QueueBindSparse)}, + {"vkCreateSemaphore", reinterpret_cast(CreateSemaphore)}, + {"vkCreateEvent", reinterpret_cast(CreateEvent)}, }; for (size_t i = 0; i < ARRAY_SIZE(core_device_commands); i++) {