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
committed by Jaydeepkumar Patel
parent c585aefdb7
commit 82e4859e03
3 changed files with 53 additions and 5 deletions
+35 -5
View File
@@ -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;
}