global update

This commit is contained in:
2026-08-26 15:30:40 +03:00
parent 52aa5803af
commit 8055881fef
28 changed files with 401 additions and 624 deletions
+23 -48
View File
@@ -116,13 +116,8 @@ void CVkRenderCommandList::SetMaterial( IMaterial *pMaterial )
pBeginCommand->images = m_pOutput;
pBeginCommand->nResolutionX = m_uWidth;
pBeginCommand->nResolutionY = m_uHeight;
for ( auto &i: pBeginCommand->images)
{
pBeginCommand->AddDependency(i.m_stImage.m_pSingle, DEPENDENCY_MODE_DRAWCALL_MIXED_IMAGE);
}
if ( m_bDepthEnabled )
{
pBeginCommand->AddDependency(m_depth.m_stImage.m_pSingle, DEPENDENCY_MODE_DRAWCALL_OUTPUT_DEPTH_IMAGE);
pBeginCommand->bDepthEnabled = m_bDepthEnabled;
pBeginCommand->stDepthImage = m_depth;
@@ -161,7 +156,6 @@ void CVkRenderCommandList::SetVertexBuffer( uint32_t uBinding, IVertexBuffer *pB
CVkSetVertexBufferCommand *pCmd = CREATE_COMMAND(m_pCommandBufferManager, SetVertexBuffer);
pCmd->uBinding = uBinding;
pCmd->pBuffer = pBuffer;
pCmd->AddDependency(pBuffer, DEPENDENCY_MODE_BUFFER_SOURCE);
m_pCurrentMaterialBuffer->AddCommand(pCmd);
}
@@ -179,7 +173,6 @@ void CVkRenderCommandList::DrawPrimitives( uint32_t nVertexCount, uint32_t nFirs
pCmd->nFirstVertex = nFirstVertex;
pCmd->nInstanceCount = nInstanceCount;
pCmd->nFirstInstance = nFirstInstance;
FlushBarriers(pCmd);
m_pCurrentMaterialBuffer->AddCommand(pCmd);
}
@@ -204,8 +197,6 @@ void CVkRenderCommandList::BlitImageToImage( IImage *pSrc, ImageSector_t src, II
pCmd->stInputImage.m_pSingle = pSrc;
pCmd->stOutputImage.m_eObjectType = FRAME_OBJECT_TYPE_SINGLE;
pCmd->stOutputImage.m_pSingle = pDst;
pCmd->AddDependency(pSrc, DEPENDENCY_MODE_BLIT_IMAGE_SOURCE);
pCmd->AddDependency(pDst, DEPENDENCY_MODE_BLIT_IMAGE_DESTINATION);
pCmd->iSrcMin[0] = src.m_iX;
pCmd->iSrcMin[1] = src.m_iY;
pCmd->iSrcMin[2] = 0;
@@ -226,7 +217,6 @@ void CVkRenderCommandList::ClearImage( IImage *pImage, float fR, float fG, float
{
SwitchRenderingStage(RENDERING_STAGE_POST_RASTER);
CVkClearColorCommand *pCmd = CREATE_COMMAND(m_pCommandBufferManager, ClearColor);
pCmd->AddDependency(pImage, DEPENDENCY_MODE_COLOR_CLEAR_DESTINATION);
pCmd->r = fR;
pCmd->g = fG;
pCmd->b = fB;
@@ -251,8 +241,6 @@ void CVkRenderCommandList::ResolveImage( IImage *pOriginal, IImage *pResolved )
pCmd->stInputImage.m_pSingle = pOriginal;
pCmd->stOutputImage.m_eObjectType = FRAME_OBJECT_TYPE_SINGLE;
pCmd->stOutputImage.m_pSingle = pResolved;
pCmd->AddDependency(pOriginal, DEPENDENCY_MODE_IMAGE_RESOLVE_SOURCE);
pCmd->AddDependency(pResolved, DEPENDENCY_MODE_IMAGE_RESOLVE_DESTINATION);
m_pPostRaster->AddCommand(pCmd);
}
@@ -266,18 +254,37 @@ void CVkRenderCommandList::EndRecording()
{
SwitchRenderingStage(RENDERING_STAGE_FINISHED);
}
void CVkRenderCommandList::Barrier( IRenderingObject *pObject, bool bIsRead, bool bIsWrite )
void CVkRenderCommandList::Barrier( EStageHazard eBefore, EStageHazard eAfter, uint32_t hazard )
{
m_barriers.AppendTail({pObject, bIsRead, bIsWrite});
SwitchRenderingStage(RENDERING_STAGE_POST_RASTER);
CVkBarrierCommand *pCmd = CREATE_COMMAND(m_pCommandBufferManager, Barrier);
pCmd->eStageIn = eBefore;
pCmd->eStageOut = eAfter;
pCmd->eHazard = hazard;
m_pPostRaster->AddCommand(pCmd);
}
void CVkRenderCommandList::BarrierTransition( IImage *pObject, EImageLayoutHazard old_layout, EImageLayoutHazard layout, EStageHazard eBefore, EStageHazard eAfter, uint32_t hazard )
{
SwitchRenderingStage(RENDERING_STAGE_POST_RASTER);
CVkLayoutBarrierCommand *pCmd = CREATE_COMMAND(m_pCommandBufferManager, LayoutBarrier);
pCmd->eStageIn = eBefore;
pCmd->eStageOut = eAfter;
pCmd->eHazard = hazard;
pCmd->pImage = pObject;
pCmd->eLayoutIn = old_layout;
pCmd->eLayoutOut = layout;
m_pPostRaster->AddCommand(pCmd);
}
void CVkRenderCommandList::DispatchCompute( uint32_t uX, uint32_t uY, uint32_t uZ )
{
SwitchRenderingStage(RENDERING_STAGE_POST_RASTER);
CVkDispatchCommand *pCmd = CREATE_COMMAND(m_pCommandBufferManager, Dispatch);
FlushBarriers(pCmd);
pCmd->uX = uX;
pCmd->uY = uY;
pCmd->uZ = uZ;
@@ -293,38 +300,6 @@ void CVkRenderCommandList::Submit()
}
}
void CVkRenderCommandList::FlushBarriers( CVkCommand *pCmd )
{
for ( auto &b: m_barriers )
{
if (dynamic_cast<CVkBuffer*>(b.pObject))
{
if (b.m_bIsRead)
if (b.m_bIsWrite)
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_BUFFER_READ_WRITE);
else
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_BUFFER_READ);
else
if (b.m_bIsWrite)
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_BUFFER_WRITE);
}
if (dynamic_cast<CVkImage*>(b.pObject))
{
if (b.m_bIsRead)
if (b.m_bIsWrite)
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_IMAGE_READ_WRITE);
else
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_IMAGE_READ);
else
if (b.m_bIsWrite)
pCmd->AddDependency(b.pObject, DEPENDENCY_MODE_SHADER_IMAGE_WRITE);
}
}
m_barriers = {};
}
void CVkRenderCommandList::SwitchRenderingStage( EVulkanRenderingStage eStage )
{
if (eStage != RENDERING_STAGE_RASTER)