From 017d0f3e038f6b36e03671c3667ce104f438834e Mon Sep 17 00:00:00 2001
From: foreman
Date: Fri, 13 Jul 2018 15:05:05 -0400
Subject: [PATCH] P4 to Git Change 1580351 by vsytchen@vsytchen-win10 on
2018/07/13 14:54:15
SWDEV-158585 - [ROCm] OCLPinnedMemory test is giving VM fault
1. If host ptr is present, use the CopyBuffer path instead of the ReadBuffer path
ReviewBoardURL = http://ocltc.amd.com/reviews/r/15403/diff/
Affected files ...
... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.cpp#58 edit
---
rocclr/runtime/device/rocm/rocvirtual.cpp | 52 +++++++++++++++++++----
1 file changed, 44 insertions(+), 8 deletions(-)
diff --git a/rocclr/runtime/device/rocm/rocvirtual.cpp b/rocclr/runtime/device/rocm/rocvirtual.cpp
index 5319e85b12..05d041ff77 100644
--- a/rocclr/runtime/device/rocm/rocvirtual.cpp
+++ b/rocclr/runtime/device/rocm/rocvirtual.cpp
@@ -829,13 +829,31 @@ void VirtualGPU::submitReadMemory(amd::ReadMemoryCommand& cmd) {
break;
}
case CL_COMMAND_READ_BUFFER_RECT: {
- result = blitMgr().readBufferRect(*devMem, dst, cmd.bufRect(), cmd.hostRect(), size,
- cmd.isEntireMemory());
+ amd::BufferRect hostbufferRect;
+ amd::Coord3D region(0);
+ amd::Coord3D hostOrigin(cmd.hostRect().start_ + offset);
+ hostbufferRect.create(hostOrigin.c, size.c, cmd.hostRect().rowPitch_,
+ cmd.hostRect().slicePitch_);
+ if (hostMemory != nullptr) {
+ result = blitMgr().copyBufferRect(*devMem, *hostMemory, cmd.bufRect(), hostbufferRect,
+ size, cmd.isEntireMemory());
+ } else {
+ result = blitMgr().readBufferRect(*devMem, dst, cmd.bufRect(), cmd.hostRect(), size,
+ cmd.isEntireMemory());
+ }
break;
}
case CL_COMMAND_READ_IMAGE: {
- result = blitMgr().readImage(*devMem, dst, cmd.origin(), size, cmd.rowPitch(),
- cmd.slicePitch(), cmd.isEntireMemory());
+ if (hostMemory != nullptr) {
+ // Accelerated image to buffer transfer without pinning
+ amd::Coord3D dstOrigin(offset);
+ result =
+ blitMgr().copyImageToBuffer(*devMem, *hostMemory, cmd.origin(), dstOrigin, size,
+ cmd.isEntireMemory(), cmd.rowPitch(), cmd.slicePitch());
+ } else {
+ result = blitMgr().readImage(*devMem, dst, cmd.origin(), size, cmd.rowPitch(),
+ cmd.slicePitch(), cmd.isEntireMemory());
+ }
break;
}
default:
@@ -903,13 +921,31 @@ void VirtualGPU::submitWriteMemory(amd::WriteMemoryCommand& cmd) {
break;
}
case CL_COMMAND_WRITE_BUFFER_RECT: {
- result = blitMgr().writeBufferRect(src, *devMem, cmd.hostRect(), cmd.bufRect(), size,
- cmd.isEntireMemory());
+ amd::BufferRect hostbufferRect;
+ amd::Coord3D region(0);
+ amd::Coord3D hostOrigin(cmd.hostRect().start_ + offset);
+ hostbufferRect.create(hostOrigin.c, size.c, cmd.hostRect().rowPitch_,
+ cmd.hostRect().slicePitch_);
+ if (hostMemory != nullptr) {
+ result = blitMgr().copyBufferRect(*hostMemory, *devMem, hostbufferRect, cmd.bufRect(),
+ size, cmd.isEntireMemory());
+ } else {
+ result = blitMgr().writeBufferRect(src, *devMem, cmd.hostRect(), cmd.bufRect(), size,
+ cmd.isEntireMemory());
+ }
break;
}
case CL_COMMAND_WRITE_IMAGE: {
- result = blitMgr().writeImage(src, *devMem, cmd.origin(), size, cmd.rowPitch(),
- cmd.slicePitch(), cmd.isEntireMemory());
+ if (hostMemory != nullptr) {
+ // Accelerated buffer to image transfer without pinning
+ amd::Coord3D srcOrigin(offset);
+ result =
+ blitMgr().copyBufferToImage(*hostMemory, *devMem, srcOrigin, cmd.origin(), size,
+ cmd.isEntireMemory(), cmd.rowPitch(), cmd.slicePitch());
+ } else {
+ result = blitMgr().writeImage(src, *devMem, cmd.origin(), size, cmd.rowPitch(),
+ cmd.slicePitch(), cmd.isEntireMemory());
+ }
break;
}
default: