SWDEV-381627 - Move cl_vk_amd.hpp into rocclr

Rename VK interop to ExternalMemory object, since it should handle
DX interops also

Change-Id: I536ec46d3e53ece35234a2e29030393ad411b96d
This commit is contained in:
German Andryeyev
2023-04-19 16:48:00 -04:00
parent a67f354cec
commit 3e5803c4c0
6 changed files with 123 additions and 163 deletions
+15 -17
View File
@@ -25,7 +25,7 @@
#include "platform/context.hpp"
#include "platform/command.hpp"
#include "platform/memory.hpp"
#include "amdocl/cl_vk_amd.hpp"
#include "platform/external_memory.hpp"
amd::Monitor hip::hipArraySetLock{"Guards global hipArray set"};
std::unordered_set<hipArray*> hip::hipArraySet;
@@ -108,29 +108,26 @@ hipError_t hipImportExternalMemory(
HIP_RETURN(hipErrorInvalidValue);
}
size_t sizeBytes = memHandleDesc->size;
amd::Context& amdContext = *hip::getCurrentDevice()->asContext();
amd::BufferVk* pBufferVk = nullptr;
#ifdef _WIN32
pBufferVk = new (amdContext)
amd::BufferVk(amdContext, sizeBytes, memHandleDesc->handle.win32.handle,
static_cast<amd::VkObject::HandleType>(memHandleDesc->type));
auto ext_buffer = new (amdContext) amd::ExternalBuffer(amdContext, memHandleDesc->size,
memHandleDesc->handle.win32.handle,
static_cast<amd::ExternalMemory::HandleType>(memHandleDesc->type));
#else
pBufferVk = new (amdContext)
amd::BufferVk(amdContext, sizeBytes, memHandleDesc->handle.fd,
static_cast<amd::VkObject::HandleType>(memHandleDesc->type));
auto ext_buffer = new (amdContext) amd::ExternalBuffer(amdContext, memHandleDesc->size,
memHandleDesc->handle.fd,
static_cast<amd::ExternalMemory::HandleType>(memHandleDesc->type));
#endif
if (!pBufferVk) {
if (!ext_buffer) {
HIP_RETURN(hipErrorOutOfMemory);
}
if (!pBufferVk->create()) {
pBufferVk->release();
if (!ext_buffer->create()) {
ext_buffer->release();
HIP_RETURN(hipErrorOutOfMemory);
}
*extMem_out = pBufferVk;
*extMem_out = ext_buffer;
HIP_RETURN(hipSuccess);
}
@@ -145,7 +142,7 @@ hipError_t hipExternalMemoryGetMappedBuffer(
if (devPtr == nullptr || extMem == nullptr || bufferDesc == nullptr || bufferDesc->flags != 0) {
HIP_RETURN(hipErrorInvalidValue);
}
amd::BufferVk *buf = reinterpret_cast<amd::BufferVk*>(extMem);
auto buf = reinterpret_cast<amd::ExternalBuffer*>(extMem);
const device::Memory* devMem = buf->getDeviceMemory(*hip::getCurrentDevice()->devices()[0]);
if (devMem == nullptr || ((bufferDesc->offset + bufferDesc->size) > devMem->size())) {
@@ -157,18 +154,19 @@ hipError_t hipExternalMemoryGetMappedBuffer(
HIP_RETURN(hipSuccess);
}
// ================================================================================================
hipError_t hipDestroyExternalMemory(hipExternalMemory_t extMem) {
HIP_INIT_API(hipDestroyExternalMemory, extMem);
if (extMem == nullptr) {
HIP_RETURN(hipErrorInvalidValue);
}
reinterpret_cast<amd::BufferVk*>(extMem)->release();
reinterpret_cast<amd::ExternalBuffer*>(extMem)->release();
HIP_RETURN(hipSuccess);
}
// ================================================================================================
hipError_t hipImportExternalSemaphore(hipExternalSemaphore_t* extSem_out,
const hipExternalSemaphoreHandleDesc* semHandleDesc)
{