rsx: Texture cache fixes

1. rsx: Rework section synchronization using the new memory mirrors
2. rsx: Tweaks
    - Simplify peeking into the current rsx::thread instance.
      Use a simple rsx::get_current_renderer instead of asking fxm for the same
    - Fix global rsx super memory shm block management
3. rsx: Improve memory validation. test_framebuffer() and
tag_framebuffer() are simplified due to mirror support
4. rsx: Only write back confirmed memory range to avoid overapproximation errors in blit engine
5. rsx: Explicitly mark clobbered flushable sections as dirty to have them
removed
6. rsx: Cumulative fixes
    - Reimplement rsx::buffered_section management routines
    - blit engine subsections are not hit-tested against confirmed/committed memory range
      Not all applications are 'honest' about region bounds, making the real cpu range useless for blit ops
This commit is contained in:
kd-11 2018-05-10 14:50:32 +03:00 committed by kd-11
parent f8a0be8c3e
commit 8fcd5c1e5a
14 changed files with 512 additions and 280 deletions

View file

@ -30,6 +30,7 @@ rsx::frame_capture_data frame_capture;
namespace rsx
{
std::function<bool(u32 addr, bool is_writing)> g_access_violation_handler;
thread* g_current_renderer = nullptr;
//TODO: Restore a working shaders cache
@ -239,10 +240,12 @@ namespace rsx
thread::thread()
{
g_current_renderer = this;
g_access_violation_handler = [this](u32 address, bool is_writing)
{
return on_access_violation(address, is_writing);
};
m_rtts_dirty = true;
memset(m_textures_dirty, -1, sizeof(m_textures_dirty));
memset(m_vertex_textures_dirty, -1, sizeof(m_vertex_textures_dirty));
@ -253,6 +256,7 @@ namespace rsx
thread::~thread()
{
g_access_violation_handler = nullptr;
g_current_renderer = nullptr;
}
void thread::capture_frame(const std::string &name)