depth, normals i guess

This commit is contained in:
2026-02-19 22:06:21 +02:00
parent 4dd2e13c48
commit 04b0f02e7f
18 changed files with 129 additions and 55 deletions

View File

@@ -324,9 +324,18 @@ void CVkCommandBuffer::TryBarrier( int iCurrent, int iCurrentBuffer )
imageMemoryBarrier.dstAccessMask = VulkanGetAccessFlags(barrier.m_eNewDependency);
if (barrier.m_eOldDependency == DEPENDENCY_MODE_NEXT_STAGE)
{
imageMemoryBarrier.oldLayout = pImage->m_ePreferredLayout;
imageMemoryBarrier.srcStageMask = VulkanGetStageFlags(DEPENDENCY_MODE_NEXT_STAGE);
imageMemoryBarrier.srcAccessMask = VulkanGetAccessFlags(DEPENDENCY_MODE_NEXT_STAGE);
if (pImage->m_eLastUsage == DEPENDENCY_MODE_JUST_CREATED)
{
imageMemoryBarrier.oldLayout = VulkanGetImageLayout(DEPENDENCY_MODE_JUST_CREATED);
imageMemoryBarrier.srcStageMask = VulkanGetStageFlags(DEPENDENCY_MODE_JUST_CREATED);
imageMemoryBarrier.srcAccessMask = VulkanGetAccessFlags(DEPENDENCY_MODE_JUST_CREATED);
}
else
{
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);

View File

@@ -120,6 +120,21 @@ VkFormat CVkImage::GetImageFormat( enum EImageFormat eImageFormat )
}
}
VkSampleCountFlagBits CVkImage::GetMultisampling( enum EMultisampleType eImageFormat )
{
switch ( eImageFormat )
{
case MULTISAMPLE_TYPE_1_SAMPLES:
return VK_SAMPLE_COUNT_1_BIT;
case MULTISAMPLE_TYPE_2_SAMPLES:
return VK_SAMPLE_COUNT_2_BIT;
case MULTISAMPLE_TYPE_4_SAMPLES:
return VK_SAMPLE_COUNT_4_BIT;
case MULTISAMPLE_TYPE_8_SAMPLES:
return VK_SAMPLE_COUNT_8_BIT;
}
}
void CVkImage::CreateImage( uint32_t nWidth, uint32_t nHeight, EImageFormat eFormat, EMultisampleType eMultisampleType, VkImageUsageFlagBits eUsage )
{
VkImageCreateInfo stCreateInfo = {};
@@ -135,7 +150,7 @@ void CVkImage::CreateImage( uint32_t nWidth, uint32_t nHeight, EImageFormat eFor
stCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
stCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
stCreateInfo.format = GetImageFormat(eFormat);
stCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
stCreateInfo.samples = GetMultisampling(eMultisampleType);
stAlloc.usage = VMA_MEMORY_USAGE_AUTO;

View File

@@ -39,6 +39,10 @@ void CVkShader::SetDepthImage( EImageFormat eFormat )
{
m_eDepthFormat = CVkImage::GetImageFormat(eFormat);
}
void CVkShader::SetMultisampling( EMultisampleType eFormat )
{
m_eMultiSampling = eFormat;
}
void CVkShader::DisablePixelShader( bool bDisable )
{
@@ -143,7 +147,8 @@ void CVkShader::Build()
viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
msaa.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
msaa.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT;
msaa.rasterizationSamples = CVkImage::GetMultisampling(m_eMultiSampling);
render.sType = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO;
render.colorAttachmentCount = m_eFormats.GetSize();

View File

@@ -183,6 +183,7 @@ public:
static VkImageViewType GetImageViewType( enum EImageType eImageType );
static VkFormat GetImageFormat( enum EImageFormat eImageFormat );
static VkSampleCountFlagBits GetMultisampling( enum EMultisampleType eImageFormat );
uint32_t m_nWidth;
uint32_t m_nHeight;
@@ -265,6 +266,7 @@ public:
virtual void SetTopology( ETopologyMode eTopology ) override;
virtual void AddOutputImage( int iImageIndex, EImageFormat eFormat ) override;
virtual void SetDepthImage( EImageFormat eFormat ) override;
virtual void SetMultisampling( EMultisampleType eFormat ) override;
virtual void DisablePixelShader( bool bDisable) override;
virtual void Build() override;
@@ -279,6 +281,7 @@ private:
CUtlVector<VkVertexInputBindingDescription> m_layouts;
CUtlVector<VkVertexInputAttributeDescription> m_attributes;
CUtlVector<VkFormat> m_eFormats;
EMultisampleType m_eMultiSampling;
VkFormat m_eDepthFormat;
bool m_bIsFragmentEnabled;