SWDEV-366992 - adding handle type for vk interop

Change-Id: I79ee0d89b948c21b96709e9e607abe7901621a97


[ROCm/clr commit: 78de2ae692]
Bu işleme şunda yer alıyor:
pghafari
2023-04-10 19:42:47 -04:00
işlemeyi yapan: Payam Ghafari
ebeveyn f7d22068bd
işleme 82219d2fb1
5 değiştirilmiş dosya ile 32 ekleme ve 11 silme
+6 -2
Dosyayı Görüntüle
@@ -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) {
+22 -9
Dosyayı Görüntüle
@@ -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);
+2
Dosyayı Görüntüle
@@ -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) {
+1
Dosyayı Görüntüle
@@ -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 {
+1
Dosyayı Görüntüle
@@ -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