From 58e4bca4494185d8b1e97e808ddd97eeef95ab14 Mon Sep 17 00:00:00 2001
From: foreman
Date: Fri, 15 Nov 2019 16:38:27 -0500
Subject: [PATCH] P4 to Git Change 2031605 by gandryey@gera-win10 on 2019/11/15
16:34:08
SWDEV-79445 - OCL generic changes and code clean-up
- Make sure transfer doesn't exceed CP dma limit
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palresource.cpp#81 edit
---
rocclr/runtime/device/pal/palresource.cpp | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/rocclr/runtime/device/pal/palresource.cpp b/rocclr/runtime/device/pal/palresource.cpp
index 79166b9cb5..4b703690bf 100644
--- a/rocclr/runtime/device/pal/palresource.cpp
+++ b/rocclr/runtime/device/pal/palresource.cpp
@@ -1471,7 +1471,22 @@ bool Resource::partialMemCopyTo(VirtualGPU& gpu, const amd::Coord3D& srcOrigin,
copyRegion.srcOffset = srcOrigin[0] + offset();
copyRegion.dstOffset = dstOrigin[0] + dstResource.offset();
copyRegion.copySize = size[0];
- gpu.iCmd()->CmdCopyMemory(*iMem(), *dstResource.iMem(), 1, ©Region);
+ constexpr size_t CpCopySizeLimit = (1 << 26) - sizeof(uint64_t);
+ if (dev().settings().disableSdma_ && (size[0] > CpCopySizeLimit)) {
+ size_t orgSize = size[0];
+ copyRegion.copySize = CpCopySizeLimit;
+ do {
+ gpu.iCmd()->CmdCopyMemory(*iMem(), *dstResource.iMem(), 1, ©Region);
+ copyRegion.srcOffset += CpCopySizeLimit;
+ copyRegion.dstOffset += CpCopySizeLimit;
+ orgSize -= (orgSize > CpCopySizeLimit) ? CpCopySizeLimit : orgSize;
+ if (orgSize < CpCopySizeLimit) {
+ copyRegion.copySize = orgSize;
+ }
+ } while (orgSize > 0);
+ } else {
+ gpu.iCmd()->CmdCopyMemory(*iMem(), *dstResource.iMem(), 1, ©Region);
+ }
}
}