diff --git a/src/rendering/vulkan/renderer/vk_renderstate.cpp b/src/rendering/vulkan/renderer/vk_renderstate.cpp index 031914101f..dab0d64b38 100644 --- a/src/rendering/vulkan/renderer/vk_renderstate.cpp +++ b/src/rendering/vulkan/renderer/vk_renderstate.cpp @@ -248,6 +248,11 @@ void VkRenderState::ApplyRenderPass(int dt) if (changingRenderPass) { passKey.ClearTargets = mClearTargets; + + // Only clear depth+stencil if the render target actually has that + if (!mRenderTarget.DepthStencil) + passKey.ClearTargets &= ~(CT_Depth | CT_Stencil); + BeginRenderPass(passKey, mCommandBuffer); mRenderPassKey = passKey; mClearTargets = 0; diff --git a/src/rendering/vulkan/system/vk_builders.h b/src/rendering/vulkan/system/vk_builders.h index 2b959aa61b..9f6969d306 100644 --- a/src/rendering/vulkan/system/vk_builders.h +++ b/src/rendering/vulkan/system/vk_builders.h @@ -766,7 +766,7 @@ inline GraphicsPipelineBuilder::GraphicsPipelineBuilder() pipelineInfo.pViewportState = &viewportState; pipelineInfo.pRasterizationState = &rasterizer; pipelineInfo.pMultisampleState = &multisampling; - pipelineInfo.pDepthStencilState = nullptr; + pipelineInfo.pDepthStencilState = &depthStencil; pipelineInfo.pColorBlendState = &colorBlending; pipelineInfo.pDynamicState = &dynamicState; pipelineInfo.subpass = 0; @@ -896,8 +896,6 @@ inline void GraphicsPipelineBuilder::setDepthStencilEnable(bool test, bool write depthStencil.depthTestEnable = test ? VK_TRUE : VK_FALSE; depthStencil.depthWriteEnable = write ? VK_TRUE : VK_FALSE; depthStencil.stencilTestEnable = stencil ? VK_TRUE : VK_FALSE; - - pipelineInfo.pDepthStencilState = (test || write || stencil) ? &depthStencil : nullptr; } inline void GraphicsPipelineBuilder::setStencil(VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp, uint32_t compareMask, uint32_t writeMask, uint32_t reference)