Skip to content

Commit

Permalink
rsx: Fix invalid iterator comparison (asserts on debug builds)
Browse files Browse the repository at this point in the history
Also make ranged_map::count const
  • Loading branch information
Megamouse committed Mar 10, 2024
1 parent b176085 commit d8d0af2
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 10 deletions.
8 changes: 4 additions & 4 deletions rpcs3/Emu/RSX/Common/ranged_map.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ namespace rsx
public:
bool operator == (const iterator& other) const
{
return m_it == other.m_it;
return m_current == other.m_current && m_it == other.m_it;
}

auto* operator -> ()
Expand Down Expand Up @@ -183,10 +183,10 @@ namespace rsx
m_data[block_for(range.start)].insert_or_assign(range.start, std::forward<T>(value));
}

usz count(const u32 key)
usz count(const u32 key) const
{
auto& block = m_data[block_for(key)];
if (auto found = block.find(key);
const auto& block = m_data[block_for(key)];
if (const auto found = block.find(key);
found != block.end())
{
return 1;
Expand Down
13 changes: 7 additions & 6 deletions rpcs3/Emu/RSX/Common/surface_store.h
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ namespace rsx

// If this surface has already been added via another descendant, just ignore it
bool ignore = false;
for (auto &slice : new_surface->old_contents)
for (const auto& slice : new_surface->old_contents)
{
if (slice.source == surface)
{
Expand All @@ -374,8 +374,8 @@ namespace rsx
surface == e.second)
{
// This has been 'swallowed' by the new surface and can be safely freed
auto &storage = surface->is_depth_surface() ? m_depth_stencil_storage : m_render_targets_storage;
auto &object = ::at32(storage, e.first);
auto& storage = surface->is_depth_surface() ? m_depth_stencil_storage : m_render_targets_storage;
auto& object = ::at32(storage, e.first);

ensure(object);

Expand Down Expand Up @@ -411,8 +411,9 @@ namespace rsx
// Workaround. Preserve new surface tag value because pitch convert is unimplemented
u64 new_content_tag = 0;

address_range *storage_bounds;
surface_ranged_map *primary_storage, *secondary_storage;
address_range* storage_bounds;
surface_ranged_map* primary_storage;
surface_ranged_map* secondary_storage;
if constexpr (depth)
{
primary_storage = &m_depth_stencil_storage;
Expand All @@ -430,7 +431,7 @@ namespace rsx
auto It = primary_storage->find(address);
if (It != primary_storage->end())
{
surface_storage_type &surface = It->second;
surface_storage_type& surface = It->second;
const bool pitch_compatible = Traits::surface_is_pitch_compatible(surface, pitch);

if (!pitch_compatible)
Expand Down

0 comments on commit d8d0af2

Please sign in to comment.