1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2024-12-14 09:23:53 +01:00
dxvk/src/d3d10/d3d10_core.cpp
Philip Rebohle 3697583f71
[d3d10] Separate d3d10core from d3d10
This way we skip compiling and linking unnecessary garbage
into the core library.
2020-03-18 22:01:11 +01:00

68 lines
1.8 KiB
C++

#include <d3d11.h>
#include <d3d10_1.h>
#include "../dxgi/dxgi_interfaces.h"
extern "C" {
using namespace dxvk;
HRESULT __stdcall D3D11CoreCreateDevice(
IDXGIFactory* pFactory,
IDXGIAdapter* pAdapter,
UINT Flags,
const D3D_FEATURE_LEVEL* pFeatureLevels,
UINT FeatureLevels,
ID3D11Device** ppDevice);
DLLEXPORT HRESULT __stdcall D3D10CoreCreateDevice(
IDXGIFactory* pFactory,
IDXGIAdapter* pAdapter,
UINT Flags,
D3D_FEATURE_LEVEL FeatureLevel,
ID3D10Device** ppDevice) {
InitReturnPtr(ppDevice);
Com<ID3D11Device> d3d11Device;
HRESULT hr = pAdapter->CheckInterfaceSupport(
__uuidof(ID3D10Device), nullptr);
if (FAILED(hr))
return hr;
hr = D3D11CoreCreateDevice(pFactory, pAdapter,
Flags, &FeatureLevel, 1, &d3d11Device);
if (FAILED(hr))
return hr;
Com<ID3D10Multithread> multithread;
d3d11Device->QueryInterface(__uuidof(ID3D10Multithread), reinterpret_cast<void**>(&multithread));
multithread->SetMultithreadProtected(!(Flags & D3D10_CREATE_DEVICE_SINGLETHREADED));
Com<IDXGIDXVKDevice> dxvkDevice;
d3d11Device->QueryInterface(__uuidof(IDXGIDXVKDevice), reinterpret_cast<void**>(&dxvkDevice));
dxvkDevice->SetAPIVersion(10);
if (FAILED(d3d11Device->QueryInterface(
__uuidof(ID3D10Device), reinterpret_cast<void**>(ppDevice))))
return E_FAIL;
return S_OK;
}
UINT64 STDMETHODCALLTYPE D3D10CoreGetVersion() {
// Match the Windows 10 return value, but we
// don't know the exact function signature
return 0xa000100041770ull;
}
HRESULT STDMETHODCALLTYPE D3D10CoreRegisterLayers() {
return E_NOTIMPL;
}
}