File tree Expand file tree Collapse file tree 1 file changed +9
-5
lines changed Expand file tree Collapse file tree 1 file changed +9
-5
lines changed Original file line number Diff line number Diff line change @@ -73,6 +73,7 @@ void CDirect3DEvents9::OnBeginScene(IDirect3DDevice9* pDevice)
7373
7474bool CDirect3DEvents9::OnEndScene (IDirect3DDevice9* pDevice)
7575{
76+ CloseActiveShader ();
7677 return true ;
7778}
7879
@@ -94,22 +95,22 @@ void CDirect3DEvents9::OnInvalidate(IDirect3DDevice9* pDevice)
9495 g_pCore->GetGraphics ()->GetRenderItemManager ()->SaveReadableDepthBuffer ();
9596 g_pCore->GetGraphics ()->GetRenderItemManager ()->FlushNonAARenderTarget ();
9697
98+ // Ensure any in-progress effect passes are wrapped up before ending the scene
99+ CloseActiveShader ();
100+
97101 if (g_bInMTAScene || g_bInGTAScene)
98102 {
99103 const HRESULT hrEndScene = pDevice->EndScene ();
100104 if (FAILED (hrEndScene))
101105 WriteDebugEvent (SString (" OnInvalidate: EndScene failed: %08x" , hrEndScene));
102106 }
103-
104- CloseActiveShader ();
105107 }
106108 else
107109 {
110+ CloseActiveShader (false );
111+
108112 if (g_bInMTAScene || g_bInGTAScene)
109113 WriteDebugEvent (" OnInvalidate: device lost, skipping EndScene and pending GPU work" );
110-
111- // Prevent reuse of partially configured shader state across device resets without touching the lost device
112- CloseActiveShader (false );
113114 }
114115
115116 g_bInMTAScene = false ;
@@ -219,6 +220,9 @@ void CDirect3DEvents9::OnPresent(IDirect3DDevice9* pDevice)
219220
220221 CGraphics::GetSingleton ().LeavingMTARenderZone ();
221222
223+ // Finalize any lingering shader passes before wrapping the scene
224+ CloseActiveShader ();
225+
222226 // End the scene that we started.
223227 if (g_bInMTAScene)
224228 {
You can’t perform that action at this time.
0 commit comments