diff --git a/projects/clr/rocclr/device/device.hpp b/projects/clr/rocclr/device/device.hpp index 12a75592fe..e3818b5c18 100644 --- a/projects/clr/rocclr/device/device.hpp +++ b/projects/clr/rocclr/device/device.hpp @@ -606,6 +606,8 @@ struct Info : public amd::EmbeddedObject { bool aqlBarrierValue_; bool pcie_atomics_; //!< Pcie atomics support flag + + bool virtualMemoryManagement_; //!< Virtual memory management support }; //! Device settings diff --git a/projects/clr/rocclr/device/pal/paldevice.cpp b/projects/clr/rocclr/device/pal/paldevice.cpp index 8e970db7f6..0ad4745d4c 100644 --- a/projects/clr/rocclr/device/pal/paldevice.cpp +++ b/projects/clr/rocclr/device/pal/paldevice.cpp @@ -616,6 +616,7 @@ void NullDevice::fillDeviceInfo(const Pal::DeviceProperties& palProp, ClPrint(amd::LOG_INFO, amd::LOG_INIT, "Resizable bar enabled"); } } + info_.virtualMemoryManagement_ = true; } Device::XferBuffers::~XferBuffers() { diff --git a/projects/clr/rocclr/device/pal/palresource.cpp b/projects/clr/rocclr/device/pal/palresource.cpp index 26c213c976..72526aace7 100644 --- a/projects/clr/rocclr/device/pal/palresource.cpp +++ b/projects/clr/rocclr/device/pal/palresource.cpp @@ -465,6 +465,9 @@ void Resource::memTypeToHeap(Pal::GpuMemoryCreateInfo* createInfo) { createInfo->heaps[2] = Pal::GpuHeapGartUswc; createInfo->flags.peerWritable = dev().P2PAccessAllowed(); break; + case VaRange: + createInfo->heapCount = 0; + break; default: createInfo->heaps[0] = Pal::GpuHeapLocal; break; @@ -1272,6 +1275,9 @@ bool Resource::create(MemoryType memType, CreateParams* params, bool forceLinear memRef_->cpuAddress_ = nullptr; mapCount_++; } + if (memoryType() == VaRange) { + params->owner_->setSvmPtr(reinterpret_cast(memRef_->iMem()->Desc().gpuVirtAddr)); + } return true; } diff --git a/projects/clr/rocclr/device/rocm/rocdevice.cpp b/projects/clr/rocclr/device/rocm/rocdevice.cpp index 0736d671e6..b2391b9509 100644 --- a/projects/clr/rocclr/device/rocm/rocdevice.cpp +++ b/projects/clr/rocclr/device/rocm/rocdevice.cpp @@ -1624,6 +1624,7 @@ bool Device::populateOCLDeviceConstants() { info_.hmmSupported_, info_.hmmCpuMemoryAccessible_, info_.hmmDirectHostAccess_); info_.globalCUMask_ = {}; + info_.virtualMemoryManagement_ = false; return true; }