diff --git a/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp b/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp index 588208ae47..bc614e85e4 100644 --- a/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp +++ b/projects/clr/rocclr/runtime/device/rocm/rocmemory.cpp @@ -710,6 +710,12 @@ Image::allocMapTarget( void* pHostMem = owner()->getHostMem(); + amd::Image* image = owner()->asImage(); + + size_t elementSize = image->getImageFormat().getElementSize(); + + size_t offset = origin[0] * elementSize; + if (pHostMem == NULL) { if (indirectMapCount_ == 1) { if (!allocateMapMemory(owner()->getSize())) { @@ -726,14 +732,24 @@ Image::allocMapTarget( } pHostMem = mapMemory_->getHostMem(); + + *rowPitch = region[0] * elementSize; + + size_t slicePitchTmp = 0; + + if (imageDescriptor_.geometry == HSA_EXT_IMAGE_GEOMETRY_1DA) { + slicePitchTmp = *rowPitch; + } + else { + slicePitchTmp = *rowPitch * region[1]; + } + if (slicePitch != NULL) { + *slicePitch = slicePitchTmp; + } + + return pHostMem; } - amd::Image* image = owner()->asImage(); - - size_t elementSize = image->getImageFormat().getElementSize(); - - size_t offset = origin[0] * elementSize; - // Adjust offset with Y dimension offset += image->getRowPitch() * origin[1]; diff --git a/projects/clr/rocclr/runtime/device/rocm/rocvirtual.cpp b/projects/clr/rocclr/runtime/device/rocm/rocvirtual.cpp index f55d2305d6..ca104d59f6 100644 --- a/projects/clr/rocclr/runtime/device/rocm/rocvirtual.cpp +++ b/projects/clr/rocclr/runtime/device/rocm/rocvirtual.cpp @@ -1182,8 +1182,7 @@ void VirtualGPU::submitMapMemory(amd::MapMemoryCommand &cmd) devMemory->mapMemory()->getDeviceMemory(dev(), false)); result = blitMgr().copyImageToBuffer( *hsaMemory, *mapMemory, cmd.origin(), - cmd.origin(), cmd.size(), cmd.isEntireMemory(), - image->getRowPitch(), image->getSlicePitch()); + amd::Coord3D(0,0,0), cmd.size(), cmd.isEntireMemory()); } else { result = blitMgr().readImage( @@ -1239,9 +1238,8 @@ void VirtualGPU::submitUnmapMemory(amd::UnmapMemoryCommand &cmd) roc::Memory *mapMemory = static_cast( devMemory->mapMemory()->getDeviceMemory(dev(), false)); result = blitMgr().copyBufferToImage( - *mapMemory, *devMemory, mapInfo->origin_, - mapInfo->origin_, mapInfo->region_, mapInfo->isEntire(), - image->getRowPitch(), image->getSlicePitch()); + *mapMemory, *devMemory, amd::Coord3D(0,0,0), + mapInfo->origin_, mapInfo->region_, mapInfo->isEntire()); } else { result = blitMgr().writeImage(