2018-02-15 13:26:05 +01:00
|
|
|
#include "dxvk_event.h"
|
|
|
|
|
|
|
|
namespace dxvk {
|
|
|
|
|
|
|
|
DxvkEvent:: DxvkEvent() { }
|
|
|
|
DxvkEvent::~DxvkEvent() { }
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t DxvkEvent::reset() {
|
|
|
|
std::unique_lock<std::mutex> lock(m_mutex);
|
|
|
|
|
|
|
|
m_status = DxvkEventStatus::Reset;
|
|
|
|
return ++m_revision;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-02-18 22:57:45 +01:00
|
|
|
void DxvkEvent::signal(uint32_t revision) {
|
2018-02-15 13:26:05 +01:00
|
|
|
std::unique_lock<std::mutex> lock(m_mutex);
|
|
|
|
|
2018-02-19 11:27:14 +01:00
|
|
|
if (m_revision == revision)
|
2018-02-15 13:26:05 +01:00
|
|
|
m_status = DxvkEventStatus::Signaled;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DxvkEventStatus DxvkEvent::getStatus() {
|
|
|
|
std::unique_lock<std::mutex> lock(m_mutex);
|
|
|
|
return m_status;
|
|
|
|
}
|
2018-07-20 11:39:24 +02:00
|
|
|
|
|
|
|
|
|
|
|
void DxvkEvent::wait() {
|
|
|
|
while (this->getStatus() != DxvkEventStatus::Signaled)
|
|
|
|
dxvk::this_thread::yield();
|
|
|
|
}
|
2018-02-15 13:26:05 +01:00
|
|
|
|
|
|
|
}
|