mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-13 02:08:49 +12:00
Improved RSX emulation
- Fixed NV4097_SET_SHADER_CONTROL - Vertex Shader: SCA instructions don't override VEC result
This commit is contained in:
parent
bd04990af3
commit
7433a021db
4 changed files with 9 additions and 12 deletions
|
@ -340,13 +340,15 @@ bool GLGSRender::LoadProgram()
|
||||||
LOG_WARNING(RSX, "LoadProgram: m_cur_shader_prog == NULL");
|
LOG_WARNING(RSX, "LoadProgram: m_cur_shader_prog == NULL");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_cur_shader_prog->ctrl = m_shader_ctrl;
|
||||||
|
|
||||||
if(!m_cur_vertex_prog)
|
if(!m_cur_vertex_prog)
|
||||||
{
|
{
|
||||||
LOG_WARNING(RSX, "LoadProgram: m_cur_vertex_prog == NULL");
|
LOG_WARNING(RSX, "LoadProgram: m_cur_vertex_prog == NULL");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_fp_buf_num = m_prog_buffer.SearchFp(*m_cur_shader_prog, m_shader_prog);
|
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);
|
m_vp_buf_num = m_prog_buffer.SearchVp(*m_cur_vertex_prog, m_vertex_prog);
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ std::string GLVertexDecompilerThread::GetDST(bool isSca)
|
||||||
{
|
{
|
||||||
std::string ret;
|
std::string ret;
|
||||||
|
|
||||||
switch(d3.dst)
|
switch(isSca ? 0x1f : d3.dst)
|
||||||
{
|
{
|
||||||
case 0x1f:
|
case 0x1f:
|
||||||
ret += m_parr.AddParam(PARAM_NONE, "vec4", std::string("tmp") + std::to_string(isSca ? d3.sca_dst_tmp : d0.dst_tmp));
|
ret += m_parr.AddParam(PARAM_NONE, "vec4", std::string("tmp") + std::to_string(isSca ? d3.sca_dst_tmp : d0.dst_tmp));
|
||||||
|
|
|
@ -972,13 +972,7 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, mem32_ptr_t args, const u32
|
||||||
|
|
||||||
case NV4097_SET_SHADER_CONTROL:
|
case NV4097_SET_SHADER_CONTROL:
|
||||||
{
|
{
|
||||||
if(!m_cur_shader_prog)
|
m_shader_ctrl = ARGS(0);
|
||||||
{
|
|
||||||
LOG_ERROR(RSX, "NV4097_SET_SHADER_CONTROL: m_cur_shader_prog == NULL");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_cur_shader_prog->ctrl = ARGS(0);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -112,8 +112,8 @@ public:
|
||||||
RSXIndexArrayData m_indexed_array;
|
RSXIndexArrayData m_indexed_array;
|
||||||
std::vector<RSXTransformConstant> m_fragment_constants;
|
std::vector<RSXTransformConstant> m_fragment_constants;
|
||||||
std::vector<RSXTransformConstant> m_transform_constants;
|
std::vector<RSXTransformConstant> 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_shader_progs[m_fragment_count];
|
||||||
RSXShaderProgram* m_cur_shader_prog;
|
RSXShaderProgram* m_cur_shader_prog;
|
||||||
RSXVertexProgram m_vertex_progs[m_vertex_count];
|
RSXVertexProgram m_vertex_progs[m_vertex_count];
|
||||||
|
@ -428,6 +428,7 @@ protected:
|
||||||
RSXThread()
|
RSXThread()
|
||||||
: ThreadBase("RSXThread")
|
: ThreadBase("RSXThread")
|
||||||
, m_ctrl(nullptr)
|
, m_ctrl(nullptr)
|
||||||
|
, m_shader_ctrl(0x40)
|
||||||
, m_flip_status(0)
|
, m_flip_status(0)
|
||||||
, m_flip_mode(CELL_GCM_DISPLAY_VSYNC)
|
, m_flip_mode(CELL_GCM_DISPLAY_VSYNC)
|
||||||
, m_debug_level(CELL_GCM_DEBUG_LEVEL0)
|
, m_debug_level(CELL_GCM_DEBUG_LEVEL0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue