From ea6f3ff5ede6274af492cab6fe5e40a70c561b91 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Tue, 12 Jul 2016 23:10:26 +0300 Subject: [PATCH] gl: Properly determine front face winding --- rpcs3/Emu/RSX/GL/GLGSRender.cpp | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 4d3024cdeb..9a1a4795b8 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -23,17 +23,6 @@ namespace } throw EXCEPTION("Unknown depth format"); } - - u32 get_front_face_ccw(u32 ffv) - { - switch (ffv) - { - default: // Disgaea 3 pass some garbage value at startup, this is needed to survive. - case CELL_GCM_CW: return GL_CW; - case CELL_GCM_CCW: return GL_CCW; - } - throw EXCEPTION("Unknown front face value: 0x%X", ffv); - } } GLGSRender::GLGSRender() : GSRender(frame_type::OpenGL) @@ -170,10 +159,14 @@ namespace GLenum front_face(rsx::front_face op) { + GLenum mask = 0; + if (rsx::to_window_origin((rsx::method_registers[NV4097_SET_SHADER_WINDOW] >> 12) & 0xf) == rsx::window_origin::bottom) + mask = 1; + switch (op) { - case rsx::front_face::cw: return GL_CW; - case rsx::front_face::ccw: return GL_CCW; + case rsx::front_face::cw: return GL_CW ^ mask; + case rsx::front_face::ccw: return GL_CCW ^ mask; } throw; }