rsx: Critical pipeline fixes

- Fix scissor and viewport binding behavior
- Fixes recovery if empty scissor is specified and then 'fixed' later
- Optimizes state binding a bit
This commit is contained in:
kd-11 2018-10-28 15:20:53 +03:00 committed by kd-11
parent 1ad76ad331
commit 54ec363e88
7 changed files with 93 additions and 29 deletions

View file

@ -650,7 +650,7 @@ namespace rsx
}
}
void set_vertex_env_dirty_bit(thread* rsx, u32 reg, u32 arg)
void set_vertex_env_dirty_bit(thread* rsx, u32, u32 arg)
{
if (arg != method_registers.register_previous_value)
{
@ -658,7 +658,7 @@ namespace rsx
}
}
void set_fragment_env_dirty_bit(thread* rsx, u32 reg, u32 arg)
void set_fragment_env_dirty_bit(thread* rsx, u32, u32 arg)
{
if (arg != method_registers.register_previous_value)
{
@ -666,6 +666,14 @@ namespace rsx
}
}
void set_scissor_dirty_bit(thread* rsx, u32 reg, u32 arg)
{
if (arg != method_registers.register_previous_value)
{
rsx->m_graphics_state |= rsx::pipeline_state::scissor_config_state_dirty;
}
}
template<u32 index>
struct set_texture_dirty_bit
{
@ -2729,6 +2737,8 @@ namespace rsx
bind<NV4097_SET_SHADER_PACKER, nv4097::set_ROP_state_dirty_bit>();
bind<NV4097_SET_SHADER_WINDOW, nv4097::set_ROP_state_dirty_bit>();
bind<NV4097_SET_FOG_MODE, nv4097::set_ROP_state_dirty_bit>();
bind<NV4097_SET_SCISSOR_HORIZONTAL, nv4097::set_scissor_dirty_bit>();
bind<NV4097_SET_SCISSOR_VERTICAL, nv4097::set_scissor_dirty_bit>();
bind_array<NV4097_SET_FOG_PARAMS, 1, 2, nv4097::set_ROP_state_dirty_bit>();
bind_range<NV4097_SET_VIEWPORT_SCALE, 1, 3, nv4097::set_viewport_dirty_bit>();
bind_range<NV4097_SET_VIEWPORT_OFFSET, 1, 3, nv4097::set_viewport_dirty_bit>();