diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.h | 8 |
3 files changed, 11 insertions, 12 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 822739088..ca8247b86 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -135,7 +135,7 @@ void RasterizerOpenGL::Reset() { | |||
| 135 | 135 | ||
| 136 | SetShader(); | 136 | SetShader(); |
| 137 | 137 | ||
| 138 | res_cache.FullFlush(); | 138 | res_cache.InvalidateAll(); |
| 139 | } | 139 | } |
| 140 | 140 | ||
| 141 | void RasterizerOpenGL::AddTriangle(const Pica::Shader::OutputVertex& v0, | 141 | void RasterizerOpenGL::AddTriangle(const Pica::Shader::OutputVertex& v0, |
| @@ -176,8 +176,8 @@ void RasterizerOpenGL::DrawTriangles() { | |||
| 176 | u32 cur_fb_depth_size = Pica::Regs::BytesPerDepthPixel(regs.framebuffer.depth_format) | 176 | u32 cur_fb_depth_size = Pica::Regs::BytesPerDepthPixel(regs.framebuffer.depth_format) |
| 177 | * regs.framebuffer.GetWidth() * regs.framebuffer.GetHeight(); | 177 | * regs.framebuffer.GetWidth() * regs.framebuffer.GetHeight(); |
| 178 | 178 | ||
| 179 | res_cache.NotifyFlush(cur_fb_color_addr, cur_fb_color_size, true); | 179 | res_cache.InvalidateInRange(cur_fb_color_addr, cur_fb_color_size, true); |
| 180 | res_cache.NotifyFlush(cur_fb_depth_addr, cur_fb_depth_size, true); | 180 | res_cache.InvalidateInRange(cur_fb_depth_addr, cur_fb_depth_size, true); |
| 181 | } | 181 | } |
| 182 | 182 | ||
| 183 | void RasterizerOpenGL::CommitFramebuffer() { | 183 | void RasterizerOpenGL::CommitFramebuffer() { |
| @@ -328,7 +328,7 @@ void RasterizerOpenGL::NotifyFlush(PAddr addr, u32 size) { | |||
| 328 | ReloadDepthBuffer(); | 328 | ReloadDepthBuffer(); |
| 329 | 329 | ||
| 330 | // Notify cache of flush in case the region touches a cached resource | 330 | // Notify cache of flush in case the region touches a cached resource |
| 331 | res_cache.NotifyFlush(addr, size); | 331 | res_cache.InvalidateInRange(addr, size); |
| 332 | } | 332 | } |
| 333 | 333 | ||
| 334 | void RasterizerOpenGL::SamplerInfo::Create() { | 334 | void RasterizerOpenGL::SamplerInfo::Create() { |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 10d4ab0b6..a9ad46fe0 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #include "video_core/renderer_opengl/pica_to_gl.h" | 15 | #include "video_core/renderer_opengl/pica_to_gl.h" |
| 16 | 16 | ||
| 17 | RasterizerCacheOpenGL::~RasterizerCacheOpenGL() { | 17 | RasterizerCacheOpenGL::~RasterizerCacheOpenGL() { |
| 18 | FullFlush(); | 18 | InvalidateAll(); |
| 19 | } | 19 | } |
| 20 | 20 | ||
| 21 | MICROPROFILE_DEFINE(OpenGL_TextureUpload, "OpenGL", "Texture Upload", MP_RGB(128, 64, 192)); | 21 | MICROPROFILE_DEFINE(OpenGL_TextureUpload, "OpenGL", "Texture Upload", MP_RGB(128, 64, 192)); |
| @@ -58,8 +58,7 @@ void RasterizerCacheOpenGL::LoadAndBindTexture(OpenGLState &state, unsigned text | |||
| 58 | } | 58 | } |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | void RasterizerCacheOpenGL::NotifyFlush(PAddr addr, u32 size, bool ignore_hash) { | 61 | void RasterizerCacheOpenGL::InvalidateInRange(PAddr addr, u32 size, bool ignore_hash) { |
| 62 | // Flush any texture that falls in the flushed region | ||
| 63 | // TODO: Optimize by also inserting upper bound (addr + size) of each texture into the same map and also narrow using lower_bound | 62 | // TODO: Optimize by also inserting upper bound (addr + size) of each texture into the same map and also narrow using lower_bound |
| 64 | auto cache_upper_bound = texture_cache.upper_bound(addr + size); | 63 | auto cache_upper_bound = texture_cache.upper_bound(addr + size); |
| 65 | 64 | ||
| @@ -77,6 +76,6 @@ void RasterizerCacheOpenGL::NotifyFlush(PAddr addr, u32 size, bool ignore_hash) | |||
| 77 | } | 76 | } |
| 78 | } | 77 | } |
| 79 | 78 | ||
| 80 | void RasterizerCacheOpenGL::FullFlush() { | 79 | void RasterizerCacheOpenGL::InvalidateAll() { |
| 81 | texture_cache.clear(); | 80 | texture_cache.clear(); |
| 82 | } | 81 | } |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h index 98a48ffbe..b69651427 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.h +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.h | |||
| @@ -23,11 +23,11 @@ public: | |||
| 23 | LoadAndBindTexture(state, texture_unit, Pica::DebugUtils::TextureInfo::FromPicaRegister(config.config, config.format)); | 23 | LoadAndBindTexture(state, texture_unit, Pica::DebugUtils::TextureInfo::FromPicaRegister(config.config, config.format)); |
| 24 | } | 24 | } |
| 25 | 25 | ||
| 26 | /// Flush any cached resource that touches the flushed region | 26 | /// Invalidate any cached resource intersecting the specified region. |
| 27 | void NotifyFlush(PAddr addr, u32 size, bool ignore_hash = false); | 27 | void InvalidateInRange(PAddr addr, u32 size, bool ignore_hash = false); |
| 28 | 28 | ||
| 29 | /// Flush all cached OpenGL resources tracked by this cache manager | 29 | /// Invalidate all cached OpenGL resources tracked by this cache manager |
| 30 | void FullFlush(); | 30 | void InvalidateAll(); |
| 31 | 31 | ||
| 32 | private: | 32 | private: |
| 33 | struct CachedTexture { | 33 | struct CachedTexture { |