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
このコミットが含まれているのは:
@@ -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:
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする