mirror of
https://github.com/RPCS3/rpcs3
synced 2024-10-06 16:29:16 +00:00
rsx: Fix invalid iterator comparison (asserts on debug builds)
Also make ranged_map::count const
This commit is contained in:
parent
b176085e14
commit
d8d0af2bb3
|
@ -128,7 +128,7 @@ namespace rsx
|
||||||
public:
|
public:
|
||||||
bool operator == (const iterator& other) const
|
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 -> ()
|
auto* operator -> ()
|
||||||
|
@ -183,10 +183,10 @@ namespace rsx
|
||||||
m_data[block_for(range.start)].insert_or_assign(range.start, std::forward<T>(value));
|
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)];
|
const auto& block = m_data[block_for(key)];
|
||||||
if (auto found = block.find(key);
|
if (const auto found = block.find(key);
|
||||||
found != block.end())
|
found != block.end())
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -353,7 +353,7 @@ namespace rsx
|
||||||
|
|
||||||
// If this surface has already been added via another descendant, just ignore it
|
// If this surface has already been added via another descendant, just ignore it
|
||||||
bool ignore = false;
|
bool ignore = false;
|
||||||
for (auto &slice : new_surface->old_contents)
|
for (const auto& slice : new_surface->old_contents)
|
||||||
{
|
{
|
||||||
if (slice.source == surface)
|
if (slice.source == surface)
|
||||||
{
|
{
|
||||||
|
@ -374,8 +374,8 @@ namespace rsx
|
||||||
surface == e.second)
|
surface == e.second)
|
||||||
{
|
{
|
||||||
// This has been 'swallowed' by the new surface and can be safely freed
|
// 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& storage = surface->is_depth_surface() ? m_depth_stencil_storage : m_render_targets_storage;
|
||||||
auto &object = ::at32(storage, e.first);
|
auto& object = ::at32(storage, e.first);
|
||||||
|
|
||||||
ensure(object);
|
ensure(object);
|
||||||
|
|
||||||
|
@ -411,8 +411,9 @@ namespace rsx
|
||||||
// Workaround. Preserve new surface tag value because pitch convert is unimplemented
|
// Workaround. Preserve new surface tag value because pitch convert is unimplemented
|
||||||
u64 new_content_tag = 0;
|
u64 new_content_tag = 0;
|
||||||
|
|
||||||
address_range *storage_bounds;
|
address_range* storage_bounds;
|
||||||
surface_ranged_map *primary_storage, *secondary_storage;
|
surface_ranged_map* primary_storage;
|
||||||
|
surface_ranged_map* secondary_storage;
|
||||||
if constexpr (depth)
|
if constexpr (depth)
|
||||||
{
|
{
|
||||||
primary_storage = &m_depth_stencil_storage;
|
primary_storage = &m_depth_stencil_storage;
|
||||||
|
@ -430,7 +431,7 @@ namespace rsx
|
||||||
auto It = primary_storage->find(address);
|
auto It = primary_storage->find(address);
|
||||||
if (It != primary_storage->end())
|
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);
|
const bool pitch_compatible = Traits::surface_is_pitch_compatible(surface, pitch);
|
||||||
|
|
||||||
if (!pitch_compatible)
|
if (!pitch_compatible)
|
||||||
|
|
Loading…
Reference in a new issue