diff --git a/hipamd/src/hip_gl.cpp b/hipamd/src/hip_gl.cpp index 50d7422fdd..5094085819 100644 --- a/hipamd/src/hip_gl.cpp +++ b/hipamd/src/hip_gl.cpp @@ -674,6 +674,14 @@ hipError_t hipGraphicsMapResources(int count, hipGraphicsResource_t* resources, if (as_cl(&command->event()) == nullptr) { command->release(); } + + const auto it = amdContext->devices().cbegin(); + amd::Device* curDev = *it; + for (auto& mobj : memObjects) { + device::Memory* mem = reinterpret_cast(mobj->getDeviceMemory(*curDev)); + amd::MemObjMap::AddMemObj(reinterpret_cast(mem->virtualAddress()), mobj); + mobj->retain(); + } HIP_RETURN(hipSuccess); } @@ -699,7 +707,6 @@ hipError_t hipGraphicsResourceGetMappedPointer(void** devPtr, size_t* size, // amd::MemObjMap using device virtual address during creation. device::Memory* mem = reinterpret_cast(amdMem->getDeviceMemory(*curDev)); *devPtr = reinterpret_cast(static_cast(mem->virtualAddress())); - HIP_RETURN(hipSuccess); } @@ -744,15 +751,19 @@ hipError_t hipGraphicsUnmapResources(int count, hipGraphicsResource_t* resources if (as_cl(&command->event()) == nullptr) { command->release(); } - + for (auto& mobj : memObjects) { + mobj->release(); + } HIP_RETURN(hipSuccess); } hipError_t hipGraphicsUnregisterResource(hipGraphicsResource_t resource) { HIP_INIT_API(hipGraphicsUnregisterResource, resource); - amd::BufferGL* pBufferGL = reinterpret_cast(resource); - delete pBufferGL; + if (resource == nullptr) { + HIP_RETURN(hipErrorInvalidValue); + } + reinterpret_cast(resource)->release(); HIP_RETURN(hipSuccess); }