diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2023-04-30 17:14:06 +0200 |
---|---|---|
committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2023-05-07 23:46:12 +0200 |
commit | c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4 (patch) | |
tree | 0d71092cfad84e47a193917028200e2fc216f5e6 /src/video_core/renderer_opengl | |
parent | Merge pull request #10097 from german77/nfp_full (diff) | |
download | yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.gz yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.bz2 yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.lz yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.xz yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.zst yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.zip |
Diffstat (limited to '')
-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 return false; } +VideoCore::RasterizerDownloadArea RasterizerOpenGL::GetFlushArea(VAddr addr, u64 size) { + { + std::scoped_lock lock{texture_cache.mutex}; + auto area = texture_cache.GetFlushArea(addr, size); + if (area) { + return *area; + } + } + { + std::scoped_lock lock{buffer_cache.mutex}; + auto area = buffer_cache.GetFlushArea(addr, size); + if (area) { + return *area; + } + } + VideoCore::RasterizerDownloadArea new_area{ + .start_address = Common::AlignDown(addr, Core::Memory::YUZU_PAGESIZE), + .end_address = Common::AlignUp(addr + size, Core::Memory::YUZU_PAGESIZE), + .preemtive = true, + }; + return new_area; +} + void RasterizerOpenGL::InvalidateRegion(VAddr addr, u64 size, VideoCommon::CacheType which) { MICROPROFILE_SCOPE(OpenGL_CacheManagement); 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: VideoCommon::CacheType which = VideoCommon::CacheType::All) override; bool MustFlushRegion(VAddr addr, u64 size, VideoCommon::CacheType which = VideoCommon::CacheType::All) override; + VideoCore::RasterizerDownloadArea GetFlushArea(VAddr addr, u64 size) override; void InvalidateRegion(VAddr addr, u64 size, VideoCommon::CacheType which = VideoCommon::CacheType::All) override; void OnCPUWrite(VAddr addr, u64 size) override; |