SWDEV-392870 - Enable p2p support for image using PAL.

Change-Id: I3acbbc01ee11e488e93204814361b8c3431bca4f
This commit is contained in:
Jaydeep Patel
2023-05-02 06:56:43 +00:00
zatwierdzone przez Jaydeepkumar Patel
rodzic c585aefdb7
commit 82e4859e03
3 zmienionych plików z 53 dodań i 5 usunięć
+16
Wyświetl plik
@@ -1678,6 +1678,22 @@ pal::Memory* Device::createImage(amd::Memory& owner, bool directAccess) const {
// Create memory object
result = gpuImage->create(Resource::Pinned, &params);
} else {
Resource::CreateParams params;
params.owner_ = &owner;
params.gpu_ = static_cast<VirtualGPU*>(owner.getVirtualDevice());
params.svmBase_ = static_cast<Memory*>(owner.svmBase());
Resource::MemoryType type = Resource::MemoryType::Empty;
if (owner.P2PAccess()) {
params.svmBase_ = static_cast<Memory*>(owner.BaseP2PMemory());
if (params.svmBase_ != nullptr) {
type = Resource::P2PAccess;
}
}
if (type == Resource::P2PAccess) {
// Create memory object
result = gpuImage->create(type, &params);
}
}
if (!result && !owner.isInterop()) {
+35 -5
Wyświetl plik
@@ -220,7 +220,32 @@ GpuMemoryReference* GpuMemoryReference::Create(const Device& dev,
}
return memRef;
}
GpuMemoryReference* GpuMemoryReference::Create(const Device& dev,
const Pal::PeerImageOpenInfo& openInfo,
Pal::IImage** image) {
Pal::Result result;
size_t imageSize = 0;
size_t gpuMemSize = 0;
dev.iDev()->GetPeerImageSizes(openInfo, &imageSize, &gpuMemSize, &result);
if (Pal::Result::Success != result) {
return nullptr;
}
char* imgMem = new char[imageSize];
GpuMemoryReference* memRef = new (gpuMemSize) GpuMemoryReference(dev);
if (memRef != nullptr) {
result = dev.iDev()->OpenPeerImage(openInfo, imgMem, &memRef[1], image,
&memRef->gpuMem_);
if (result == Pal::Result::Success) {
result = memRef->MakeResident();
}
if (result != Pal::Result::Success) {
memRef->release();
return nullptr;
}
}
return memRef;
}
// ================================================================================================
GpuMemoryReference::GpuMemoryReference(const Device& dev)
: gpuMem_(nullptr), cpuAddress_(nullptr), device_(dev), gpu_(nullptr) {}
@@ -1003,11 +1028,16 @@ bool Resource::CreateInterop(CreateParams* params) {
}
// ================================================================================================
bool Resource::CreateP2PAccess(CreateParams* params) {
Pal::PeerGpuMemoryOpenInfo openInfo = {};
openInfo.pOriginalMem = params->svmBase_->iMem();
memRef_ = GpuMemoryReference::Create(dev(), openInfo);
bool Resource::CreateP2PAccess(CreateParams* params) {
if (params->owner_->asImage()) {
Pal::PeerImageOpenInfo openInfo = {};
openInfo.pOriginalImage = params->svmBase_->image();
memRef_ = GpuMemoryReference::Create(dev(), openInfo, &image_);
} else {
Pal::PeerGpuMemoryOpenInfo openInfo = {};
openInfo.pOriginalMem = params->svmBase_->iMem();
memRef_ = GpuMemoryReference::Create(dev(), openInfo);
}
if (nullptr == memRef_) {
return false;
}
+2
Wyświetl plik
@@ -55,6 +55,8 @@ class GpuMemoryReference : public amd::ReferenceCountedObject {
static GpuMemoryReference* Create(const Device& dev, const Pal::PeerGpuMemoryOpenInfo& openInfo);
static GpuMemoryReference* Create(const Device& dev, const Pal::PeerImageOpenInfo& openInfo,
Pal::IImage** image);
//! Default constructor
GpuMemoryReference(const Device& dev);