Skip to content

Commit 0baac58

Browse files
GS/DX11: DS as RT/UAV binding fixes.
Properly unbind state in BeginPresent. Properly update state in OMSetRenderTargets. Also use ds as rt size for Viewport.
1 parent 77236c5 commit 0baac58

1 file changed

Lines changed: 24 additions & 1 deletion

File tree

pcsx2/GS/Renderers/DX11/GSDevice11.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1094,13 +1094,35 @@ GSDevice::PresentResult GSDevice11::BeginPresent(bool frame_skip)
10941094
m_state.rtv = m_swap_chain_rtv.get();
10951095
m_state.rtv->AddRef();
10961096
m_state.current_rt = nullptr;
1097+
1098+
if (m_state.dsv_as_rtv)
1099+
{
1100+
m_state.dsv_as_rtv->Release();
1101+
m_state.dsv_as_rtv = nullptr;
1102+
}
1103+
m_state.current_ds_as_rt = nullptr;
1104+
10971105
if (m_state.dsv)
10981106
{
10991107
m_state.dsv->Release();
11001108
m_state.dsv = nullptr;
11011109
}
11021110
m_state.current_ds = nullptr;
11031111

1112+
if (m_state.rt_uav)
1113+
{
1114+
m_state.rt_uav->Release();
1115+
m_state.rt_uav = nullptr;
1116+
}
1117+
m_state.current_rt_uav = nullptr;
1118+
1119+
if (m_state.ds_uav)
1120+
{
1121+
m_state.ds_uav->Release();
1122+
m_state.ds_uav = nullptr;
1123+
}
1124+
m_state.current_ds_uav = nullptr;
1125+
11041126
g_perfmon.Put(GSPerfMon::RenderPasses, 1);
11051127

11061128
const GSVector2i size = GetWindowSize();
@@ -2926,7 +2948,7 @@ void GSDevice11::OMSetRenderTargets(GSTexture* rt, GSTexture* ds_as_rt, GSTextur
29262948
m_state.dsv_as_rtv->Release();
29272949
if (dsv_as_rtv)
29282950
dsv_as_rtv->AddRef();
2929-
m_state.rtv = dsv_as_rtv;
2951+
m_state.dsv_as_rtv = dsv_as_rtv;
29302952
m_state.current_ds_as_rt = ds_as_rt;
29312953
}
29322954
if (m_state.dsv != dsv)
@@ -2984,6 +3006,7 @@ void GSDevice11::OMSetRenderTargets(GSTexture* rt, GSTexture* ds_as_rt, GSTextur
29843006
{
29853007
const GSVector2i size =
29863008
rt ? rt->GetSize() :
3009+
ds_as_rt ? ds_as_rt->GetSize() :
29873010
ds ? ds->GetSize() :
29883011
(rt_uav_tex && rt_uav_tex != m_null_texture) ? rt_uav_tex->GetSize() :
29893012
ds_uav_tex->GetSize();

0 commit comments

Comments
 (0)