diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index 187d945932..21f62b562a 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -862,9 +862,15 @@ void GLGSRender::ExecCMD() if(m_set_front_polygon_mode) { glPolygonMode(GL_FRONT, m_front_polygon_mode); - checkForGlError("glPolygonMode"); + checkForGlError("glPolygonMode(Front)"); } + if (m_set_back_polygon_mode) + { + glPolygonMode(GL_BACK, m_back_polygon_mode); + checkForGlError("glPolygonMode(Back)"); + } + Enable(m_depth_test_enable, GL_DEPTH_TEST); Enable(m_set_alpha_test, GL_ALPHA_TEST); Enable(m_set_depth_bounds_test, GL_DEPTH_BOUNDS_TEST_EXT); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index c5a9233279..814684b30c 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -477,6 +477,11 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t& args, const u3 m_front_polygon_mode = ARGS(0); break; + case NV4097_SET_BACK_POLYGON_MODE: + m_set_back_polygon_mode = true; + m_back_polygon_mode = ARGS(0); + break; + case NV4097_CLEAR_ZCULL_SURFACE: { u32 a0 = ARGS(0); diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 7fd5e46bd3..8525193110 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -195,7 +195,9 @@ public: bool m_set_front_polygon_mode; u32 m_front_polygon_mode; - + bool m_set_back_polygon_mode; + u32 m_back_polygon_mode; + u32 m_clear_surface_mask; u32 m_clear_surface_z; u8 m_clear_surface_s;