summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/video_core/rasterizer_cache.h4
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer_cache.cpp8
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer_cache.h8
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,
1304bool RasterizerCacheOpenGL::PartialReinterpretSurface(Surface triggering_surface, 1304bool 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