From 24feb7822d4ff9b276089471abf9012f363b6878 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Tue, 12 Dec 2017 01:07:07 +0100 Subject: [PATCH] [d3d11] Added class linkage stub, required for FX11 samples --- src/d3d11/d3d11_class_linkage.cpp | 53 +++++++++++++++++++++++++++++++ src/d3d11/d3d11_class_linkage.h | 45 ++++++++++++++++++++++++++ src/d3d11/d3d11_device.cpp | 11 +++---- 3 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 src/d3d11/d3d11_class_linkage.cpp create mode 100644 src/d3d11/d3d11_class_linkage.h diff --git a/src/d3d11/d3d11_class_linkage.cpp b/src/d3d11/d3d11_class_linkage.cpp new file mode 100644 index 00000000..ceffe7c0 --- /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 00000000..511e4d96 --- /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 7b8244e3..77f1a562 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(