1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2024-12-14 09:23:53 +01:00
dxvk/src/dxgi/dxgi_monitor.cpp

47 lines
1.0 KiB
C++

#include "dxgi_monitor.h"
namespace dxvk {
std::mutex g_monitorMutex;
std::unordered_map<HMONITOR, DXGI_VK_MONITOR_DATA> g_monitorData;
HRESULT InitMonitorData(
HMONITOR hMonitor,
const DXGI_VK_MONITOR_DATA* pData) {
if (!hMonitor || !pData)
return E_INVALIDARG;
std::lock_guard<std::mutex> lock(g_monitorMutex);
auto result = g_monitorData.insert({ hMonitor, *pData });
return result.second ? S_OK : E_INVALIDARG;
}
HRESULT AcquireMonitorData(
HMONITOR hMonitor,
DXGI_VK_MONITOR_DATA** ppData) {
InitReturnPtr(ppData);
if (!hMonitor || !ppData)
return E_INVALIDARG;
g_monitorMutex.lock();
auto entry = g_monitorData.find(hMonitor);
if (entry == g_monitorData.end()) {
g_monitorMutex.unlock();
return DXGI_ERROR_NOT_FOUND;
}
*ppData = &entry->second;
return S_OK;
}
void ReleaseMonitorData() {
g_monitorMutex.unlock();
}
}