vk: enable depth writing in oit pass so
Make sure both depth attachments are the same at the end of each pass. Get rid of unneeded depth dependency/transition. Issue #996
This commit is contained in:
parent
b9e9cc534c
commit
5df9127add
|
@ -57,16 +57,13 @@ void OITPipelineManager::CreatePipeline(u32 listType, bool autosort, const PolyP
|
|||
depthOp = vk::CompareOp::eGreaterOrEqual;
|
||||
else
|
||||
depthOp = depthOps[pp.isp.DepthMode];
|
||||
bool depthWriteEnable = false;
|
||||
if (pass == Pass::Depth || pass == Pass::Color)
|
||||
{
|
||||
// Z Write Disable seems to be ignored for punch-through.
|
||||
// Fixes Worms World Party, Bust-a-Move 4 and Re-Volt
|
||||
if (listType == ListType_Punch_Through)
|
||||
depthWriteEnable = true;
|
||||
else
|
||||
depthWriteEnable = !pp.isp.ZWriteDis;
|
||||
}
|
||||
bool depthWriteEnable;
|
||||
// Z Write Disable seems to be ignored for punch-through.
|
||||
// Fixes Worms World Party, Bust-a-Move 4 and Re-Volt
|
||||
if (listType == ListType_Punch_Through)
|
||||
depthWriteEnable = true;
|
||||
else
|
||||
depthWriteEnable = !pp.isp.ZWriteDis;
|
||||
|
||||
bool shadowed = pass == Pass::Depth && (listType == ListType_Opaque || listType == ListType_Punch_Through);
|
||||
vk::StencilOpState stencilOpState;
|
||||
|
|
|
@ -36,13 +36,13 @@ vk::UniqueRenderPass RenderPasses::MakeRenderPass(bool initial, bool last)
|
|||
initial ? vk::AttachmentLoadOp::eClear : vk::AttachmentLoadOp::eLoad,
|
||||
last ? vk::AttachmentStoreOp::eDontCare : vk::AttachmentStoreOp::eStore,
|
||||
vk::AttachmentLoadOp::eClear, vk::AttachmentStoreOp::eDontCare,
|
||||
initial ? vk::ImageLayout::eUndefined : vk::ImageLayout::eDepthStencilReadOnlyOptimal, vk::ImageLayout::eDepthStencilReadOnlyOptimal),
|
||||
initial ? vk::ImageLayout::eUndefined : vk::ImageLayout::eDepthStencilAttachmentOptimal, vk::ImageLayout::eDepthStencilAttachmentOptimal),
|
||||
// OP+PT depth attachment for subpass 1
|
||||
vk::AttachmentDescription(vk::AttachmentDescriptionFlags(), GetContext()->GetDepthFormat(), vk::SampleCountFlagBits::e1,
|
||||
initial ? vk::AttachmentLoadOp::eClear : vk::AttachmentLoadOp::eLoad,
|
||||
last ? vk::AttachmentStoreOp::eDontCare : vk::AttachmentStoreOp::eStore,
|
||||
vk::AttachmentLoadOp::eClear, vk::AttachmentStoreOp::eDontCare,
|
||||
initial ? vk::ImageLayout::eUndefined : vk::ImageLayout::eDepthStencilReadOnlyOptimal, vk::ImageLayout::eDepthStencilReadOnlyOptimal),
|
||||
initial ? vk::ImageLayout::eUndefined : vk::ImageLayout::eDepthStencilAttachmentOptimal, vk::ImageLayout::eDepthStencilAttachmentOptimal),
|
||||
};
|
||||
vk::AttachmentReference swapChainReference(0, vk::ImageLayout::eColorAttachmentOptimal);
|
||||
vk::AttachmentReference colorReference(1, vk::ImageLayout::eColorAttachmentOptimal);
|
||||
|
@ -70,17 +70,12 @@ vk::UniqueRenderPass RenderPasses::MakeRenderPass(bool initial, bool last)
|
|||
colorInput,
|
||||
swapChainReference,
|
||||
nullptr,
|
||||
&depthReference2), // depth-only Tr pass when continuation
|
||||
&depthReference), // depth-only Tr pass when continuation
|
||||
};
|
||||
|
||||
std::vector<vk::SubpassDependency> dependencies = GetSubpassDependencies();
|
||||
dependencies.emplace_back(VK_SUBPASS_EXTERNAL, 0, vk::PipelineStageFlagBits::eFragmentShader,
|
||||
vk::PipelineStageFlagBits::eEarlyFragmentTests | vk::PipelineStageFlagBits::eLateFragmentTests,
|
||||
vk::AccessFlagBits::eInputAttachmentRead | vk::AccessFlagBits::eShaderRead,
|
||||
vk::AccessFlagBits::eDepthStencilAttachmentRead | vk::AccessFlagBits::eDepthStencilAttachmentWrite,
|
||||
vk::DependencyFlagBits::eByRegion);
|
||||
dependencies.emplace_back(VK_SUBPASS_EXTERNAL, 1, vk::PipelineStageFlagBits::eFragmentShader, vk::PipelineStageFlagBits::eColorAttachmentOutput,
|
||||
vk::AccessFlagBits::eInputAttachmentRead, vk::AccessFlagBits::eColorAttachmentWrite, vk::DependencyFlagBits::eByRegion),
|
||||
vk::AccessFlagBits::eInputAttachmentRead, vk::AccessFlagBits::eColorAttachmentWrite, vk::DependencyFlagBits::eByRegion);
|
||||
dependencies.emplace_back(0, 1, vk::PipelineStageFlagBits::eLateFragmentTests, vk::PipelineStageFlagBits::eFragmentShader,
|
||||
vk::AccessFlagBits::eDepthStencilAttachmentRead | vk::AccessFlagBits::eDepthStencilAttachmentWrite,
|
||||
vk::AccessFlagBits::eInputAttachmentRead | vk::AccessFlagBits::eShaderRead, vk::DependencyFlagBits::eByRegion);
|
||||
|
|
Loading…
Reference in New Issue