diff options
-rw-r--r-- | src/citra_qt/debugger/profiler.cpp | 4 | ||||
-rw-r--r-- | src/common/thread.h | 81 | ||||
-rw-r--r-- | src/video_core/rasterizer.cpp | 4 |
3 files changed, 20 insertions, 69 deletions
diff --git a/src/citra_qt/debugger/profiler.cpp b/src/citra_qt/debugger/profiler.cpp index ae0568b6a..2ac1748b7 100644 --- a/src/citra_qt/debugger/profiler.cpp +++ b/src/citra_qt/debugger/profiler.cpp @@ -26,7 +26,7 @@ static QVariant GetDataForColumn(int col, const AggregatedDuration& duration) static const TimingCategoryInfo* GetCategoryInfo(int id) { const auto& categories = GetProfilingManager().GetTimingCategoriesInfo(); - if (id >= categories.size()) { + if ((size_t)id >= categories.size()) { return nullptr; } else { return &categories[id]; @@ -98,7 +98,7 @@ QVariant ProfilerModel::data(const QModelIndex& index, int role) const const TimingCategoryInfo* info = GetCategoryInfo(index.row() - 2); return info != nullptr ? QString(info->name) : QVariant(); } else { - if (index.row() - 2 < results.time_per_category.size()) { + if (index.row() - 2 < (int)results.time_per_category.size()) { return GetDataForColumn(index.column(), results.time_per_category[index.row() - 2]); } else { return QVariant(); diff --git a/src/common/thread.h b/src/common/thread.h index a45728e1e..5fdb6baeb 100644 --- a/src/common/thread.h +++ b/src/common/thread.h @@ -51,109 +51,60 @@ int CurrentThreadId(); void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask); void SetCurrentThreadAffinity(u32 mask); -class Event -{ +class Event { public: - Event() - : is_set(false) - {} + Event() : is_set(false) {} - void Set() - { + void Set() { std::lock_guard<std::mutex> lk(m_mutex); - if (!is_set) - { + if (!is_set) { is_set = true; m_condvar.notify_one(); } } - void Wait() - { + void Wait() { std::unique_lock<std::mutex> lk(m_mutex); - m_condvar.wait(lk, IsSet(this)); + m_condvar.wait(lk, [&]{ return is_set; }); is_set = false; } - void Reset() - { + void Reset() { std::unique_lock<std::mutex> lk(m_mutex); // no other action required, since wait loops on the predicate and any lingering signal will get cleared on the first iteration is_set = false; } private: - class IsSet - { - public: - IsSet(const Event* ev) - : m_event(ev) - {} - - bool operator()() - { - return m_event->is_set; - } - - private: - const Event* const m_event; - }; - - volatile bool is_set; + bool is_set; std::condition_variable m_condvar; std::mutex m_mutex; }; -// TODO: doesn't work on windows with (count > 2) -class Barrier -{ +class Barrier { public: - Barrier(size_t count) - : m_count(count), m_waiting(0) - {} + Barrier(size_t count) : m_count(count), m_waiting(0) {} - // block until "count" threads call Sync() - bool Sync() - { + /// Blocks until all "count" threads have called Sync() + void Sync() { std::unique_lock<std::mutex> lk(m_mutex); // TODO: broken when next round of Sync()s // is entered before all waiting threads return from the notify_all - if (m_count == ++m_waiting) - { + if (++m_waiting == m_count) { m_waiting = 0; m_condvar.notify_all(); - return true; - } - else - { - m_condvar.wait(lk, IsDoneWating(this)); - return false; + } else { + m_condvar.wait(lk, [&]{ return m_waiting == 0; }); } } private: - class IsDoneWating - { - public: - IsDoneWating(const Barrier* bar) - : m_bar(bar) - {} - - bool operator()() - { - return (0 == m_bar->m_waiting); - } - - private: - const Barrier* const m_bar; - }; - std::condition_variable m_condvar; std::mutex m_mutex; const size_t m_count; - volatile size_t m_waiting; + size_t m_waiting; }; void SleepCurrentThread(int ms); diff --git a/src/video_core/rasterizer.cpp b/src/video_core/rasterizer.cpp index dd46f0ec3..6ec253601 100644 --- a/src/video_core/rasterizer.cpp +++ b/src/video_core/rasterizer.cpp @@ -342,10 +342,10 @@ static void ProcessTriangleInternal(const VertexShader::OutputVertex& v0, case Regs::TextureConfig::MirroredRepeat: { - int coord = (int)((unsigned)val % (2 * size)); + unsigned int coord = ((unsigned)val % (2 * size)); if (coord >= size) coord = 2 * size - 1 - coord; - return coord; + return (int)coord; } default: |