SWDEV-411343 - Import VK buffer memory exported by name.
Change-Id: Idc7c840fcd6bf758ecc29ffd6558d24e5bd0a25b
[ROCm/clr commit: 9551d48e7f]
Dieser Commit ist enthalten in:
committet von
Jaydeepkumar Patel
Ursprung
32b402f11a
Commit
526e60cb70
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren