Просмотр исходного кода

Merge pull request #999 from lioncash/map

gl_rasterizer_cache: Avoid iterator invalidation issues within InvalidateRegion()
bunnei 8 лет назад
Родитель
Сommit
e58f7ff843
1 измененных файлов с 4 добавлено и 2 удалено
  1. 4 2
      src/video_core/renderer_opengl/gl_rasterizer_cache.cpp

+ 4 - 2
src/video_core/renderer_opengl/gl_rasterizer_cache.cpp

@@ -761,10 +761,12 @@ void RasterizerCacheOpenGL::FlushRegion(Tegra::GPUVAddr /*addr*/, size_t /*size*
 }
 
 void RasterizerCacheOpenGL::InvalidateRegion(Tegra::GPUVAddr addr, size_t size) {
-    for (const auto& pair : surface_cache) {
-        const auto& surface{pair.second};
+    for (auto iter = surface_cache.cbegin(); iter != surface_cache.cend();) {
+        const auto& surface{iter->second};
         const auto& params{surface->GetSurfaceParams()};
 
+        ++iter;
+
         if (params.IsOverlappingRegion(addr, size)) {
             UnregisterSurface(surface);
         }