mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-04 16:24:29 +01:00
[dxgi] Implement IDXGIVkInteropFactory for DXGI factory
This commit is contained in:
parent
0ee69fef00
commit
3128f4ea8e
@ -5,8 +5,47 @@
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
DxgiVkFactory::DxgiVkFactory(DxgiFactory* pFactory)
|
||||
: m_factory(pFactory) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
ULONG STDMETHODCALLTYPE DxgiVkFactory::AddRef() {
|
||||
return m_factory->AddRef();
|
||||
}
|
||||
|
||||
|
||||
ULONG STDMETHODCALLTYPE DxgiVkFactory::Release() {
|
||||
return m_factory->Release();
|
||||
}
|
||||
|
||||
|
||||
HRESULT STDMETHODCALLTYPE DxgiVkFactory::QueryInterface(
|
||||
REFIID riid,
|
||||
void** ppvObject) {
|
||||
return m_factory->QueryInterface(riid, ppvObject);
|
||||
}
|
||||
|
||||
|
||||
void STDMETHODCALLTYPE DxgiVkFactory::GetVulkanInstance(
|
||||
VkInstance* pInstance,
|
||||
PFN_vkGetInstanceProcAddr* ppfnVkGetInstanceProcAddr) {
|
||||
auto instance = m_factory->GetDXVKInstance();
|
||||
|
||||
if (pInstance)
|
||||
*pInstance = instance->handle();
|
||||
|
||||
if (ppfnVkGetInstanceProcAddr)
|
||||
*ppfnVkGetInstanceProcAddr = instance->vki()->getLoaderProc();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
DxgiFactory::DxgiFactory(UINT Flags)
|
||||
: m_instance (new DxvkInstance()),
|
||||
m_interop (this),
|
||||
m_options (m_instance->config()),
|
||||
m_monitorInfo (this, m_options),
|
||||
m_flags (Flags) {
|
||||
@ -40,6 +79,11 @@ namespace dxvk {
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if (riid == __uuidof(IDXGIVkInteropFactory)) {
|
||||
*ppvObject = ref(&m_interop);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if (riid == __uuidof(IDXGIVkMonitorInfo)) {
|
||||
*ppvObject = ref(&m_monitorInfo);
|
||||
return S_OK;
|
||||
|
@ -9,7 +9,34 @@
|
||||
#include "../dxvk/dxvk_instance.h"
|
||||
|
||||
namespace dxvk {
|
||||
|
||||
|
||||
class DxgiFactory;
|
||||
|
||||
class DxgiVkFactory : public IDXGIVkInteropFactory {
|
||||
|
||||
public:
|
||||
|
||||
DxgiVkFactory(DxgiFactory* pFactory);
|
||||
|
||||
ULONG STDMETHODCALLTYPE AddRef();
|
||||
|
||||
ULONG STDMETHODCALLTYPE Release();
|
||||
|
||||
HRESULT STDMETHODCALLTYPE QueryInterface(
|
||||
REFIID riid,
|
||||
void** ppvObject);
|
||||
|
||||
void STDMETHODCALLTYPE GetVulkanInstance(
|
||||
VkInstance* pInstance,
|
||||
PFN_vkGetInstanceProcAddr* ppfnVkGetInstanceProcAddr);
|
||||
|
||||
private:
|
||||
|
||||
DxgiFactory* m_factory;
|
||||
|
||||
};
|
||||
|
||||
|
||||
class DxgiFactory : public DxgiObject<IDXGIFactory7> {
|
||||
|
||||
public:
|
||||
@ -146,6 +173,7 @@ namespace dxvk {
|
||||
private:
|
||||
|
||||
Rc<DxvkInstance> m_instance;
|
||||
DxgiVkFactory m_interop;
|
||||
DxgiOptions m_options;
|
||||
DxgiMonitorInfo m_monitorInfo;
|
||||
UINT m_flags;
|
||||
|
Loading…
Reference in New Issue
Block a user