mirror of
https://github.com/starr-dusT/yuzu-mainline
synced 2024-03-05 21:12:25 -08:00
Gpu: use an std mutex instead of a spin_lock to guard syncpoints
This commit is contained in:
parent
78add28aab
commit
c13433aee4
@ -69,7 +69,7 @@ const DmaPusher& GPU::DmaPusher() const {
|
|||||||
|
|
||||||
void GPU::IncrementSyncPoint(const u32 syncpoint_id) {
|
void GPU::IncrementSyncPoint(const u32 syncpoint_id) {
|
||||||
syncpoints[syncpoint_id]++;
|
syncpoints[syncpoint_id]++;
|
||||||
sync_guard.lock();
|
sync_mutex.lock();
|
||||||
if (!events[syncpoint_id].empty()) {
|
if (!events[syncpoint_id].empty()) {
|
||||||
u32 value = syncpoints[syncpoint_id].load();
|
u32 value = syncpoints[syncpoint_id].load();
|
||||||
auto it = events[syncpoint_id].begin();
|
auto it = events[syncpoint_id].begin();
|
||||||
@ -82,7 +82,7 @@ void GPU::IncrementSyncPoint(const u32 syncpoint_id) {
|
|||||||
it++;
|
it++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sync_guard.unlock();
|
sync_mutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 GPU::GetSyncpointValue(const u32 syncpoint_id) const {
|
u32 GPU::GetSyncpointValue(const u32 syncpoint_id) const {
|
||||||
|
@ -8,11 +8,11 @@
|
|||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <mutex>
|
||||||
#include "common/common_types.h"
|
#include "common/common_types.h"
|
||||||
#include "core/hle/service/nvdrv/nvdata.h"
|
#include "core/hle/service/nvdrv/nvdata.h"
|
||||||
#include "core/hle/service/nvflinger/buffer_queue.h"
|
#include "core/hle/service/nvflinger/buffer_queue.h"
|
||||||
#include "video_core/dma_pusher.h"
|
#include "video_core/dma_pusher.h"
|
||||||
#include "common/spin_lock.h"
|
|
||||||
|
|
||||||
using CacheAddr = std::uintptr_t;
|
using CacheAddr = std::uintptr_t;
|
||||||
inline CacheAddr ToCacheAddr(const void* host_ptr) {
|
inline CacheAddr ToCacheAddr(const void* host_ptr) {
|
||||||
@ -178,9 +178,9 @@ public:
|
|||||||
|
|
||||||
void Guard(bool guard_set) {
|
void Guard(bool guard_set) {
|
||||||
if (guard_set) {
|
if (guard_set) {
|
||||||
sync_guard.lock();
|
sync_mutex.lock();
|
||||||
} else {
|
} else {
|
||||||
sync_guard.unlock();
|
sync_mutex.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,7 +297,7 @@ private:
|
|||||||
|
|
||||||
std::array<std::list<Event>, Service::Nvidia::MaxSyncPoints> events;
|
std::array<std::list<Event>, Service::Nvidia::MaxSyncPoints> events;
|
||||||
|
|
||||||
Common::SpinLock sync_guard{};
|
std::mutex sync_mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define ASSERT_REG_POSITION(field_name, position) \
|
#define ASSERT_REG_POSITION(field_name, position) \
|
||||||
|
Loading…
Reference in New Issue
Block a user