From 4f46ced61a1c63e509df454ff83e89934d246c62 Mon Sep 17 00:00:00 2001
From: foreman
Date: Tue, 24 Jul 2018 19:14:26 -0400
Subject: [PATCH] P4 to Git Change 1584936 by vsytchen@vsytchen-win10 on
2018/07/24 18:57:28
SWDEV-79445 - OCL generic changes and code clean-up
1. In SvmCopyMemoryCommand handle the case when both src and dst pointer don't belong to the SVM space.
ReviewBoardURL = http://ocltc.amd.com/reviews/r/15481/diff/
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuvirtual.cpp#424 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palvirtual.cpp#117 edit
[ROCm/clr commit: ebe91eeace9c031ad251cc5850ed522bcf94b8ad]
---
projects/clr/rocclr/runtime/device/gpu/gpuvirtual.cpp | 7 +++++--
projects/clr/rocclr/runtime/device/pal/palvirtual.cpp | 7 +++++--
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/projects/clr/rocclr/runtime/device/gpu/gpuvirtual.cpp b/projects/clr/rocclr/runtime/device/gpu/gpuvirtual.cpp
index 0ca26abbce..21fd4e43e3 100644
--- a/projects/clr/rocclr/runtime/device/gpu/gpuvirtual.cpp
+++ b/projects/clr/rocclr/runtime/device/gpu/gpuvirtual.cpp
@@ -964,7 +964,10 @@ void VirtualGPU::submitSvmCopyMemory(amd::SvmCopyMemoryCommand& vcmd) {
}
}
- if (nullptr == srcMem && nullptr != dstMem) { // src not in svm space
+ if (nullptr == srcMem && nullptr == dstMem) { // both not in svm space
+ amd::Os::fastMemcpy(vcmd.dst(), vcmd.src(), vcmd.srcSize());
+ result = true;
+ } else if (nullptr == srcMem && nullptr != dstMem) { // src not in svm space
Memory* memory = dev().getGpuMemory(dstMem);
// Synchronize source and destination memory
syncFlags.skipEntire_ = dstMem->isEntirelyCovered(dstOrigin, size);
@@ -981,7 +984,7 @@ void VirtualGPU::submitSvmCopyMemory(amd::SvmCopyMemoryCommand& vcmd) {
result = blitMgr().readBuffer(*memory, vcmd.dst(), srcOrigin, size,
srcMem->isEntirelyCovered(srcOrigin, size));
- } else if (nullptr != srcMem && nullptr != dstMem) { // both not in svm space
+ } else if (nullptr != srcMem && nullptr != dstMem) { // both in svm space
bool entire =
srcMem->isEntirelyCovered(srcOrigin, size) && dstMem->isEntirelyCovered(dstOrigin, size);
result =
diff --git a/projects/clr/rocclr/runtime/device/pal/palvirtual.cpp b/projects/clr/rocclr/runtime/device/pal/palvirtual.cpp
index 78a96fb2e2..0dfd42971e 100644
--- a/projects/clr/rocclr/runtime/device/pal/palvirtual.cpp
+++ b/projects/clr/rocclr/runtime/device/pal/palvirtual.cpp
@@ -1388,7 +1388,10 @@ void VirtualGPU::submitSvmCopyMemory(amd::SvmCopyMemoryCommand& vcmd) {
}
}
- if (nullptr == srcMem && nullptr != dstMem) { // src not in svm space
+ if (nullptr == srcMem && nullptr == dstMem) { // both not in svm space
+ amd::Os::fastMemcpy(vcmd.dst(), vcmd.src(), vcmd.srcSize());
+ result = true;
+ } else if (nullptr == srcMem && nullptr != dstMem) { // src not in svm space
Memory* memory = dev().getGpuMemory(dstMem);
// Synchronize source and destination memory
syncFlags.skipEntire_ = dstMem->isEntirelyCovered(dstOrigin, size);
@@ -1405,7 +1408,7 @@ void VirtualGPU::submitSvmCopyMemory(amd::SvmCopyMemoryCommand& vcmd) {
result = blitMgr().readBuffer(*memory, vcmd.dst(), srcOrigin, size,
srcMem->isEntirelyCovered(srcOrigin, size));
- } else if (nullptr != srcMem && nullptr != dstMem) { // both not in svm space
+ } else if (nullptr != srcMem && nullptr != dstMem) { // both in svm space
bool entire =
srcMem->isEntirelyCovered(srcOrigin, size) && dstMem->isEntirelyCovered(dstOrigin, size);
result =