mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-16 16:21:02 +00:00
rsx: Rewrite fragment shader invalidation test
This commit is contained in:
parent
a9fad83971
commit
00f1b2bfa7
@ -2642,18 +2642,29 @@ namespace rsx
|
|||||||
|
|
||||||
bool thread::invalidate_fragment_program(u32 dst_dma, u32 dst_offset, u32 size)
|
bool thread::invalidate_fragment_program(u32 dst_dma, u32 dst_offset, u32 size)
|
||||||
{
|
{
|
||||||
const auto [shader_offset, shader_dma] = rsx::method_registers.shader_program_address();
|
if (!current_fragment_program.total_length)
|
||||||
|
|
||||||
if ((dst_dma & CELL_GCM_LOCATION_MAIN) == shader_dma &&
|
|
||||||
address_range::start_length(shader_offset, current_fragment_program.total_length).overlaps(
|
|
||||||
address_range::start_length(dst_offset, size))) [[unlikely]]
|
|
||||||
{
|
{
|
||||||
// Data overlaps
|
// No shader loaded
|
||||||
m_graphics_state |= rsx::pipeline_state::fragment_program_ucode_dirty;
|
return false;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
const auto [shader_offset, shader_dma] = rsx::method_registers.shader_program_address();
|
||||||
|
if ((dst_dma & CELL_GCM_LOCATION_MAIN) != shader_dma)
|
||||||
|
{
|
||||||
|
// Shader not loaded in XDR memory
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto current_fragment_shader_range = address_range::start_length(shader_offset, current_fragment_program.total_length);
|
||||||
|
if (!current_fragment_shader_range.overlaps(address_range::start_length(dst_offset, size)))
|
||||||
|
{
|
||||||
|
// No range overlap
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Data overlaps. Force ucode reload.
|
||||||
|
m_graphics_state |= rsx::pipeline_state::fragment_program_ucode_dirty;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void thread::reset()
|
void thread::reset()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user