mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-23 03:02:53 +01:00
rsx: Propagate surface format changes to shader ROP control
This commit is contained in:
parent
1a60fb3c96
commit
388d090b91
@ -3335,6 +3335,11 @@ struct registers_decoder<NV4097_SET_SURFACE_FORMAT>
|
|||||||
{
|
{
|
||||||
return bf_decoder<24, 8>(value);
|
return bf_decoder<24, 8>(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool is_integer_color_format() const
|
||||||
|
{
|
||||||
|
return color_fmt() < surface_color_format::w16z16y16x16;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::string dump(const decoded_type& decoded)
|
static std::string dump(const decoded_type& decoded)
|
||||||
|
@ -801,12 +801,16 @@ namespace rsx
|
|||||||
|
|
||||||
void set_surface_format(thread* rsx, u32 reg, u32 arg)
|
void set_surface_format(thread* rsx, u32 reg, u32 arg)
|
||||||
{
|
{
|
||||||
// Special consideration - antialiasing control can affect ROP state
|
if (reg == NV4097_SET_SURFACE_FORMAT)
|
||||||
const auto aa_mask = (0xF << 12);
|
|
||||||
if ((arg & aa_mask) != (method_registers.register_previous_value & aa_mask))
|
|
||||||
{
|
{
|
||||||
// Antialias control has changed, update ROP parameters
|
const auto current = method_registers.decode<NV4097_SET_SURFACE_FORMAT>(arg);
|
||||||
rsx->m_graphics_state |= rsx::pipeline_state::fragment_state_dirty;
|
const auto previous = method_registers.decode<NV4097_SET_SURFACE_FORMAT>(method_registers.register_previous_value);
|
||||||
|
|
||||||
|
if (current.antialias() != previous.antialias() || // Antialias control has changed, update ROP parameters
|
||||||
|
current.is_integer_color_format() != previous.is_integer_color_format()) // The type of color format also requires ROP control update
|
||||||
|
{
|
||||||
|
rsx->m_graphics_state |= rsx::pipeline_state::fragment_state_dirty;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set_surface_dirty_bit(rsx, reg, arg);
|
set_surface_dirty_bit(rsx, reg, arg);
|
||||||
|
@ -454,6 +454,12 @@ namespace rsx
|
|||||||
return decoded_type<opcode>(register_value);
|
return decoded_type<opcode>(register_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<u32 opcode>
|
||||||
|
decoded_type<opcode> decode(u32 register_value) const
|
||||||
|
{
|
||||||
|
return decoded_type<opcode>(register_value);
|
||||||
|
}
|
||||||
|
|
||||||
rsx_state& operator=(const rsx_state& in)
|
rsx_state& operator=(const rsx_state& in)
|
||||||
{
|
{
|
||||||
registers = in.registers;
|
registers = in.registers;
|
||||||
|
Loading…
Reference in New Issue
Block a user