diff --git a/DirectXTex/DirectXTexD3D11.cpp b/DirectXTex/DirectXTexD3D11.cpp index 2488580..b78f8c7 100644 --- a/DirectXTex/DirectXTexD3D11.cpp +++ b/DirectXTex/DirectXTexD3D11.cpp @@ -30,6 +30,33 @@ static HRESULT _Capture( _In_ ID3D11DeviceContext* pContext, _In_ ID3D11Resource if ( !pContext || !pSource || !result.GetPixels() ) return E_POINTER; +#if defined(_XBOX_ONE) && defined(_TITLE) + + ComPtr d3dDevice; + pContext->GetDevice( d3dDevice.GetAddressOf() ); + + if ( d3dDevice->GetCreationFlags() & D3D11_CREATE_DEVICE_IMMEDIATE_CONTEXT_FAST_SEMANTICS ) + { + ComPtr d3dDeviceX; + HRESULT hr = d3dDevice.As( &d3dDeviceX ); + if ( FAILED(hr) ) + return hr; + + ComPtr d3dContextX; + hr = pContext->QueryInterface( __uuidof(ID3D11DeviceContextX), reinterpret_cast( d3dContextX.GetAddressOf() ) ); + if ( FAILED(hr) ) + return hr; + + UINT64 copyFence = d3dContextX->InsertFence(0); + + while ( d3dDeviceX->IsFencePending( copyFence ) ) + { + SwitchToThread(); + } + } + +#endif + if ( metadata.IsVolumemap() ) { //--- Volume texture ----------------------------------------------------------