diff --git a/renderdoc/driver/d3d11/d3d11_renderstate.cpp b/renderdoc/driver/d3d11/d3d11_renderstate.cpp index 41c54a177..b6852049d 100644 --- a/renderdoc/driver/d3d11/d3d11_renderstate.cpp +++ b/renderdoc/driver/d3d11/d3d11_renderstate.cpp @@ -601,6 +601,38 @@ void D3D11RenderState::ReleaseRef(ID3D11DeviceChild *p) } } +// these are overloads that take a buffer to skip the view IsAlloc checks + +void D3D11RenderState::TakeRef(ID3D11Buffer *p) +{ + if(p) + { + p->AddRef(); + if(m_ImmediatePipeline) + { + m_pDevice->InternalRef(); + + // see above + ((WrappedDeviceChild11 *)p)->PipelineAddRef(); + } + } +} + +void D3D11RenderState::ReleaseRef(ID3D11Buffer *p) +{ + if(p) + { + p->Release(); + if(m_ImmediatePipeline) + { + m_pDevice->InternalRelease(); + + // see above + ((WrappedDeviceChild11 *)p)->PipelineRelease(); + } + } +} + bool D3D11RenderState::IsRangeBoundForWrite(const ResourceRange &range) { for(UINT i = 0; i < D3D11_1_UAV_SLOT_COUNT; i++) diff --git a/renderdoc/driver/d3d11/d3d11_renderstate.h b/renderdoc/driver/d3d11/d3d11_renderstate.h index b067f8721..31cbe1cec 100644 --- a/renderdoc/driver/d3d11/d3d11_renderstate.h +++ b/renderdoc/driver/d3d11/d3d11_renderstate.h @@ -97,6 +97,9 @@ struct D3D11RenderState void TakeRef(ID3D11DeviceChild *p); void ReleaseRef(ID3D11DeviceChild *p); + void TakeRef(ID3D11Buffer *p); + void ReleaseRef(ID3D11Buffer *p); + template void ChangeRefRead(T *&stateItem, T *newItem) {