From 2ea17e03944f90dfcd79f02b347bc4bb9a8a4ebf Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 9 Jan 2016 23:14:46 +0100 Subject: [PATCH] Fix some issues the validation layers found --- renderdoc/driver/vulkan/vk_core.cpp | 12 ++++++++++-- renderdoc/driver/vulkan/vk_debug.cpp | 3 ++- renderdoc/driver/vulkan/vk_replay.cpp | 5 ++++- .../driver/vulkan/wrappers/vk_resource_funcs.cpp | 4 ++-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 3fb014fa0..249289183 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1927,9 +1927,17 @@ VkBool32 WrappedVulkan::DebugCallback( const char* pLayerPrefix, const char* pMsg) { + // VKTODOHIGH once on new layers, location will be unique enough + // msgCode isn't fine grained enough to ignore just this one type of message - if(pLayerPrefix[0] == 'D' && pLayerPrefix[1] == 'S' && string(pMsg).find("Additional bits in accessMask") != string::npos) - return false; + if(pLayerPrefix[0] == 'D' && pLayerPrefix[1] == 'S') + { + string msg(pMsg); + if(msg.find("Additional bits in accessMask") != string::npos) + return false; + if(msg.find("It is recommended you use RenderPass LOAD_OP_CLEAR") != string::npos) + return false; + } RDCWARN("[%s] %s", pLayerPrefix, pMsg); return false; diff --git a/renderdoc/driver/vulkan/vk_debug.cpp b/renderdoc/driver/vulkan/vk_debug.cpp index 1aac15b4c..e9a2eb246 100644 --- a/renderdoc/driver/vulkan/vk_debug.cpp +++ b/renderdoc/driver/vulkan/vk_debug.cpp @@ -540,6 +540,7 @@ VulkanDebugManager::VulkanDebugManager(WrappedVulkan *driver, VkDevice dev) { VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 128, }, { VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 128, }, { VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 128, }, + { VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 128, }, }; VkDescriptorPoolCreateInfo descpoolInfo = { @@ -4518,7 +4519,7 @@ void VulkanDebugManager::InitPostVSBuffers(uint32_t frameID, uint32_t eventID) // create buffer with unique 0-based indices VkBufferCreateInfo bufInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, NULL, 0, - indices.size()*sizeof(uint32_t), VK_BUFFER_USAGE_INDEX_BUFFER_BIT, + indices.size()*sizeof(uint32_t), VK_BUFFER_USAGE_INDEX_BUFFER_BIT|VK_BUFFER_USAGE_TRANSFER_SRC_BIT, }; vkr = m_pDriver->vkCreateBuffer(dev, &bufInfo, NULL, &uniqIdxBuf); diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index c796db706..15fd55ce4 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -1476,7 +1476,7 @@ FloatVector VulkanReplay::InterpretVertex(byte *data, uint32_t vert, MeshDisplay void VulkanReplay::RenderMesh(uint32_t frameID, uint32_t eventID, const vector &secondaryDraws, MeshDisplay cfg) { - if(cfg.position.buf == ResourceId()) + if(cfg.position.buf == ResourceId() || cfg.position.numVerts == 0) return; auto it = m_OutputWindows.find(m_ActiveWinID); @@ -2548,6 +2548,9 @@ void VulkanReplay::ClearOutputWindowColour(uint64_t id, float col[4]) outw.bbBarrier.newLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; vt->CmdPipelineBarrier(Unwrap(cmd), VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, false, 1, &barrier); + + outw.bbBarrier.srcAccessMask = outw.bbBarrier.dstAccessMask; + outw.bbBarrier.oldLayout = outw.bbBarrier.newLayout; vt->EndCommandBuffer(Unwrap(cmd)); } diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index 36a80a6a3..d55ef1ceb 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -180,7 +180,7 @@ bool WrappedVulkan::Serialise_vkAllocateMemory( VkBufferCreateInfo bufInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, NULL, 0, - info.allocationSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT|VK_BUFFER_USAGE_TRANSFER_DST_BIT, + info.allocationSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT|VK_BUFFER_USAGE_TRANSFER_DST_BIT, }; ret = ObjDisp(device)->CreateBuffer(Unwrap(device), &bufInfo, NULL, &buf); @@ -258,7 +258,7 @@ VkResult WrappedVulkan::vkAllocateMemory( VkBufferCreateInfo bufInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, NULL, 0, - info.allocationSize, VK_BUFFER_USAGE_TRANSFER_DST_BIT|VK_BUFFER_USAGE_TRANSFER_DST_BIT, + info.allocationSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT|VK_BUFFER_USAGE_TRANSFER_DST_BIT, }; ret = ObjDisp(device)->CreateBuffer(Unwrap(device), &bufInfo, NULL, &buf);