From b232b2bbabaad56a148303dae38701ff5037f8f9 Mon Sep 17 00:00:00 2001 From: foreman Date: Thu, 1 Sep 2016 18:15:08 -0400 Subject: [PATCH] P4 to Git Change 1310033 by skudchad@skudchad_test_win_opencl2 on 2016/09/01 18:10:18 SWDEV-101383 - [RS_DVR][MGPU] Slave GPU is blocked from going into BACO when DVR process is active (no recording or instant replay) - if the OS is Win10, no need to do extensive adapter init. ReviewBoardURL = http://ocltc.amd.com/reviews/r/11241/diff/ Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudevice.cpp#552 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp#171 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gslbe/src/rt/GSLDevice.h#60 edit --- rocclr/runtime/device/gpu/gpudevice.cpp | 5 ++++ .../device/gpu/gslbe/src/rt/GSLDevice.cpp | 23 +++++++++++++++---- .../device/gpu/gslbe/src/rt/GSLDevice.h | 2 ++ 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/rocclr/runtime/device/gpu/gpudevice.cpp b/rocclr/runtime/device/gpu/gpudevice.cpp index 5d72bcf6e6..aa4cfd0f32 100644 --- a/rocclr/runtime/device/gpu/gpudevice.cpp +++ b/rocclr/runtime/device/gpu/gpudevice.cpp @@ -1800,6 +1800,7 @@ Device::bindExternalDevice( } return false; } + CloseInitializedAdapter(); } #ifdef _WIN32 @@ -1816,6 +1817,7 @@ Device::bindExternalDevice( LogError("Failed gslD3D10Associate()"); return false; } + CloseInitializedAdapter(); } if (flags & amd::Context::Flags::D3D11DeviceKhr) { @@ -1831,6 +1833,7 @@ Device::bindExternalDevice( LogError("Failed gslD3D11Associate()"); return false; } + CloseInitializedAdapter(); } if (flags & amd::Context::Flags::D3D9DeviceKhr) { @@ -1842,6 +1845,7 @@ Device::bindExternalDevice( LogWarning("D3D9<->OpenCL adapter mismatch or D3D9Associate() failure"); return false; } + CloseInitializedAdapter(); } if (flags & amd::Context::Flags::D3D9DeviceEXKhr) { @@ -1853,6 +1857,7 @@ Device::bindExternalDevice( LogWarning("D3D9<->OpenCL adapter mismatch or D3D9Associate() failure"); return false; } + CloseInitializedAdapter(); } if (flags & amd::Context::Flags::D3D9DeviceVAKhr) { diff --git a/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp b/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp index 68994f1492..c3ffd2d8d7 100644 --- a/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp +++ b/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.cpp @@ -44,6 +44,7 @@ void CALGSLDevice::Initialize() m_isComputeRingIDForced = false; m_forcedComputeEngineID = GSL_ENGINEID_INVALID; gslDeviceOps_ = NULL; + m_initLite = 0; } CALGSLDevice::CALGSLDevice() @@ -290,7 +291,22 @@ void CALGSLDevice::PerformAdapterInitialization() const { CALGSLDevice* mutable_this = const_cast(this); - mutable_this->PerformAdapterInitialization_int(false); + // Win10 initialization is more exhaustive. + // @ToDo Check if Win7 can be simplified as well + mutable_this->PerformAdapterInitialization_int((bool)m_initLite); +} + +void CALGSLDevice::CloseInitializedAdapter() +{ + // @ToDo Check if Win7 can be simplified as well + if (m_initLite) + { + //! @note: GSL device isn't thread safe + amd::ScopedLock k(gslDeviceOps()); + // close the adaptor + gsAdaptor::closeAdaptor(m_adp); + m_adp = 0; + } } void @@ -306,15 +322,14 @@ CALGSLDevice::PerformFullInitialization() const bool CALGSLDevice::SetupAdapter(int32 &asic_id) { - bool initLite = false; #ifdef ATI_OS_WIN if(osGetVersion() >= AMD_OS_VERSION_WINDOWS_10) { - initLite = true; + m_initLite = 1; } #endif - PerformAdapterInitialization_int(initLite); + PerformAdapterInitialization_int((bool)m_initLite); if (m_adp == 0) { diff --git a/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.h b/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.h index 64649c4e3c..533553e50d 100644 --- a/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.h +++ b/rocclr/runtime/device/gpu/gslbe/src/rt/GSLDevice.h @@ -102,6 +102,7 @@ public: void PerformAdapterInitialization() const; void PerformFullInitialization() const; + void CloseInitializedAdapter(); CopyType GetCopyType(gslMemObject srcMem, gslMemObject destMem, size_t* srcOffset, size_t* destOffset, bool allowDMA, uint32 flags, size_t size, bool enableCopyRect) const; @@ -207,6 +208,7 @@ private: uint m_PerformLazyDeviceInit : 1; uint m_isComputeRingIDForced : 1; uint m_isSDMAL2TConstrained : 1; + uint m_initLite : 1; }; };