1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-13 19:29:14 +01:00

[dxgi] Implement IDXGIVkInteropAdapter for IDXGIAdapter

This commit is contained in:
Philip Rebohle 2019-09-18 14:51:23 +02:00
parent 9af8387e4e
commit 0338b70596
No known key found for this signature in database
GPG Key ID: C8CC613427A31C99
2 changed files with 74 additions and 1 deletions

View File

@ -12,11 +12,51 @@
namespace dxvk {
DxgiVkAdapter::DxgiVkAdapter(DxgiAdapter* pAdapter)
: m_adapter(pAdapter) {
}
ULONG STDMETHODCALLTYPE DxgiVkAdapter::AddRef() {
return m_adapter->AddRef();
}
ULONG STDMETHODCALLTYPE DxgiVkAdapter::Release() {
return m_adapter->Release();
}
HRESULT STDMETHODCALLTYPE DxgiVkAdapter::QueryInterface(
REFIID riid,
void** ppvObject) {
return m_adapter->QueryInterface(riid, ppvObject);
}
void STDMETHODCALLTYPE DxgiVkAdapter::GetVulkanHandles(
VkInstance* pInstance,
VkPhysicalDevice* pPhysDev) {
auto adapter = m_adapter->GetDXVKAdapter();
auto instance = adapter->instance();
if (pInstance)
*pInstance = instance->handle();
if (pPhysDev)
*pPhysDev = adapter->handle();
}
DxgiAdapter::DxgiAdapter(
DxgiFactory* factory,
const Rc<DxvkAdapter>& adapter)
: m_factory (factory),
m_adapter (adapter) {
m_adapter (adapter),
m_interop (this) {
}
@ -42,6 +82,11 @@ namespace dxvk {
*ppvObject = ref(this);
return S_OK;
}
if (riid == __uuidof(IDXGIVkInteropAdapter)) {
*ppvObject = ref(&m_interop);
return S_OK;
}
Logger::warn("DxgiAdapter::QueryInterface: Unknown interface query");
Logger::warn(str::format(riid));

View File

@ -9,8 +9,35 @@
namespace dxvk {
class DxgiAdapter;
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;
};
class DxgiAdapter : public DxgiObject<IDXGIDXVKAdapter> {
@ -76,6 +103,7 @@ namespace dxvk {
Com<DxgiFactory> m_factory;
Rc<DxvkAdapter> m_adapter;
DxgiVkAdapter m_interop;
UINT64 m_memReservation[2] = { 0, 0 };