trying to make it work without -rdynamic
This commit is contained in:
@@ -99,6 +99,7 @@ void CVkCommandBuffer::Render()
|
||||
pCommand->Execute(hBuffer, i);
|
||||
y++;
|
||||
};
|
||||
TryBarrier(y, i);
|
||||
vkEndCommandBuffer(hBuffer);
|
||||
|
||||
i++;
|
||||
@@ -116,8 +117,8 @@ void CVkCommandBuffer::SortDependencies()
|
||||
{
|
||||
m_dependencies = {};
|
||||
m_swapchainDependencies = {};
|
||||
m_dependencies.Resize(m_commands.GetSize());
|
||||
m_swapchainDependencies.Resize(m_commands.GetSize());
|
||||
m_dependencies.Resize(m_commands.GetSize()+1);
|
||||
m_swapchainDependencies.Resize(m_commands.GetSize()+1);
|
||||
m_usedDependencies = {};
|
||||
m_usedSwapchainDependencies = {};
|
||||
|
||||
@@ -142,7 +143,7 @@ void CVkCommandBuffer::SortDependencies()
|
||||
VulkanCommandLastUsage_t stLastUsage = {};
|
||||
stLastUsage.m_nLastUsedCommand = i;
|
||||
stLastUsage.m_dependency = dependency;
|
||||
stLastUsage.m_eLastUsage = DEPENDENCY_MODE_FROM_PREVIOUS;
|
||||
stLastUsage.m_eLastUsage = DEPENDENCY_MODE_NEXT_STAGE;
|
||||
|
||||
if (pLastUsage)
|
||||
stLastUsage.m_eLastUsage = pLastUsage->m_dependency.m_eDependencyMode;
|
||||
@@ -167,7 +168,7 @@ void CVkCommandBuffer::SortDependencies()
|
||||
VulkanSwapchainCommandLastUsage_t stLastUsage = {};
|
||||
stLastUsage.m_nLastUsedCommand = i;
|
||||
stLastUsage.m_dependency = dependency;
|
||||
stLastUsage.m_eLastUsage = DEPENDENCY_MODE_FROM_PREVIOUS;
|
||||
stLastUsage.m_eLastUsage = DEPENDENCY_MODE_NEXT_STAGE;
|
||||
|
||||
if (pLastUsage)
|
||||
stLastUsage.m_eLastUsage = pLastUsage->m_dependency.m_eDependencyMode;
|
||||
@@ -181,6 +182,62 @@ void CVkCommandBuffer::SortDependencies()
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
|
||||
for (auto &pCommand: m_commands)
|
||||
{
|
||||
for ( auto dependency: pCommand->m_dependencies)
|
||||
{
|
||||
VulkanCommandLastUsage_t *pLastUsage = NULL;
|
||||
|
||||
for ( auto &dep: m_usedDependencies )
|
||||
{
|
||||
if (dep.m_dependency.m_pObject == dependency.m_pObject)
|
||||
pLastUsage = &dep;
|
||||
}
|
||||
|
||||
VulkanCommandLastUsage_t stLastUsage = {};
|
||||
stLastUsage.m_nLastUsedCommand = i;
|
||||
stLastUsage.m_dependency = dependency;
|
||||
stLastUsage.m_dependency.m_eDependencyMode = DEPENDENCY_MODE_NEXT_STAGE;
|
||||
stLastUsage.m_eLastUsage = DEPENDENCY_MODE_NEXT_STAGE;
|
||||
|
||||
if (pLastUsage)
|
||||
{
|
||||
stLastUsage.m_eLastUsage = pLastUsage->m_dependency.m_eDependencyMode;
|
||||
if (pLastUsage->m_nLastUsedCommand == i)
|
||||
continue;
|
||||
m_dependencies[i].AppendTail(stLastUsage);
|
||||
m_usedDependencies.AppendTail(stLastUsage);
|
||||
}
|
||||
|
||||
}
|
||||
for ( auto dependency: pCommand->m_swapchainDependencies)
|
||||
{
|
||||
VulkanSwapchainCommandLastUsage_t *pLastUsage = NULL;
|
||||
|
||||
for ( auto &dep: m_usedSwapchainDependencies )
|
||||
{
|
||||
if (dep.m_dependency.m_ppObjects == dependency.m_ppObjects)
|
||||
pLastUsage = &dep;
|
||||
}
|
||||
|
||||
VulkanSwapchainCommandLastUsage_t stLastUsage = {};
|
||||
stLastUsage.m_nLastUsedCommand = i;
|
||||
stLastUsage.m_dependency = dependency;
|
||||
stLastUsage.m_dependency.m_eDependencyMode = DEPENDENCY_MODE_NEXT_STAGE;
|
||||
stLastUsage.m_eLastUsage = DEPENDENCY_MODE_NEXT_STAGE;
|
||||
|
||||
if (pLastUsage)
|
||||
{
|
||||
stLastUsage.m_eLastUsage = pLastUsage->m_dependency.m_eDependencyMode;
|
||||
if (pLastUsage->m_nLastUsedCommand == i)
|
||||
continue;
|
||||
m_swapchainDependencies[i].AppendTail(stLastUsage);
|
||||
m_usedSwapchainDependencies.AppendTail(stLastUsage);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -235,14 +292,17 @@ void CVkCommandBuffer::TryBarrier( int iCurrent, int iCurrentBuffer )
|
||||
imageMemoryBarrier.subresourceRange = pImage->m_range;
|
||||
imageMemoryBarrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
imageMemoryBarrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
imageMemoryBarrier.newLayout = VulkanGetImageLayout(barrier.m_eNewDependency);
|
||||
if (barrier.m_eNewDependency == DEPENDENCY_MODE_NEXT_STAGE)
|
||||
imageMemoryBarrier.newLayout = pImage->m_ePreferredLayout;
|
||||
else
|
||||
imageMemoryBarrier.newLayout = VulkanGetImageLayout(barrier.m_eNewDependency);
|
||||
imageMemoryBarrier.dstStageMask = VulkanGetStageFlags(barrier.m_eNewDependency);
|
||||
imageMemoryBarrier.dstAccessMask = VulkanGetAccessFlags(barrier.m_eNewDependency);
|
||||
if (barrier.m_eOldDependency == DEPENDENCY_MODE_FROM_PREVIOUS)
|
||||
if (barrier.m_eOldDependency == DEPENDENCY_MODE_NEXT_STAGE)
|
||||
{
|
||||
imageMemoryBarrier.oldLayout = VulkanGetImageLayout(DEPENDENCY_MODE_ALL_COMMANDS);
|
||||
imageMemoryBarrier.srcStageMask = VulkanGetStageFlags(DEPENDENCY_MODE_ALL_COMMANDS);
|
||||
imageMemoryBarrier.srcAccessMask = VulkanGetAccessFlags(DEPENDENCY_MODE_ALL_COMMANDS);
|
||||
imageMemoryBarrier.oldLayout = pImage->m_ePreferredLayout;
|
||||
imageMemoryBarrier.srcStageMask = VulkanGetStageFlags(DEPENDENCY_MODE_NEXT_STAGE);
|
||||
imageMemoryBarrier.srcAccessMask = VulkanGetAccessFlags(DEPENDENCY_MODE_NEXT_STAGE);
|
||||
} else {
|
||||
imageMemoryBarrier.oldLayout = VulkanGetImageLayout(barrier.m_eOldDependency);
|
||||
imageMemoryBarrier.srcStageMask = VulkanGetStageFlags(barrier.m_eOldDependency);
|
||||
|
||||
Reference in New Issue
Block a user