mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-21 22:54:16 +01:00
[d3d11] Flush more around non-multisampled render passes
This commit is contained in:
parent
e820c23216
commit
e31c84640d
@ -929,6 +929,9 @@ namespace dxvk {
|
||||
|
||||
ctx->resolveImage(cDstImage, cSrcImage, region, cFormat);
|
||||
});
|
||||
|
||||
if constexpr (!IsDeferred)
|
||||
GetTypedContext()->m_hasPendingMsaaResolve = false;
|
||||
}
|
||||
|
||||
if (dstTextureInfo->HasSequenceNumber())
|
||||
@ -4901,6 +4904,7 @@ namespace dxvk {
|
||||
return;
|
||||
|
||||
bool needsUpdate = false;
|
||||
bool isMultisampled = false;
|
||||
|
||||
if (likely(NumRTVs != D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL)) {
|
||||
// Native D3D11 does not change the render targets if
|
||||
@ -4920,6 +4924,9 @@ namespace dxvk {
|
||||
|
||||
if (NumUAVs == D3D11_KEEP_UNORDERED_ACCESS_VIEWS)
|
||||
ResolveOmUavHazards(rtv);
|
||||
|
||||
if (rtv && rtv->GetSampleCount() > 1u)
|
||||
isMultisampled = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4929,6 +4936,9 @@ namespace dxvk {
|
||||
m_state.om.dsv = dsv;
|
||||
needsUpdate = true;
|
||||
ResolveOmSrvHazards(dsv);
|
||||
|
||||
if (dsv && dsv->GetSampleCount() > 1u)
|
||||
isMultisampled = true;
|
||||
}
|
||||
|
||||
m_state.om.maxRtv = NumRTVs;
|
||||
@ -4972,7 +4982,12 @@ namespace dxvk {
|
||||
|
||||
if constexpr (!IsDeferred) {
|
||||
// Doing this makes it less likely to flush during render passes
|
||||
GetTypedContext()->ConsiderFlush(GpuFlushType::ImplicitWeakHint);
|
||||
auto imm = GetTypedContext();
|
||||
|
||||
if (!imm->m_hasPendingMsaaResolve || !m_device->perfHints().preferRenderPassOps)
|
||||
imm->ConsiderFlush(GpuFlushType::ImplicitMediumHint);
|
||||
|
||||
imm->m_hasPendingMsaaResolve |= isMultisampled;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1035,6 +1035,9 @@ namespace dxvk {
|
||||
// Notify the device that the context has been flushed,
|
||||
// this resets some resource initialization heuristics.
|
||||
m_parent->NotifyContextFlush();
|
||||
|
||||
// No point in tracking this across submissions
|
||||
m_hasPendingMsaaResolve = false;
|
||||
}
|
||||
|
||||
|
||||
@ -1081,7 +1084,7 @@ namespace dxvk {
|
||||
if (pParent->GetOptions()->reproducibleCommandStream)
|
||||
return GpuFlushType::ExplicitFlush;
|
||||
else if (Device->perfHints().preferRenderPassOps)
|
||||
return GpuFlushType::ImplicitStrongHint;
|
||||
return GpuFlushType::ImplicitMediumHint;
|
||||
else
|
||||
return GpuFlushType::ImplicitWeakHint;
|
||||
}
|
||||
|
@ -131,6 +131,8 @@ namespace dxvk {
|
||||
VkDeviceSize m_discardMemoryCounter = 0u;
|
||||
VkDeviceSize m_discardMemoryOnFlush = 0u;
|
||||
|
||||
bool m_hasPendingMsaaResolve = false;
|
||||
|
||||
D3D10Multithread m_multithread;
|
||||
D3D11VideoContext m_videoContext;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user