lots of updates

This commit is contained in:
2026-02-19 00:39:20 +02:00
parent 898bf90504
commit 4dd2e13c48
53 changed files with 1495 additions and 250 deletions

View File

@@ -62,7 +62,11 @@ CVkImage::CVkImage( uint32_t nWidth, uint32_t nHeight, uint32_t nDepth, EImageFo
m_eMultisampleType = eMultisampleType;
m_eImageType = eImageType;
m_eFormat = eFormat;
m_ePreferredLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
if (eFormat == IMAGE_FORMAT_D32_SFLOAT)
m_ePreferredLayout = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL;
else
m_ePreferredLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
CreateImage(nWidth, nHeight, eFormat, eMultisampleType, eUsage);
CreateImageView();
}
@@ -211,7 +215,7 @@ CVkBuffer::CVkBuffer( uint32_t nSize, VkBufferUsageFlags2 eUsage, uint32_t nAlig
CVkBuffer::~CVkBuffer()
{
vmaDestroyBuffer(s_vkAllocator, m_buffer, m_allocation);
}
@@ -233,7 +237,9 @@ void *CVkBuffer::Map()
void *pData;
pData = NULL;
vmaMapMemory(s_vkAllocator, m_allocation, &pData);
VkResult r = vmaMapMemory(s_vkAllocator, m_allocation, &pData);
VULKAN_RESULT_PRINT(r, vmaMapMemory);
return pData;
}
@@ -295,6 +301,10 @@ private:
CUtlVector<VulkanWindow_t> m_renderWindows;
CUtlVector<CVkMaterial*> m_pMaterials;
CUtlVector<CVkRenderCommandList*> m_scheduledRemovalLists;
CUtlVector<CVkBuffer*> m_scheduledRemovalBuffers;
CUtlVector<CVkImage*> m_scheduledRemovalImages;
};
EXPOSE_INTERFACE(CVkRenderContext, IRenderContext, RENDER_CONTEXT_INTERFACE_VERSION);
@@ -366,7 +376,7 @@ IImage *CVkRenderContext::CreateStorageImage( uint32_t x, uint32_t y, EImageForm
void CVkRenderContext::DestroyBuffer( IBuffer *pBuffer )
{
delete (CVkBuffer*)pBuffer;
m_scheduledRemovalBuffers.AppendTail((CVkBuffer*)pBuffer);
}
void CVkRenderContext::DestroyImage( IImage *pImage )
@@ -412,7 +422,7 @@ IRenderCommandList *CVkRenderContext::CreateCommandList()
void CVkRenderContext::DestroyCommandList( IRenderCommandList *pCommandList )
{
m_scheduledRemovalLists.AppendTail((CVkRenderCommandList*)pCommandList);
}
void CVkRenderContext::SubmitCommandList(IRenderCommandList *pList)
@@ -711,6 +721,21 @@ void CVkRenderContext::Frame( float fDeltaTime )
s.m_uCurrentFrame = (s.m_uCurrentFrame + 1) % FRAMES_IN_FLIGHT;
}
m_pCommandBufferManager->RenderingFinished();
vkDeviceWaitIdle(s_vkDevice);
for (auto &a: m_scheduledRemovalBuffers)
{
delete a;
}
for (auto &a: m_scheduledRemovalLists)
{
delete a;
}
m_scheduledRemovalLists = {};
m_scheduledRemovalBuffers = {};
m_pCommandBufferManager->FreeCommandBufferWithCommands(s_pPresentCommandBuffer);
vkDeviceWaitIdle(s_vkDevice);
}
VulkanWindow_t CVkRenderContext::CreateSwapchain( IGameWindow *pWindow )