SWDEV-366992 - adding handle type for vk interop
Change-Id: I79ee0d89b948c21b96709e9e607abe7901621a97
[ROCm/clr commit: 78de2ae692]
Bu işleme şunda yer alıyor:
işlemeyi yapan:
Payam Ghafari
ebeveyn
f7d22068bd
işleme
82219d2fb1
@@ -113,9 +113,13 @@ hipError_t hipImportExternalMemory(
|
||||
|
||||
amd::BufferVk* pBufferVk = nullptr;
|
||||
#ifdef _WIN32
|
||||
pBufferVk = new (amdContext) amd::BufferVk(amdContext, sizeBytes, memHandleDesc->handle.win32.handle);
|
||||
pBufferVk = new (amdContext)
|
||||
amd::BufferVk(amdContext, sizeBytes, memHandleDesc->handle.win32.handle,
|
||||
static_cast<amd::VkObject::HandleType>(memHandleDesc->type));
|
||||
#else
|
||||
pBufferVk = new (amdContext) amd::BufferVk(amdContext, sizeBytes, memHandleDesc->handle.fd);
|
||||
pBufferVk = new (amdContext)
|
||||
amd::BufferVk(amdContext, sizeBytes, memHandleDesc->handle.fd,
|
||||
static_cast<amd::VkObject::HandleType>(memHandleDesc->type));
|
||||
#endif
|
||||
|
||||
if (!pBufferVk) {
|
||||
|
||||
@@ -25,28 +25,41 @@ THE SOFTWARE. */
|
||||
|
||||
namespace amd
|
||||
{
|
||||
|
||||
class VkObject : public InteropObject
|
||||
{
|
||||
protected:
|
||||
amd::Os::FileDesc handleVk_;
|
||||
|
||||
public:
|
||||
enum HandleType {
|
||||
ExternalMemoryFd = 1,
|
||||
ExternalMemoryWin32 = 2,
|
||||
ExternalMemoryWin32KMT = 3,
|
||||
};
|
||||
|
||||
//! GLObject constructor initializes member variables
|
||||
VkObject(
|
||||
amd::Os::FileDesc handle
|
||||
amd::Os::FileDesc handle,
|
||||
VkObject::HandleType handle_type
|
||||
) // Initialization of member variables
|
||||
|
||||
{
|
||||
handleVk_ = handle;
|
||||
handle_type_ = handle_type;
|
||||
}
|
||||
|
||||
virtual ~VkObject() {}
|
||||
VkObject* asVkObject() { return this; }
|
||||
amd::Os::FileDesc getVkSharedHandle() const { return handleVk_; }
|
||||
HandleType getHandleType() const { return handle_type_; }
|
||||
|
||||
protected:
|
||||
amd::Os::FileDesc handleVk_;
|
||||
VkObject::HandleType handle_type_;
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
class BufferVk : public Buffer, public VkObject
|
||||
{
|
||||
protected:
|
||||
@@ -63,15 +76,15 @@ namespace amd
|
||||
BufferVk(
|
||||
Context& amdContext,
|
||||
size_t uiSizeInBytes,
|
||||
amd::Os::FileDesc handle)
|
||||
: // Call base classes constructors
|
||||
amd::Os::FileDesc handle,
|
||||
VkObject::HandleType handle_type) : // Call base classes constructors
|
||||
Buffer(
|
||||
amdContext,
|
||||
0,
|
||||
uiSizeInBytes
|
||||
),
|
||||
VkObject(
|
||||
handle
|
||||
handle, handle_type
|
||||
)
|
||||
{
|
||||
setInteropObj(this);
|
||||
@@ -99,15 +112,15 @@ namespace amd
|
||||
ImageVk(
|
||||
Context& amdContext,
|
||||
size_t uiSizeInBytes,
|
||||
amd::Os::FileDesc handle)
|
||||
: // Call base classes constructors
|
||||
amd::Os::FileDesc handle,
|
||||
VkObject::HandleType handle_type): // Call base classes constructors
|
||||
Buffer(
|
||||
amdContext,
|
||||
0,
|
||||
uiSizeInBytes
|
||||
),
|
||||
VkObject(
|
||||
handle
|
||||
handle, handle_type
|
||||
)
|
||||
{
|
||||
setInteropObj(this);
|
||||
|
||||
@@ -357,6 +357,8 @@ bool Memory::createInterop() {
|
||||
memType = Resource::VkInterop;
|
||||
vkRes.handle_ = vkObject->getVkSharedHandle();
|
||||
vkRes.type_ = Resource::InteropTypeless;
|
||||
vkRes.nt_handle_ =
|
||||
(vkObject->getHandleType() == amd::VkObject::ExternalMemoryWin32) ? true : false;
|
||||
}
|
||||
|
||||
else if (glObject != nullptr) {
|
||||
|
||||
@@ -763,6 +763,7 @@ bool Resource::CreateInterop(CreateParams* params) {
|
||||
else if (memoryType() == VkInterop) {
|
||||
VkInteropParams* vparams = reinterpret_cast<VkInteropParams*>(params);
|
||||
openInfo.hExternalResource = vparams->handle_;
|
||||
openInfo.flags.ntHandle = vparams->nt_handle_;
|
||||
}
|
||||
#ifdef ATI_OS_WIN
|
||||
else {
|
||||
|
||||
@@ -139,6 +139,7 @@ class Resource : public amd::HeapObject {
|
||||
struct VkInteropParams : public CreateParams {
|
||||
InteropType type_; //!< Vulkan resource type
|
||||
amd::Os::FileDesc handle_;
|
||||
bool nt_handle_;
|
||||
};
|
||||
|
||||
#ifdef _WIN32
|
||||
|
||||
Yeni konuda referans
Bir kullanıcı engelle