clr: Fix condition for taking shader path (#884)

* SWDEV-551080
* Fix condition for taking shader path, the size check was moved
  incorrectly
* Also account for a bitmask returned for preferred engines
This commit is contained in:
SaleelK
2025-09-09 13:13:29 -07:00
committed by GitHub
vanhempi 5dbca01d2d
commit c8e91b3f3e
@@ -526,7 +526,7 @@ inline bool DmaBlitManager::rocrCopyBuffer(address dst, hsa_agent_t& dstAgent, c
// If requested engine is valid and available, use it
if (recIdMask != 0 && (freeEngineMask & recIdMask) != 0) {
copyMask = recIdMask;
copyMask = recIdMask - (recIdMask & (recIdMask - 1));
} else {
// Otherwise use first available engine
copyMask = freeEngineMask - (freeEngineMask & (freeEngineMask - 1));
@@ -2252,17 +2252,29 @@ bool KernelBlitManager::copyBuffer(device::Memory& srcMemory, device::Memory& ds
}
}
bool ipcShared = srcMemory.owner()->ipcShared() || dstMemory.owner()->ipcShared();
// Determine if we should use shader copy path based on various conditions
bool hwlCopyDisabled = setup_.disableHwlCopyBuffer_;
bool useShaderCopyPath = setup_.disableHwlCopyBuffer_ ||
(copyMetadata.copyEnginePreference_ ==
amd::CopyMetadata::CopyEnginePreference::BLIT) ||
(sizeIn[0] <= dev().settings().sdmaCopyThreshold_ &&
!(p2p || ipcShared) &&
!srcMemory.isHostMemDirectAccess() &&
!dstMemory.isHostMemDirectAccess() &&
copyMetadata.copyEnginePreference_ !=
amd::CopyMetadata::CopyEnginePreference::SDMA);
// Check copy engine preferences
bool isSdmaPreference =
copyMetadata.copyEnginePreference_ == amd::CopyMetadata::CopyEnginePreference::SDMA;
bool isBlitPreference =
copyMetadata.copyEnginePreference_ == amd::CopyMetadata::CopyEnginePreference::BLIT;
// Check memory access patterns
bool isP2pOrIpc = p2p || srcMemory.owner()->ipcShared() || dstMemory.owner()->ipcShared();
bool neitherMemoryIsHostDirectAccess =
!srcMemory.isHostMemDirectAccess() && !dstMemory.isHostMemDirectAccess();
// Determine shader copy path conditions
bool smallSizeWithNonSdmaPreference =
sizeIn[0] <= dev().settings().sdmaCopyThreshold_ && !isSdmaPreference;
bool nonP2PIpcOrDirectAccess =
!isP2pOrIpc && neitherMemoryIsHostDirectAccess && !isSdmaPreference;
const bool useShaderCopyPath = hwlCopyDisabled || smallSizeWithNonSdmaPreference ||
nonP2PIpcOrDirectAccess || isBlitPreference;
if (!useShaderCopyPath) {
if (amd::IS_HIP) {