Browse Source
Merge pull request #999 from lioncash/map
gl_rasterizer_cache: Avoid iterator invalidation issues within InvalidateRegion()
pull/15/merge
bunnei
8 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
4 additions and
2 deletions
-
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) { |
|
|
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()}; |
|
|
const auto& params{surface->GetSurfaceParams()}; |
|
|
|
|
|
|
|
|
|
|
|
++iter; |
|
|
|
|
|
|
|
|
if (params.IsOverlappingRegion(addr, size)) { |
|
|
if (params.IsOverlappingRegion(addr, size)) { |
|
|
UnregisterSurface(surface); |
|
|
UnregisterSurface(surface); |
|
|
} |
|
|
} |
|
|
|