diff --git a/src/d3d11/d3d11_class_linkage.cpp b/src/d3d11/d3d11_class_linkage.cpp new file mode 100644 index 000000000..ceffe7c0f --- /dev/null +++ b/src/d3d11/d3d11_class_linkage.cpp @@ -0,0 +1,53 @@ +#include "d3d11_class_linkage.h" +#include "d3d11_device.h" + +namespace dxvk { + + D3D11ClassLinkage::D3D11ClassLinkage( + D3D11Device* pDevice) + : m_device(pDevice) { + + } + + + D3D11ClassLinkage::~D3D11ClassLinkage() { + + } + + + HRESULT D3D11ClassLinkage::QueryInterface(REFIID riid, void** ppvObject) { + COM_QUERY_IFACE(riid, ppvObject, IUnknown); + COM_QUERY_IFACE(riid, ppvObject, ID3D11DeviceChild); + COM_QUERY_IFACE(riid, ppvObject, ID3D11ClassLinkage); + + Logger::warn("D3D11ClassLinkage::QueryInterface: Unknown interface query"); + return E_NOINTERFACE; + } + + + void D3D11ClassLinkage::GetDevice(ID3D11Device** ppDevice) { + *ppDevice = m_device.ref(); + } + + + HRESULT D3D11ClassLinkage::CreateClassInstance( + LPCSTR pClassTypeName, + UINT ConstantBufferOffset, + UINT ConstantVectorOffset, + UINT TextureOffset, + UINT SamplerOffset, + ID3D11ClassInstance **ppInstance) { + Logger::err("D3D11ClassLinkage::CreateClassInstance: Not implemented yet"); + return E_NOTIMPL; + } + + + HRESULT D3D11ClassLinkage::GetClassInstance( + LPCSTR pClassInstanceName, + UINT InstanceIndex, + ID3D11ClassInstance **ppInstance) { + Logger::err("D3D11ClassLinkage::GetClassInstance: Not implemented yet"); + return E_NOTIMPL; + } + +} diff --git a/src/d3d11/d3d11_class_linkage.h b/src/d3d11/d3d11_class_linkage.h new file mode 100644 index 000000000..511e4d969 --- /dev/null +++ b/src/d3d11/d3d11_class_linkage.h @@ -0,0 +1,45 @@ +#pragma once + +#include "d3d11_device_child.h" + +namespace dxvk { + + class D3D11Device; + + // TODO implement properly + class D3D11ClassLinkage : public D3D11DeviceChild { + + public: + + D3D11ClassLinkage( + D3D11Device* pDevice); + + ~D3D11ClassLinkage(); + + HRESULT QueryInterface( + REFIID riid, + void** ppvObject) final; + + void GetDevice( + ID3D11Device **ppDevice) final; + + HRESULT CreateClassInstance( + LPCSTR pClassTypeName, + UINT ConstantBufferOffset, + UINT ConstantVectorOffset, + UINT TextureOffset, + UINT SamplerOffset, + ID3D11ClassInstance **ppInstance); + + HRESULT GetClassInstance( + LPCSTR pClassInstanceName, + UINT InstanceIndex, + ID3D11ClassInstance **ppInstance); + + private: + + Com m_device; + + }; + +} diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index 7b8244e33..77f1a5625 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -1,6 +1,7 @@ #include #include "d3d11_buffer.h" +#include "d3d11_class_linkage.h" #include "d3d11_context.h" #include "d3d11_device.h" #include "d3d11_input_layout.h" @@ -795,8 +796,8 @@ namespace dxvk { HRESULT D3D11Device::CreateClassLinkage(ID3D11ClassLinkage** ppLinkage) { - Logger::err("D3D11Device::CreateClassLinkage: Not implemented"); - return E_NOTIMPL; + *ppLinkage = ref(new D3D11ClassLinkage(this)); + return S_OK; } @@ -1185,10 +1186,8 @@ namespace dxvk { const void* pShaderBytecode, size_t BytecodeLength, ID3D11ClassLinkage* pClassLinkage) { - if (pClassLinkage != nullptr) { - Logger::err("D3D11Device::CreateShaderModule: Class linkage not supported"); - return E_INVALIDARG; - } + if (pClassLinkage != nullptr) + Logger::warn("D3D11Device::CreateShaderModule: Class linkage not supported"); try { *pShaderModule = D3D11ShaderModule(