diff options
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/rasterizer_cache.h | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer_cache.h | 8 |
3 files changed, 12 insertions, 8 deletions
diff --git a/src/video_core/rasterizer_cache.h b/src/video_core/rasterizer_cache.h index ecd9986a0..9fc9f3056 100644 --- a/src/video_core/rasterizer_cache.h +++ b/src/video_core/rasterizer_cache.h | |||
| @@ -132,7 +132,7 @@ protected: | |||
| 132 | } | 132 | } |
| 133 | 133 | ||
| 134 | /// Register an object into the cache | 134 | /// Register an object into the cache |
| 135 | void Register(const T& object) { | 135 | virtual void Register(const T& object) { |
| 136 | std::lock_guard<std::recursive_mutex> lock{mutex}; | 136 | std::lock_guard<std::recursive_mutex> lock{mutex}; |
| 137 | 137 | ||
| 138 | object->SetIsRegistered(true); | 138 | object->SetIsRegistered(true); |
| @@ -142,7 +142,7 @@ protected: | |||
| 142 | } | 142 | } |
| 143 | 143 | ||
| 144 | /// Unregisters an object from the cache | 144 | /// Unregisters an object from the cache |
| 145 | void Unregister(const T& object) { | 145 | virtual void Unregister(const T& object) { |
| 146 | std::lock_guard<std::recursive_mutex> lock{mutex}; | 146 | std::lock_guard<std::recursive_mutex> lock{mutex}; |
| 147 | 147 | ||
| 148 | object->SetIsRegistered(false); | 148 | object->SetIsRegistered(false); |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp index 57329cd61..7bd0daa57 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.cpp | |||
| @@ -941,7 +941,7 @@ Surface RasterizerCacheOpenGL::GetSurface(const SurfaceParams& params, bool pres | |||
| 941 | // If surface parameters changed and we care about keeping the previous data, recreate | 941 | // If surface parameters changed and we care about keeping the previous data, recreate |
| 942 | // the surface from the old one | 942 | // the surface from the old one |
| 943 | Surface new_surface{RecreateSurface(surface, params)}; | 943 | Surface new_surface{RecreateSurface(surface, params)}; |
| 944 | UnregisterSurface(surface); | 944 | Unregister(surface); |
| 945 | Register(new_surface); | 945 | Register(new_surface); |
| 946 | if (new_surface->IsUploaded()) { | 946 | if (new_surface->IsUploaded()) { |
| 947 | RegisterReinterpretSurface(new_surface); | 947 | RegisterReinterpretSurface(new_surface); |
| @@ -949,7 +949,7 @@ Surface RasterizerCacheOpenGL::GetSurface(const SurfaceParams& params, bool pres | |||
| 949 | return new_surface; | 949 | return new_surface; |
| 950 | } else { | 950 | } else { |
| 951 | // Delete the old surface before creating a new one to prevent collisions. | 951 | // Delete the old surface before creating a new one to prevent collisions. |
| 952 | UnregisterSurface(surface); | 952 | Unregister(surface); |
| 953 | } | 953 | } |
| 954 | } | 954 | } |
| 955 | 955 | ||
| @@ -1304,12 +1304,12 @@ static bool IsReinterpretInvalidSecond(const Surface render_surface, | |||
| 1304 | bool RasterizerCacheOpenGL::PartialReinterpretSurface(Surface triggering_surface, | 1304 | bool RasterizerCacheOpenGL::PartialReinterpretSurface(Surface triggering_surface, |
| 1305 | Surface intersect) { | 1305 | Surface intersect) { |
| 1306 | if (IsReinterpretInvalid(triggering_surface, intersect)) { | 1306 | if (IsReinterpretInvalid(triggering_surface, intersect)) { |
| 1307 | UnregisterSurface(intersect); | 1307 | Unregister(intersect); |
| 1308 | return false; | 1308 | return false; |
| 1309 | } | 1309 | } |
| 1310 | if (!LayerFitReinterpretSurface(*this, triggering_surface, intersect)) { | 1310 | if (!LayerFitReinterpretSurface(*this, triggering_surface, intersect)) { |
| 1311 | if (IsReinterpretInvalidSecond(triggering_surface, intersect)) { | 1311 | if (IsReinterpretInvalidSecond(triggering_surface, intersect)) { |
| 1312 | UnregisterSurface(intersect); | 1312 | Unregister(intersect); |
| 1313 | return false; | 1313 | return false; |
| 1314 | } | 1314 | } |
| 1315 | FlushObject(intersect); | 1315 | FlushObject(intersect); |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer_cache.h b/src/video_core/renderer_opengl/gl_rasterizer_cache.h index 9366f47f2..c919dd29b 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer_cache.h +++ b/src/video_core/renderer_opengl/gl_rasterizer_cache.h | |||
| @@ -533,13 +533,17 @@ private: | |||
| 533 | return nullptr; | 533 | return nullptr; |
| 534 | } | 534 | } |
| 535 | 535 | ||
| 536 | void Register(const Surface& object) { | ||
| 537 | RasterizerCache<Surface>::Register(object); | ||
| 538 | } | ||
| 539 | |||
| 536 | /// Unregisters an object from the cache | 540 | /// Unregisters an object from the cache |
| 537 | void UnregisterSurface(const Surface& object) { | 541 | void Unregister(const Surface& object) { |
| 538 | if (object->IsReinterpreted()) { | 542 | if (object->IsReinterpreted()) { |
| 539 | auto interval = GetReinterpretInterval(object); | 543 | auto interval = GetReinterpretInterval(object); |
| 540 | reinterpreted_surfaces.erase(interval); | 544 | reinterpreted_surfaces.erase(interval); |
| 541 | } | 545 | } |
| 542 | Unregister(object); | 546 | RasterizerCache<Surface>::Unregister(object); |
| 543 | } | 547 | } |
| 544 | }; | 548 | }; |
| 545 | 549 | ||