mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-11-13 09:20:13 +00:00
Unify Vulkan RenderState tracking in Loading & Replay: Event APIs
- Serialise_vkCmdSetEvent - Serialise_vkCmdResetEvent - Serialise_vkCmdWaitEvents - Serialise_vkCmdSetEvent2 - Serialise_vkCmdResetEvent2 - Serialise_vkCmdWaitEvents2
This commit is contained in:
1 parent
1aec6913b7
commit
e3f42ff51f
1 file changed
+111
-135
@@ -626,17 +626,14 @@ bool WrappedVulkan::Serialise_vkCmdSetEvent(SerialiserType &ser, VkCommandBuffer
|
||||
m_LastCmdBufferID = GetResID(commandBuffer);
|
||||
|
||||
// see top of this file for current event/fence handling
|
||||
|
||||
if(IsActiveReplaying(m_State))
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
{
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
bool loading = IsLoading(m_State);
|
||||
if(!loading)
|
||||
commandBuffer = RerecordCmdBuf(m_LastCmdBufferID);
|
||||
else
|
||||
commandBuffer = VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
// if(commandBuffer != VK_NULL_HANDLE)
|
||||
// ObjDisp(commandBuffer)->CmdSetEvent(Unwrap(commandBuffer), Unwrap(event), stageMask);
|
||||
// ObjDisp(commandBuffer)->CmdSetEvent(Unwrap(commandBuffer), Unwrap(event), stageMask);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -681,17 +678,12 @@ bool WrappedVulkan::Serialise_vkCmdResetEvent(SerialiserType &ser, VkCommandBuff
|
||||
m_LastCmdBufferID = GetResID(commandBuffer);
|
||||
|
||||
// see top of this file for current event/fence handling
|
||||
|
||||
if(IsActiveReplaying(m_State))
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
{
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
bool loading = IsLoading(m_State);
|
||||
if(!loading)
|
||||
commandBuffer = RerecordCmdBuf(m_LastCmdBufferID);
|
||||
else
|
||||
commandBuffer = VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
if(commandBuffer != VK_NULL_HANDLE)
|
||||
{
|
||||
// ObjDisp(commandBuffer)->CmdResetEvent(Unwrap(commandBuffer), Unwrap(event), mask);
|
||||
}
|
||||
}
|
||||
@@ -767,57 +759,53 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents(
|
||||
{
|
||||
m_LastCmdBufferID = GetResID(commandBuffer);
|
||||
|
||||
for(uint32_t i = 0; i < bufferMemoryBarrierCount; i++)
|
||||
bool loading = IsLoading(m_State);
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
{
|
||||
if(pBufferMemoryBarriers[i].buffer != VK_NULL_HANDLE)
|
||||
{
|
||||
bufBarriers.push_back(pBufferMemoryBarriers[i]);
|
||||
bufBarriers.back().buffer = Unwrap(bufBarriers.back().buffer);
|
||||
|
||||
RemapQueueFamilyIndices(bufBarriers.back().srcQueueFamilyIndex,
|
||||
bufBarriers.back().dstQueueFamilyIndex);
|
||||
}
|
||||
}
|
||||
|
||||
for(uint32_t i = 0; i < imageMemoryBarrierCount; i++)
|
||||
{
|
||||
if(pImageMemoryBarriers[i].image != VK_NULL_HANDLE)
|
||||
{
|
||||
imgBarriers.push_back(pImageMemoryBarriers[i]);
|
||||
imgBarriers.back().image = Unwrap(imgBarriers.back().image);
|
||||
|
||||
RemapQueueFamilyIndices(imgBarriers.back().srcQueueFamilyIndex,
|
||||
imgBarriers.back().dstQueueFamilyIndex);
|
||||
}
|
||||
}
|
||||
|
||||
// see top of this file for current event/fence handling
|
||||
|
||||
VkEventCreateInfo evInfo = {
|
||||
VK_STRUCTURE_TYPE_EVENT_CREATE_INFO,
|
||||
NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
if(IsActiveReplaying(m_State))
|
||||
{
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
if(!loading)
|
||||
commandBuffer = RerecordCmdBuf(m_LastCmdBufferID);
|
||||
else
|
||||
commandBuffer = VK_NULL_HANDLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
for(uint32_t i = 0; i < bufferMemoryBarrierCount; i++)
|
||||
{
|
||||
if(pBufferMemoryBarriers[i].buffer != VK_NULL_HANDLE)
|
||||
{
|
||||
bufBarriers.push_back(pBufferMemoryBarriers[i]);
|
||||
bufBarriers.back().buffer = Unwrap(bufBarriers.back().buffer);
|
||||
|
||||
RemapQueueFamilyIndices(bufBarriers.back().srcQueueFamilyIndex,
|
||||
bufBarriers.back().dstQueueFamilyIndex);
|
||||
}
|
||||
}
|
||||
|
||||
for(uint32_t i = 0; i < imageMemoryBarrierCount; i++)
|
||||
{
|
||||
const VkImageMemoryBarrier &b = pImageMemoryBarriers[i];
|
||||
if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED)
|
||||
AddEventResourceUsage(GetResID(b.image), ResourceUsage::Discard);
|
||||
if(pImageMemoryBarriers[i].image != VK_NULL_HANDLE)
|
||||
{
|
||||
imgBarriers.push_back(pImageMemoryBarriers[i]);
|
||||
imgBarriers.back().image = Unwrap(imgBarriers.back().image);
|
||||
|
||||
RemapQueueFamilyIndices(imgBarriers.back().srcQueueFamilyIndex,
|
||||
imgBarriers.back().dstQueueFamilyIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// see top of this file for current event/fence handling
|
||||
VkEventCreateInfo evInfo = {
|
||||
VK_STRUCTURE_TYPE_EVENT_CREATE_INFO,
|
||||
NULL,
|
||||
0,
|
||||
};
|
||||
|
||||
if(loading)
|
||||
{
|
||||
for(uint32_t i = 0; i < imageMemoryBarrierCount; i++)
|
||||
{
|
||||
const VkImageMemoryBarrier &b = pImageMemoryBarriers[i];
|
||||
if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED)
|
||||
AddEventResourceUsage(GetResID(b.image), ResourceUsage::Discard);
|
||||
}
|
||||
}
|
||||
|
||||
if(commandBuffer != VK_NULL_HANDLE)
|
||||
{
|
||||
// don't wrap this event
|
||||
VkEvent ev = VK_NULL_HANDLE;
|
||||
ObjDisp(commandBuffer)->CreateEvent(Unwrap(GetDev()), &evInfo, NULL, &ev);
|
||||
@@ -843,7 +831,7 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents(
|
||||
memoryBarrierCount, pMemoryBarriers, (uint32_t)bufBarriers.size(),
|
||||
bufBarriers.data(), (uint32_t)imgBarriers.size(), imgBarriers.data());
|
||||
|
||||
if(m_ReplayOptions.optimisation != ReplayOptimisationLevel::Fastest)
|
||||
if(!loading && m_ReplayOptions.optimisation != ReplayOptimisationLevel::Fastest)
|
||||
{
|
||||
for(uint32_t i = 0; i < imageMemoryBarrierCount; i++)
|
||||
{
|
||||
@@ -1136,17 +1124,14 @@ bool WrappedVulkan::Serialise_vkCmdSetEvent2(SerialiserType &ser, VkCommandBuffe
|
||||
m_LastCmdBufferID = GetResID(commandBuffer);
|
||||
|
||||
// see top of this file for current event/fence handling
|
||||
|
||||
if(IsActiveReplaying(m_State))
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
{
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
bool loading = IsLoading(m_State);
|
||||
if(!loading)
|
||||
commandBuffer = RerecordCmdBuf(m_LastCmdBufferID);
|
||||
else
|
||||
commandBuffer = VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
// if(commandBuffer != VK_NULL_HANDLE)
|
||||
// ObjDisp(commandBuffer)->CmdSetEvent2(Unwrap(commandBuffer), Unwrap(event), &DependencyInfo);
|
||||
// ObjDisp(commandBuffer)->CmdSetEvent2(Unwrap(commandBuffer), Unwrap(event), &DependencyInfo);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -1198,20 +1183,14 @@ bool WrappedVulkan::Serialise_vkCmdResetEvent2(SerialiserType &ser, VkCommandBuf
|
||||
|
||||
if(IsReplayingAndReading())
|
||||
{
|
||||
m_LastCmdBufferID = GetResID(commandBuffer);
|
||||
|
||||
// see top of this file for current event/fence handling
|
||||
|
||||
if(IsActiveReplaying(m_State))
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
{
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
bool loading = IsLoading(m_State);
|
||||
if(!loading)
|
||||
commandBuffer = RerecordCmdBuf(m_LastCmdBufferID);
|
||||
else
|
||||
commandBuffer = VK_NULL_HANDLE;
|
||||
}
|
||||
|
||||
if(commandBuffer != VK_NULL_HANDLE)
|
||||
{
|
||||
// ObjDisp(commandBuffer)->CmdResetEvent2(Unwrap(commandBuffer), Unwrap(event), stageMask);
|
||||
}
|
||||
}
|
||||
@@ -1264,70 +1243,67 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents2(SerialiserType &ser, VkCommandBuf
|
||||
{
|
||||
m_LastCmdBufferID = GetResID(commandBuffer);
|
||||
|
||||
rdcarray<VkImageMemoryBarrier2> imgBarriers;
|
||||
rdcarray<VkBufferMemoryBarrier2> bufBarriers;
|
||||
|
||||
for(uint32_t evIdx = 0; evIdx < eventCount; evIdx++)
|
||||
bool loading = IsLoading(m_State);
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
{
|
||||
imgBarriers.clear();
|
||||
bufBarriers.clear();
|
||||
if(!loading)
|
||||
commandBuffer = RerecordCmdBuf(m_LastCmdBufferID);
|
||||
|
||||
const VkDependencyInfo &depInfo = pDependencyInfos[evIdx];
|
||||
rdcarray<VkImageMemoryBarrier2> imgBarriers;
|
||||
rdcarray<VkBufferMemoryBarrier2> bufBarriers;
|
||||
|
||||
for(uint32_t i = 0; i < depInfo.bufferMemoryBarrierCount; i++)
|
||||
for(uint32_t evIdx = 0; evIdx < eventCount; evIdx++)
|
||||
{
|
||||
if(depInfo.pBufferMemoryBarriers[i].buffer != VK_NULL_HANDLE)
|
||||
imgBarriers.clear();
|
||||
bufBarriers.clear();
|
||||
|
||||
const VkDependencyInfo &depInfo = pDependencyInfos[evIdx];
|
||||
|
||||
for(uint32_t i = 0; i < depInfo.bufferMemoryBarrierCount; i++)
|
||||
{
|
||||
bufBarriers.push_back(depInfo.pBufferMemoryBarriers[i]);
|
||||
bufBarriers.back().buffer = Unwrap(bufBarriers.back().buffer);
|
||||
if(depInfo.pBufferMemoryBarriers[i].buffer != VK_NULL_HANDLE)
|
||||
{
|
||||
bufBarriers.push_back(depInfo.pBufferMemoryBarriers[i]);
|
||||
bufBarriers.back().buffer = Unwrap(bufBarriers.back().buffer);
|
||||
|
||||
RemapQueueFamilyIndices(bufBarriers.back().srcQueueFamilyIndex,
|
||||
bufBarriers.back().dstQueueFamilyIndex);
|
||||
RemapQueueFamilyIndices(bufBarriers.back().srcQueueFamilyIndex,
|
||||
bufBarriers.back().dstQueueFamilyIndex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(uint32_t i = 0; i < depInfo.imageMemoryBarrierCount; i++)
|
||||
{
|
||||
if(depInfo.pImageMemoryBarriers[i].image != VK_NULL_HANDLE)
|
||||
{
|
||||
imgBarriers.push_back(depInfo.pImageMemoryBarriers[i]);
|
||||
imgBarriers.back().image = Unwrap(imgBarriers.back().image);
|
||||
|
||||
RemapQueueFamilyIndices(imgBarriers.back().srcQueueFamilyIndex,
|
||||
imgBarriers.back().dstQueueFamilyIndex);
|
||||
}
|
||||
}
|
||||
|
||||
// see top of this file for current event/fence handling
|
||||
|
||||
VkDependencyInfo UnwrappedDependencyInfo = depInfo;
|
||||
|
||||
UnwrappedDependencyInfo.pBufferMemoryBarriers = bufBarriers.data();
|
||||
UnwrappedDependencyInfo.bufferMemoryBarrierCount = (uint32_t)bufBarriers.size();
|
||||
UnwrappedDependencyInfo.pImageMemoryBarriers = imgBarriers.data();
|
||||
UnwrappedDependencyInfo.imageMemoryBarrierCount = (uint32_t)imgBarriers.size();
|
||||
|
||||
if(IsActiveReplaying(m_State))
|
||||
{
|
||||
if(InRerecordRange(m_LastCmdBufferID))
|
||||
commandBuffer = RerecordCmdBuf(m_LastCmdBufferID);
|
||||
else
|
||||
commandBuffer = VK_NULL_HANDLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
for(uint32_t i = 0; i < depInfo.imageMemoryBarrierCount; i++)
|
||||
{
|
||||
const VkImageMemoryBarrier2 &b = depInfo.pImageMemoryBarriers[i];
|
||||
if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED &&
|
||||
b.newLayout != VK_IMAGE_LAYOUT_UNDEFINED)
|
||||
AddEventResourceUsage(GetResID(b.image), ResourceUsage::Discard);
|
||||
}
|
||||
}
|
||||
if(depInfo.pImageMemoryBarriers[i].image != VK_NULL_HANDLE)
|
||||
{
|
||||
imgBarriers.push_back(depInfo.pImageMemoryBarriers[i]);
|
||||
imgBarriers.back().image = Unwrap(imgBarriers.back().image);
|
||||
|
||||
if(commandBuffer != VK_NULL_HANDLE)
|
||||
{
|
||||
if(IsLoading(m_State) && evIdx == 0)
|
||||
RemapQueueFamilyIndices(imgBarriers.back().srcQueueFamilyIndex,
|
||||
imgBarriers.back().dstQueueFamilyIndex);
|
||||
}
|
||||
}
|
||||
|
||||
// see top of this file for current event/fence handling
|
||||
|
||||
VkDependencyInfo UnwrappedDependencyInfo = depInfo;
|
||||
|
||||
UnwrappedDependencyInfo.pBufferMemoryBarriers = bufBarriers.data();
|
||||
UnwrappedDependencyInfo.bufferMemoryBarrierCount = (uint32_t)bufBarriers.size();
|
||||
UnwrappedDependencyInfo.pImageMemoryBarriers = imgBarriers.data();
|
||||
UnwrappedDependencyInfo.imageMemoryBarrierCount = (uint32_t)imgBarriers.size();
|
||||
|
||||
if(loading)
|
||||
{
|
||||
for(uint32_t i = 0; i < depInfo.imageMemoryBarrierCount; i++)
|
||||
{
|
||||
const VkImageMemoryBarrier2 &b = depInfo.pImageMemoryBarriers[i];
|
||||
if(b.image != VK_NULL_HANDLE && b.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED &&
|
||||
b.newLayout != VK_IMAGE_LAYOUT_UNDEFINED)
|
||||
AddEventResourceUsage(GetResID(b.image), ResourceUsage::Discard);
|
||||
}
|
||||
}
|
||||
|
||||
if(loading && evIdx == 0)
|
||||
{
|
||||
bool descBarrier = false;
|
||||
|
||||
@@ -1375,8 +1351,8 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents2(SerialiserType &ser, VkCommandBuf
|
||||
continue;
|
||||
}
|
||||
|
||||
if(!IsLoading(m_State) && (barrier.oldLayout == VK_IMAGE_LAYOUT_PREINITIALIZED ||
|
||||
barrier.oldLayout == VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT))
|
||||
if(!loading && (barrier.oldLayout == VK_IMAGE_LAYOUT_PREINITIALIZED ||
|
||||
barrier.oldLayout == VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT))
|
||||
{
|
||||
// This is a transition from PRENITIALIZED, but we've already done this barrier once
|
||||
// (when loading); Since we couldn't transition back to PREINITIALIZED, we instead left
|
||||
@@ -1393,7 +1369,7 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents2(SerialiserType &ser, VkCommandBuf
|
||||
ObjDisp(commandBuffer)->CmdSetEvent2(Unwrap(commandBuffer), ev, &UnwrappedDependencyInfo);
|
||||
ObjDisp(commandBuffer)->CmdWaitEvents2(Unwrap(commandBuffer), 1, &ev, &UnwrappedDependencyInfo);
|
||||
|
||||
if(m_ReplayOptions.optimisation != ReplayOptimisationLevel::Fastest)
|
||||
if(!loading && m_ReplayOptions.optimisation != ReplayOptimisationLevel::Fastest)
|
||||
{
|
||||
for(uint32_t i = 0; i < depInfo.imageMemoryBarrierCount; i++)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user