diff --git a/renderdoc/driver/vulkan/vk_manager.cpp b/renderdoc/driver/vulkan/vk_manager.cpp index 3df5f1dac..291094298 100644 --- a/renderdoc/driver/vulkan/vk_manager.cpp +++ b/renderdoc/driver/vulkan/vk_manager.cpp @@ -44,9 +44,18 @@ bool VulkanResourceManager::SerialisableResource(ResourceId id, VkResourceRecord return true; } +// debugging logging for transitions +#if 0 +#define TRDBG(...) RDCLOG(__VA_ARGS__) +#else +#define TRDBG(...) +#endif + void VulkanResourceManager::RecordTransitions(vector< pair > &trans, map &states, uint32_t numTransitions, const VkImageMemoryBarrier *transitions) { + TRDBG("Recording %u transitions", numTransitions); + for(uint32_t ti=0; ti < numTransitions; ti++) { const VkImageMemoryBarrier &t = transitions[ti]; @@ -192,6 +201,8 @@ void VulkanResourceManager::RecordTransitions(vector< pair &states, vector &transitions) @@ -246,6 +257,8 @@ void VulkanResourceManager::SerialiseImageStates(Serialiser *m_pSerialiser, map< void VulkanResourceManager::ApplyTransitions(vector< pair > &trans, map &states) { + TRDBG("Applying %u transitions", (uint32_t)trans.size()); + for(size_t ti=0; ti < trans.size(); ti++) { ResourceId id = trans[ti].first; @@ -256,17 +269,35 @@ void VulkanResourceManager::ApplyTransitions(vector< pair%u, %u->%u) from %s to %s", + ToStr::Get(t.range.aspect).c_str(), + t.range.baseMipLevel, t.range.mipLevels, + t.range.baseArraySlice, t.range.arraySize, + ToStr::Get(t.prevstate).c_str(), ToStr::Get(t.state).c_str()); + if(stit == states.end()) continue; bool done = false; + TRDBG("Matching image has %u subresource states", stit->second.subresourceStates.size()); + auto it = stit->second.subresourceStates.begin(); for(; it != stit->second.subresourceStates.end(); ++it) { + TRDBG(".. state %s (%u->%u, %u->%u) from %s to %s", + ToStr::Get(it->range.aspect).c_str(), + it->range.baseMipLevel, it->range.mipLevels, + it->range.baseArraySlice, it->range.arraySize, + ToStr::Get(it->prevstate).c_str(), ToStr::Get(it->state).c_str()); + // image transitions are handled by initially inserting one subresource range for each aspect, // and whenever we need more fine-grained detail we split it immediately for one range for // each subresource in that aspect. Thereafter if a transition comes in that covers multiple