mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-13 16:08:50 +01:00
41a49a9c14
Doesn't really fix anything, just silences some warnings in Horizon Zero Dawn.
94 lines
2.1 KiB
C++
94 lines
2.1 KiB
C++
#include "dxgi_monitor.h"
|
|
|
|
namespace dxvk {
|
|
|
|
DxgiMonitorInfo::DxgiMonitorInfo(IUnknown* pParent)
|
|
: m_parent(pParent) {
|
|
|
|
}
|
|
|
|
|
|
DxgiMonitorInfo::~DxgiMonitorInfo() {
|
|
|
|
}
|
|
|
|
|
|
ULONG STDMETHODCALLTYPE DxgiMonitorInfo::AddRef() {
|
|
return m_parent->AddRef();
|
|
}
|
|
|
|
|
|
ULONG STDMETHODCALLTYPE DxgiMonitorInfo::Release() {
|
|
return m_parent->Release();
|
|
}
|
|
|
|
|
|
HRESULT STDMETHODCALLTYPE DxgiMonitorInfo::QueryInterface(
|
|
REFIID riid,
|
|
void** ppvObject) {
|
|
return m_parent->QueryInterface(riid, ppvObject);
|
|
}
|
|
|
|
|
|
HRESULT STDMETHODCALLTYPE DxgiMonitorInfo::InitMonitorData(
|
|
HMONITOR hMonitor,
|
|
const DXGI_VK_MONITOR_DATA* pData) {
|
|
if (!hMonitor || !pData)
|
|
return E_INVALIDARG;
|
|
|
|
std::lock_guard<std::mutex> lock(m_monitorMutex);
|
|
auto result = m_monitorData.insert({ hMonitor, *pData });
|
|
|
|
return result.second ? S_OK : E_INVALIDARG;
|
|
}
|
|
|
|
|
|
HRESULT STDMETHODCALLTYPE DxgiMonitorInfo::AcquireMonitorData(
|
|
HMONITOR hMonitor,
|
|
DXGI_VK_MONITOR_DATA** ppData) {
|
|
InitReturnPtr(ppData);
|
|
|
|
if (!hMonitor || !ppData)
|
|
return E_INVALIDARG;
|
|
|
|
m_monitorMutex.lock();
|
|
|
|
auto entry = m_monitorData.find(hMonitor);
|
|
if (entry == m_monitorData.end()) {
|
|
m_monitorMutex.unlock();
|
|
return DXGI_ERROR_NOT_FOUND;
|
|
}
|
|
|
|
*ppData = &entry->second;
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
void STDMETHODCALLTYPE DxgiMonitorInfo::ReleaseMonitorData() {
|
|
m_monitorMutex.unlock();
|
|
}
|
|
|
|
|
|
uint32_t GetMonitorFormatBpp(DXGI_FORMAT Format) {
|
|
switch (Format) {
|
|
case DXGI_FORMAT_R8G8B8A8_UNORM:
|
|
case DXGI_FORMAT_B8G8R8A8_UNORM:
|
|
case DXGI_FORMAT_B8G8R8X8_UNORM:
|
|
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
|
|
case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
|
|
case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
|
|
case DXGI_FORMAT_R10G10B10A2_UNORM:
|
|
return 32;
|
|
|
|
case DXGI_FORMAT_R16G16B16A16_FLOAT:
|
|
return 64;
|
|
|
|
default:
|
|
Logger::warn(str::format(
|
|
"GetMonitorFormatBpp: Unknown format: ",
|
|
Format));
|
|
return 32;
|
|
}
|
|
}
|
|
|
|
} |