SWDEV-411343 - Import VK buffer memory exported by name.

Change-Id: Idc7c840fcd6bf758ecc29ffd6558d24e5bd0a25b


[ROCm/clr commit: 9551d48e7f]
Dieser Commit ist enthalten in:
Jaydeep Patel
2023-12-13 04:30:34 +00:00
committet von Jaydeepkumar Patel
Ursprung 32b402f11a
Commit 526e60cb70
5 geänderte Dateien mit 26 neuen und 6 gelöschten Zeilen
+2 -1
Datei anzeigen
@@ -113,7 +113,8 @@ hipError_t hipImportExternalMemory(
#ifdef _WIN32
auto ext_buffer = new (amdContext) amd::ExternalBuffer(amdContext, memHandleDesc->size,
memHandleDesc->handle.win32.handle,
static_cast<amd::ExternalMemory::HandleType>(memHandleDesc->type));
static_cast<amd::ExternalMemory::HandleType>(memHandleDesc->type),
memHandleDesc->handle.win32.name);
#else
auto ext_buffer = new (amdContext) amd::ExternalBuffer(amdContext, memHandleDesc->size,
memHandleDesc->handle.fd,
@@ -357,6 +357,7 @@ bool Memory::createInterop() {
vkRes.owner_ = owner();
memType = Resource::VkInterop;
vkRes.handle_ = ext_memory->Handle();
vkRes.name_ = ext_memory->Name();
vkRes.type_ = Resource::InteropTypeless;
vkRes.nt_handle_ =
((ext_memory->Type() != amd::ExternalMemory::HandleType::OpaqueFd) &&
@@ -802,7 +802,21 @@ bool Resource::CreateInterop(CreateParams* params) {
}
else if (memoryType() == VkInterop) {
VkInteropParams* vparams = reinterpret_cast<VkInteropParams*>(params);
openInfo.hExternalResource = vparams->handle_;
if (vparams->handle_) {
openInfo.hExternalResource = vparams->handle_;
} else if (vparams->name_) {
Pal::ExternalHandleInfo eHandleInfo = {};
eHandleInfo.objectType = Pal::ExternalObjectType::Allocation;
eHandleInfo.pNtObjectName = reinterpret_cast<const wchar_t*>(vparams->name_);
SECURITY_ATTRIBUTES securityAttributes = {};
securityAttributes.bInheritHandle = TRUE;
eHandleInfo.pSecurityAttributes = &securityAttributes;
eHandleInfo.accessFlags = GENERIC_READ | GENERIC_WRITE;
if (Pal::Result::Success !=
dev().iDev()->OpenExternalHandleFromName(eHandleInfo, &openInfo.hExternalResource)) {
return false;
}
}
openInfo.flags.ntHandle = vparams->nt_handle_;
}
#ifdef ATI_OS_WIN
@@ -142,6 +142,7 @@ class Resource : public amd::HeapObject {
struct VkInteropParams : public CreateParams {
InteropType type_; //!< Vulkan resource type
amd::Os::FileDesc handle_;
const void* name_;
bool nt_handle_;
};
@@ -38,17 +38,20 @@ namespace amd
D3D11ResourceKmt = 7
};
ExternalMemory(amd::Os::FileDesc handle, ExternalMemory::HandleType handle_type)
: handle_(handle), handle_type_(handle_type) {}
ExternalMemory(amd::Os::FileDesc handle, const void* name,
ExternalMemory::HandleType handle_type)
: handle_(handle), name_(name), handle_type_(handle_type) {}
virtual ~ExternalMemory() override {}
ExternalMemory* asExternalMemory() final { return this; }
amd::Os::FileDesc Handle() const { return handle_; }
const void* Name() const { return name_; }
HandleType Type() const { return handle_type_; }
protected:
amd::Os::FileDesc handle_;
const void* name_;
ExternalMemory::HandleType handle_type_;
};
@@ -64,8 +67,8 @@ namespace amd
public:
ExternalBuffer(Context& amdContext, size_t size_in_bytes, amd::Os::FileDesc handle,
ExternalMemory::HandleType handle_type)
: Buffer(amdContext, 0, size_in_bytes), ExternalMemory(handle, handle_type) {
ExternalMemory::HandleType handle_type, const void* name = nullptr)
: Buffer(amdContext, 0, size_in_bytes), ExternalMemory(handle, name, handle_type) {
setInteropObj(this);
}