From 82c6a5eb1a9923a7944f86c263ae6b44d7b99fee Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 3 May 2019 16:41:16 +0200 Subject: [PATCH] [d3d11] Implement D3D11Device::CreateDeviceContextState --- src/d3d11/d3d11_device.cpp | 32 ++++++++++++++++++++++++++++++-- src/d3d11/d3d11_device.h | 4 ++-- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index cbd4e2ee..5c86e5a8 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -18,6 +18,7 @@ #include "d3d11_resource.h" #include "d3d11_sampler.h" #include "d3d11_shader.h" +#include "d3d11_state_object.h" #include "d3d11_swapchain.h" #include "d3d11_texture.h" @@ -1045,9 +1046,36 @@ namespace dxvk { D3D_FEATURE_LEVEL* pChosenFeatureLevel, ID3DDeviceContextState** ppContextState) { InitReturnPtr(ppContextState); + + if (!pFeatureLevels || FeatureLevels == 0) + return E_INVALIDARG; - Logger::err("D3D11Device::CreateDeviceContextState: Not implemented"); - return E_NOTIMPL; + if (EmulatedInterface != __uuidof(ID3D10Device) + && EmulatedInterface != __uuidof(ID3D10Device1) + && EmulatedInterface != __uuidof(ID3D11Device) + && EmulatedInterface != __uuidof(ID3D11Device1)) + return E_INVALIDARG; + + UINT flId; + for (flId = 0; flId < FeatureLevels; flId++) { + if (CheckFeatureLevelSupport(m_dxvkAdapter, pFeatureLevels[flId])) + break; + } + + if (flId == FeatureLevels) + return E_INVALIDARG; + + if (pFeatureLevels[flId] > m_featureLevel) + m_featureLevel = pFeatureLevels[flId]; + + if (pChosenFeatureLevel) + *pChosenFeatureLevel = pFeatureLevels[flId]; + + if (!ppContextState) + return S_FALSE; + + *ppContextState = ref(new D3D11DeviceContextState(this)); + return S_OK; } HRESULT STDMETHODCALLTYPE D3D11Device::OpenSharedResource( diff --git a/src/d3d11/d3d11_device.h b/src/d3d11/d3d11_device.h index 62643f65..3017b4ca 100644 --- a/src/d3d11/d3d11_device.h +++ b/src/d3d11/d3d11_device.h @@ -344,8 +344,8 @@ namespace dxvk { IDXGIObject* m_container; - const D3D_FEATURE_LEVEL m_featureLevel; - const UINT m_featureFlags; + D3D_FEATURE_LEVEL m_featureLevel; + UINT m_featureFlags; const Rc m_dxvkDevice; const Rc m_dxvkAdapter;