diff --git a/rpcs3/Emu/GS/GL/GLGSRender.cpp b/rpcs3/Emu/GS/GL/GLGSRender.cpp index e7a86654e0..7d1554d27e 100644 --- a/rpcs3/Emu/GS/GL/GLGSRender.cpp +++ b/rpcs3/Emu/GS/GL/GLGSRender.cpp @@ -340,13 +340,15 @@ bool GLGSRender::LoadProgram() LOG_WARNING(RSX, "LoadProgram: m_cur_shader_prog == NULL"); return false; } - + + m_cur_shader_prog->ctrl = m_shader_ctrl; + if(!m_cur_vertex_prog) { LOG_WARNING(RSX, "LoadProgram: m_cur_vertex_prog == NULL"); return false; } - + m_fp_buf_num = m_prog_buffer.SearchFp(*m_cur_shader_prog, m_shader_prog); m_vp_buf_num = m_prog_buffer.SearchVp(*m_cur_vertex_prog, m_vertex_prog); diff --git a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp index 665f564c24..1be0f3fc7c 100644 --- a/rpcs3/Emu/GS/GL/GLVertexProgram.cpp +++ b/rpcs3/Emu/GS/GL/GLVertexProgram.cpp @@ -41,7 +41,7 @@ std::string GLVertexDecompilerThread::GetDST(bool isSca) { std::string ret; - switch(d3.dst) + switch(isSca ? 0x1f : d3.dst) { case 0x1f: ret += m_parr.AddParam(PARAM_NONE, "vec4", std::string("tmp") + std::to_string(isSca ? d3.sca_dst_tmp : d0.dst_tmp)); diff --git a/rpcs3/Emu/GS/RSXThread.cpp b/rpcs3/Emu/GS/RSXThread.cpp index c0bb2b1127..9fb0baad3b 100644 --- a/rpcs3/Emu/GS/RSXThread.cpp +++ b/rpcs3/Emu/GS/RSXThread.cpp @@ -972,13 +972,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32 case NV4097_SET_SHADER_CONTROL: { - if(!m_cur_shader_prog) - { - LOG_ERROR(RSX, "NV4097_SET_SHADER_CONTROL: m_cur_shader_prog == NULL"); - break; - } - - m_cur_shader_prog->ctrl = ARGS(0); + m_shader_ctrl = ARGS(0); } break; diff --git a/rpcs3/Emu/GS/RSXThread.h b/rpcs3/Emu/GS/RSXThread.h index 42a0c7695e..a09ebd68b0 100644 --- a/rpcs3/Emu/GS/RSXThread.h +++ b/rpcs3/Emu/GS/RSXThread.h @@ -112,8 +112,8 @@ public: RSXIndexArrayData m_indexed_array; std::vector m_fragment_constants; std::vector m_transform_constants; - - u32 m_cur_shader_prog_num; + + u32 m_shader_ctrl, m_cur_shader_prog_num; RSXShaderProgram m_shader_progs[m_fragment_count]; RSXShaderProgram* m_cur_shader_prog; RSXVertexProgram m_vertex_progs[m_vertex_count]; @@ -428,6 +428,7 @@ protected: RSXThread() : ThreadBase("RSXThread") , m_ctrl(nullptr) + , m_shader_ctrl(0x40) , m_flip_status(0) , m_flip_mode(CELL_GCM_DISPLAY_VSYNC) , m_debug_level(CELL_GCM_DEBUG_LEVEL0)