diff --git a/app/src/main/cpp/skyline/gpu/buffer.cpp b/app/src/main/cpp/skyline/gpu/buffer.cpp index 62777ef7..7ff5c92e 100644 --- a/app/src/main/cpp/skyline/gpu/buffer.cpp +++ b/app/src/main/cpp/skyline/gpu/buffer.cpp @@ -172,10 +172,14 @@ namespace skyline::gpu { } std::shared_ptr Buffer::GetView(vk::DeviceSize offset, vk::DeviceSize range, vk::Format format) { - for (const auto &viewWeak : views) { - auto view{viewWeak.lock()}; + for (auto viewIt{views.begin()}; viewIt != views.end();) { + auto view{viewIt->lock()}; if (view && view->offset == offset && view->range == range && view->format == format) return view; + else if (!view) + viewIt = views.erase(viewIt); + else + ++viewIt; } auto view{std::make_shared(shared_from_this(), offset, range, format)}; diff --git a/app/src/main/cpp/skyline/gpu/texture/texture.cpp b/app/src/main/cpp/skyline/gpu/texture/texture.cpp index 5b9ba371..106e64ec 100644 --- a/app/src/main/cpp/skyline/gpu/texture/texture.cpp +++ b/app/src/main/cpp/skyline/gpu/texture/texture.cpp @@ -515,10 +515,14 @@ namespace skyline::gpu { } std::shared_ptr Texture::GetView(vk::ImageViewType type, vk::ImageSubresourceRange range, texture::Format pFormat, vk::ComponentMapping mapping) { - for (const auto &viewWeak : views) { - auto view{viewWeak.lock()}; + for (auto viewIt{views.begin()}; viewIt != views.end();) { + auto view{viewIt->lock()}; if (view && type == view->type && pFormat == view->format && range == view->range && mapping == view->mapping) return view; + else if (!view) + viewIt = views.erase(viewIt); + else + ++viewIt; } auto view{std::make_shared(shared_from_this(), type, range, pFormat, mapping)};