diff options
Diffstat (limited to 'src/video_core/renderer_opengl')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 23 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 1 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 0089b4b27..3f07fe8bb 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -433,6 +433,29 @@ bool RasterizerOpenGL::MustFlushRegion(VAddr addr, u64 size, VideoCommon::CacheT | |||
| 433 | return false; | 433 | return false; |
| 434 | } | 434 | } |
| 435 | 435 | ||
| 436 | VideoCore::RasterizerDownloadArea RasterizerOpenGL::GetFlushArea(VAddr addr, u64 size) { | ||
| 437 | { | ||
| 438 | std::scoped_lock lock{texture_cache.mutex}; | ||
| 439 | auto area = texture_cache.GetFlushArea(addr, size); | ||
| 440 | if (area) { | ||
| 441 | return *area; | ||
| 442 | } | ||
| 443 | } | ||
| 444 | { | ||
| 445 | std::scoped_lock lock{buffer_cache.mutex}; | ||
| 446 | auto area = buffer_cache.GetFlushArea(addr, size); | ||
| 447 | if (area) { | ||
| 448 | return *area; | ||
| 449 | } | ||
| 450 | } | ||
| 451 | VideoCore::RasterizerDownloadArea new_area{ | ||
| 452 | .start_address = Common::AlignDown(addr, Core::Memory::YUZU_PAGESIZE), | ||
| 453 | .end_address = Common::AlignUp(addr + size, Core::Memory::YUZU_PAGESIZE), | ||
| 454 | .preemtive = true, | ||
| 455 | }; | ||
| 456 | return new_area; | ||
| 457 | } | ||
| 458 | |||
| 436 | void RasterizerOpenGL::InvalidateRegion(VAddr addr, u64 size, VideoCommon::CacheType which) { | 459 | void RasterizerOpenGL::InvalidateRegion(VAddr addr, u64 size, VideoCommon::CacheType which) { |
| 437 | MICROPROFILE_SCOPE(OpenGL_CacheManagement); | 460 | MICROPROFILE_SCOPE(OpenGL_CacheManagement); |
| 438 | if (addr == 0 || size == 0) { | 461 | if (addr == 0 || size == 0) { |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index ad6978bd0..410d8ffc5 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h | |||
| @@ -95,6 +95,7 @@ public: | |||
| 95 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; | 95 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; |
| 96 | bool MustFlushRegion(VAddr addr, u64 size, | 96 | bool MustFlushRegion(VAddr addr, u64 size, |
| 97 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; | 97 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; |
| 98 | VideoCore::RasterizerDownloadArea GetFlushArea(VAddr addr, u64 size) override; | ||
| 98 | void InvalidateRegion(VAddr addr, u64 size, | 99 | void InvalidateRegion(VAddr addr, u64 size, |
| 99 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; | 100 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; |
| 100 | void OnCPUWrite(VAddr addr, u64 size) override; | 101 | void OnCPUWrite(VAddr addr, u64 size) override; |