diff --git a/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp b/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp index deef28726..67419b105 100644 --- a/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_context1_wrap.cpp @@ -2116,6 +2116,9 @@ void WrappedID3D11DeviceContext::SwapDeviceContextState(ID3DDeviceContextState * { WrappedID3DDeviceContextState *wrapped = NULL; + // need to flush pending dead now so we don't find a 'dead' wrapper below + m_pDevice->FlushPendingDead(); + if(m_pDevice->GetResourceManager()->HasWrapper(prev)) { wrapped = (WrappedID3DDeviceContextState *)m_pDevice->GetResourceManager()->GetWrapper(prev); diff --git a/renderdoc/driver/d3d11/d3d11_device.cpp b/renderdoc/driver/d3d11/d3d11_device.cpp index 647042b8e..58863aafe 100644 --- a/renderdoc/driver/d3d11/d3d11_device.cpp +++ b/renderdoc/driver/d3d11/d3d11_device.cpp @@ -1639,6 +1639,9 @@ bool WrappedID3D11Device::Serialise_WrapSwapchainBuffer(SerialiserType &ser, IDX IUnknown *WrappedID3D11Device::WrapSwapchainBuffer(IDXGISwapper *swapper, DXGI_FORMAT bufferFormat, UINT buffer, IUnknown *realSurface) { + // need to flush pending dead now so we don't find a 'dead' wrapper below + FlushPendingDead(); + if(GetResourceManager()->HasWrapper((ID3D11DeviceChild *)realSurface)) { ID3D11Texture2D *tex = @@ -1705,6 +1708,10 @@ IDXGIResource *WrappedID3D11Device::WrapExternalDXGIResource(IDXGIResource *res) { ID3D11Resource *d3d11res; res->QueryInterface(__uuidof(ID3D11Resource), (void **)&d3d11res); + + // need to flush pending dead now so we don't find a 'dead' wrapper below + FlushPendingDead(); + if(GetResourceManager()->HasWrapper(d3d11res)) { ID3D11DeviceChild *wrapper = GetResourceManager()->GetWrapper(d3d11res); diff --git a/renderdoc/driver/d3d11/d3d11_device1_wrap.cpp b/renderdoc/driver/d3d11/d3d11_device1_wrap.cpp index d7fd71825..b12f9fb2b 100644 --- a/renderdoc/driver/d3d11/d3d11_device1_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_device1_wrap.cpp @@ -132,6 +132,9 @@ HRESULT WrappedID3D11Device::CreateBlendState1(const D3D11_BLEND_DESC1 *pBlendSt { SCOPED_LOCK(m_D3DLock); + // need to flush pending dead now so we don't find a 'dead' wrapper below + FlushPendingDead(); + // duplicate states can be returned, if Create is called with a previous descriptor if(GetResourceManager()->HasWrapper(real)) { @@ -239,6 +242,9 @@ HRESULT WrappedID3D11Device::CreateRasterizerState1(const D3D11_RASTERIZER_DESC1 { SCOPED_LOCK(m_D3DLock); + // need to flush pending dead now so we don't find a 'dead' wrapper below + FlushPendingDead(); + // duplicate states can be returned, if Create is called with a previous descriptor if(GetResourceManager()->HasWrapper(real)) { diff --git a/renderdoc/driver/d3d11/d3d11_device3_wrap.cpp b/renderdoc/driver/d3d11/d3d11_device3_wrap.cpp index 352cc50c5..71cb840be 100644 --- a/renderdoc/driver/d3d11/d3d11_device3_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_device3_wrap.cpp @@ -773,6 +773,9 @@ HRESULT WrappedID3D11Device::CreateRasterizerState2(const D3D11_RASTERIZER_DESC2 { SCOPED_LOCK(m_D3DLock); + // need to flush pending dead now so we don't find a 'dead' wrapper below + FlushPendingDead(); + // duplicate states can be returned, if Create is called with a previous descriptor if(GetResourceManager()->HasWrapper(real)) { diff --git a/renderdoc/driver/d3d11/d3d11_device_wrap.cpp b/renderdoc/driver/d3d11/d3d11_device_wrap.cpp index 42d09243e..b507c57f9 100644 --- a/renderdoc/driver/d3d11/d3d11_device_wrap.cpp +++ b/renderdoc/driver/d3d11/d3d11_device_wrap.cpp @@ -2572,6 +2572,9 @@ HRESULT WrappedID3D11Device::CreateBlendState(const D3D11_BLEND_DESC *pBlendStat { SCOPED_LOCK(m_D3DLock); + // need to flush pending dead now so we don't find a 'dead' wrapper below + FlushPendingDead(); + // duplicate states can be returned, if Create is called with a previous descriptor if(GetResourceManager()->HasWrapper(real)) { @@ -2678,6 +2681,9 @@ HRESULT WrappedID3D11Device::CreateDepthStencilState(const D3D11_DEPTH_STENCIL_D { SCOPED_LOCK(m_D3DLock); + // need to flush pending dead now so we don't find a 'dead' wrapper below + FlushPendingDead(); + // duplicate states can be returned, if Create is called with a previous descriptor if(GetResourceManager()->HasWrapper(real)) { @@ -2782,6 +2788,9 @@ HRESULT WrappedID3D11Device::CreateRasterizerState(const D3D11_RASTERIZER_DESC * { SCOPED_LOCK(m_D3DLock); + // need to flush pending dead now so we don't find a 'dead' wrapper below + FlushPendingDead(); + // duplicate states can be returned, if Create is called with a previous descriptor if(GetResourceManager()->HasWrapper(real)) { @@ -2886,6 +2895,9 @@ HRESULT WrappedID3D11Device::CreateSamplerState(const D3D11_SAMPLER_DESC *pSampl { SCOPED_LOCK(m_D3DLock); + // need to flush pending dead now so we don't find a 'dead' wrapper below + FlushPendingDead(); + // duplicate states can be returned, if Create is called with a previous descriptor if(GetResourceManager()->HasWrapper(real)) {