Browse Source

[common, gpu_thread] Exchanging command queue + adjusting Subtract in the OverlapRangeSetImpl

camillelavey-patch-1
CamilleLaVey 3 weeks ago
committed by crueter
parent
commit
7c4ac3d287
  1. 33
      src/common/range_sets.inc
  2. 2
      src/video_core/gpu_thread.h

33
src/common/range_sets.inc

@ -116,28 +116,25 @@ struct OverlapRangeSet<AddressType>::OverlapRangeSetImpl {
} }
AddressType end_address = base_address + static_cast<AddressType>(size); AddressType end_address = base_address + static_cast<AddressType>(size);
IntervalType interval{base_address, end_address}; IntervalType interval{base_address, end_address};
bool any_removals = false;
m_split_ranges_set += std::make_pair(interval, -amount); m_split_ranges_set += std::make_pair(interval, -amount);
do {
any_removals = false;
auto it = m_split_ranges_set.lower_bound(interval);
if (it == m_split_ranges_set.end()) {
return;
}
auto end_it = m_split_ranges_set.upper_bound(interval);
for (; it != end_it; it++) {
if (it->second <= 0) {
if constexpr (has_on_delete) {
if (it->second == 0) {
on_delete(it->first.lower(), it->first.upper());
}
auto it = m_split_ranges_set.lower_bound(interval);
if (it == m_split_ranges_set.end()) {
return;
}
auto end_it = m_split_ranges_set.upper_bound(interval);
while (it != end_it) {
if (it->second <= 0) {
if constexpr (has_on_delete) {
if (it->second == 0) {
on_delete(it->first.lower(), it->first.upper());
} }
any_removals = true;
m_split_ranges_set.erase(it);
break;
} }
auto to_erase = it++;
m_split_ranges_set.erase(to_erase);
continue;
} }
} while (any_removals);
++it;
}
} }
template <typename Func> template <typename Func>

2
src/video_core/gpu_thread.h

@ -89,7 +89,7 @@ struct CommandDataContainer {
/// Struct used to synchronize the GPU thread /// Struct used to synchronize the GPU thread
struct SynchState final { struct SynchState final {
using CommandQueue = Common::MPSCQueue<CommandDataContainer>;
using CommandQueue = Common::SPSCQueue<CommandDataContainer>;
std::mutex write_lock; std::mutex write_lock;
CommandQueue queue; CommandQueue queue;
u64 last_fence{}; u64 last_fence{};

Loading…
Cancel
Save