trying to make it work without -rdynamic

This commit is contained in:
2025-12-25 16:54:27 +02:00
parent fb5e607f88
commit 352b3b1fc8
22 changed files with 452 additions and 266 deletions

View File

@@ -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);