From e6eef1d1eca9709bad4c7deb72c3af8b890f5835 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 1 May 2019 03:01:36 +0200 Subject: [PATCH] [d3d11] Minor Map/Unmap optimizations Avoid unnecessary LockContext call when unmapping a buffer. This may actually improve performance if the context has multithreaded protection enabled (e.g. D3D10). --- src/d3d11/d3d11_context_imm.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/d3d11/d3d11_context_imm.cpp b/src/d3d11/d3d11_context_imm.cpp index 4fc33c910..24bc6da2c 100644 --- a/src/d3d11/d3d11_context_imm.cpp +++ b/src/d3d11/d3d11_context_imm.cpp @@ -174,7 +174,7 @@ namespace dxvk { D3D11_MAPPED_SUBRESOURCE* pMappedResource) { D3D10DeviceLock lock = LockContext(); - if (!pResource || !pMappedResource) + if (unlikely(!pResource || !pMappedResource)) return E_INVALIDARG; D3D11_RESOURCE_DIMENSION resourceDim = D3D11_RESOURCE_DIMENSION_UNKNOWN; @@ -182,7 +182,7 @@ namespace dxvk { HRESULT hr; - if (resourceDim == D3D11_RESOURCE_DIMENSION_BUFFER) { + if (likely(resourceDim == D3D11_RESOURCE_DIMENSION_BUFFER)) { hr = MapBuffer( static_cast(pResource), MapType, MapFlags, pMappedResource); @@ -206,13 +206,13 @@ namespace dxvk { void STDMETHODCALLTYPE D3D11ImmediateContext::Unmap( ID3D11Resource* pResource, UINT Subresource) { - D3D10DeviceLock lock = LockContext(); - D3D11_RESOURCE_DIMENSION resourceDim = D3D11_RESOURCE_DIMENSION_UNKNOWN; pResource->GetType(&resourceDim); - if (resourceDim != D3D11_RESOURCE_DIMENSION_BUFFER) + if (unlikely(resourceDim != D3D11_RESOURCE_DIMENSION_BUFFER)) { + D3D10DeviceLock lock = LockContext(); UnmapImage(GetCommonTexture(pResource), Subresource); + } }