work on basic VR

This commit is contained in:
2026-05-30 20:43:02 +03:00
parent 4811ad0820
commit 3b128315e7
18 changed files with 716 additions and 29 deletions

View File

@@ -198,6 +198,57 @@ void CVkRenderCommandList::DrawPrimitivesIndexed( uint32_t nIndexCount, uint32_t
}
void CVkRenderCommandList::CopyImageToImage( IImage *pSrc, IImage *pDst )
{
SwitchRenderingStage(RENDERING_STAGE_POST_RASTER);
}
void CVkRenderCommandList::BlitImageToImage( IImage *pSrc, ImageSector_t src, IImage *pDst, ImageSector_t dst )
{
SwitchRenderingStage(RENDERING_STAGE_POST_RASTER);
CVkBlitCommand *pCmd = CREATE_COMMAND(m_pCommandBufferManager, Blit);
pCmd->stInputImage.m_eObjectType = FRAME_OBJECT_TYPE_SINGLE;
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;
pCmd->iDstMin[0] = dst.m_iX;
pCmd->iDstMin[1] = dst.m_iY;
pCmd->iDstMin[2] = 0;
pCmd->iSrcMax[0] = src.m_iWidth;
pCmd->iSrcMax[1] = src.m_iHeight;
pCmd->iSrcMax[2] = 1;
pCmd->iDstMax[0] = dst.m_iWidth;
pCmd->iDstMax[1] = dst.m_iHeight;
pCmd->iDstMax[2] = 1;
m_pPostRaster->AddCommand(pCmd);
}
void CVkRenderCommandList::ClearImage( IImage *pImage, float fR, float fG, float fB, float fA )
{
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;
pCmd->a = fA;
pCmd->stImage.m_eObjectType = FRAME_OBJECT_TYPE_SINGLE;
pCmd->stImage.m_pSingle = pImage;
m_pPostRaster->AddCommand(pCmd);
}
void CVkRenderCommandList::ClearDepth( IImage *pImage, float fVal )
{
}
void CVkRenderCommandList::ResolveImage( IImage *pOriginal, IImage *pResolved )
{
SwitchRenderingStage(RENDERING_STAGE_POST_RASTER);
@@ -251,8 +302,11 @@ void CVkRenderCommandList::SwitchRenderingStage( EVulkanRenderingStage eStage )
};
if (eStage == RENDERING_STAGE_POST_RASTER)
{
m_pPostRaster = m_pCommandBufferManager->CreateCommandBuffer();
m_pPostRaster->Reset();
if (m_eCurrentStage != RENDERING_STAGE_POST_RASTER)
{
m_pPostRaster = m_pCommandBufferManager->CreateCommandBuffer();
m_pPostRaster->Reset();
}
}
else
{
@@ -262,6 +316,7 @@ void CVkRenderCommandList::SwitchRenderingStage( EVulkanRenderingStage eStage )
m_pCommandBuffers.AppendTail(m_pPostRaster);
}
}
m_eCurrentStage = eStage;
}
VulkanRenderOutput_t *CVkRenderCommandList::FindOrCreateRenderOutput( uint32_t uIndex )