1
0
mirror of https://github.com/EduApps-CDG/OpenDX synced 2024-12-30 09:45:37 +01:00
OpenDX/src/dxgi/dxgi_adapter.h

141 lines
4.0 KiB
C
Raw Normal View History

2017-10-11 03:09:04 +02:00
#pragma once
#include <mutex>
#include <unordered_map>
2017-10-11 03:09:04 +02:00
#include "dxgi_format.h"
2017-10-11 15:31:36 +02:00
#include "dxgi_interfaces.h"
#include "dxgi_output.h"
2017-10-11 03:09:04 +02:00
namespace dxvk {
class DxgiAdapter;
2017-10-11 03:09:04 +02:00
class DxgiFactory;
class DxgiOutput;
class DxgiVkAdapter : public IDXGIVkInteropAdapter {
public:
DxgiVkAdapter(DxgiAdapter* pAdapter);
ULONG STDMETHODCALLTYPE AddRef();
ULONG STDMETHODCALLTYPE Release();
HRESULT STDMETHODCALLTYPE QueryInterface(
REFIID riid,
void** ppvObject);
void STDMETHODCALLTYPE GetVulkanHandles(
VkInstance* pInstance,
VkPhysicalDevice* pPhysDev);
private:
DxgiAdapter* m_adapter;
};
2017-10-11 03:09:04 +02:00
class DxgiAdapter : public DxgiObject<IDXGIDXVKAdapter> {
2017-10-11 03:09:04 +02:00
public:
DxgiAdapter(
DxgiFactory* factory,
const Rc<DxvkAdapter>& adapter,
UINT index);
2017-10-11 03:09:04 +02:00
~DxgiAdapter();
2017-12-12 12:50:52 +01:00
HRESULT STDMETHODCALLTYPE QueryInterface(
REFIID riid,
void** ppvObject) final;
2017-10-11 03:09:04 +02:00
2017-12-12 12:50:52 +01:00
HRESULT STDMETHODCALLTYPE GetParent(
REFIID riid,
void** ppParent) final;
2017-10-11 03:09:04 +02:00
2017-12-12 12:50:52 +01:00
HRESULT STDMETHODCALLTYPE CheckInterfaceSupport(
REFGUID InterfaceName,
LARGE_INTEGER* pUMDVersion) final;
2017-10-11 03:09:04 +02:00
2017-12-12 12:50:52 +01:00
HRESULT STDMETHODCALLTYPE EnumOutputs(
UINT Output,
IDXGIOutput** ppOutput) final;
2017-10-11 03:09:04 +02:00
2017-12-12 12:50:52 +01:00
HRESULT STDMETHODCALLTYPE GetDesc(
DXGI_ADAPTER_DESC* pDesc) final;
2017-10-11 03:09:04 +02:00
2017-12-12 12:50:52 +01:00
HRESULT STDMETHODCALLTYPE GetDesc1(
DXGI_ADAPTER_DESC1* pDesc) final;
2018-05-22 23:48:07 +02:00
HRESULT STDMETHODCALLTYPE GetDesc2(
DXGI_ADAPTER_DESC2* pDesc) final;
2020-04-28 14:50:36 +02:00
HRESULT STDMETHODCALLTYPE GetDesc3(
DXGI_ADAPTER_DESC3* pDesc) final;
2018-10-11 11:39:44 +02:00
HRESULT STDMETHODCALLTYPE QueryVideoMemoryInfo(
UINT NodeIndex,
DXGI_MEMORY_SEGMENT_GROUP MemorySegmentGroup,
DXGI_QUERY_VIDEO_MEMORY_INFO* pVideoMemoryInfo) final;
HRESULT STDMETHODCALLTYPE SetVideoMemoryReservation(
UINT NodeIndex,
DXGI_MEMORY_SEGMENT_GROUP MemorySegmentGroup,
UINT64 Reservation) final;
HRESULT STDMETHODCALLTYPE RegisterHardwareContentProtectionTeardownStatusEvent(
HANDLE hEvent,
DWORD* pdwCookie) final;
HRESULT STDMETHODCALLTYPE RegisterVideoMemoryBudgetChangeNotificationEvent(
HANDLE hEvent,
DWORD* pdwCookie) final;
void STDMETHODCALLTYPE UnregisterHardwareContentProtectionTeardownStatus(
DWORD dwCookie) final;
void STDMETHODCALLTYPE UnregisterVideoMemoryBudgetChangeNotification(
DWORD dwCookie) final;
2017-12-12 12:50:52 +01:00
Rc<DxvkAdapter> STDMETHODCALLTYPE GetDXVKAdapter() final;
2017-10-11 15:31:36 +02:00
Rc<DxvkInstance> STDMETHODCALLTYPE GetDXVKInstance() final;
2017-10-11 03:09:04 +02:00
private:
2017-10-11 15:31:36 +02:00
Com<DxgiFactory> m_factory;
Rc<DxvkAdapter> m_adapter;
DxgiVkAdapter m_interop;
2017-10-11 03:09:04 +02:00
UINT m_index;
2018-10-11 11:39:44 +02:00
UINT64 m_memReservation[2] = { 0, 0 };
std::mutex m_mutex;
std::condition_variable m_cond;
DWORD m_eventCookie = 0;
std::unordered_map<DWORD, HANDLE> m_eventMap;
dxvk::thread m_eventThread;
void runEventThread();
struct MonitorEnumInfo {
UINT iMonitorId;
HMONITOR oMonitor;
};
static BOOL CALLBACK MonitorEnumProc(
HMONITOR hmon,
HDC hdc,
LPRECT rect,
LPARAM lp);
2017-10-11 03:09:04 +02:00
};
}