P4 to Git Change 1597160 by cpaquot@cpaquot-ocl-lc-lnx on 2018/08/22 18:31:15

SWDEV-145570 - [HIP] Implemented hipSurfaceCreate/Destroy APIs.

Affected files ...

... //depot/stg/opencl/drivers/opencl/api/hip/hip_surface.cpp#4 edit
This commit is contained in:
foreman
2018-08-22 18:42:22 -04:00
والد ec3c61c7fd
کامیت efd28cf092
+18 -8
مشاهده پرونده
@@ -30,16 +30,16 @@ namespace hip {
static amd::Monitor surfaceLock("Guards surface objects"); static amd::Monitor surfaceLock("Guards surface objects");
struct hipSurface { struct hipSurface {
hipSurface(const hipResourceDesc* pResDesc): array(0) hipSurface(const hipResourceDesc* pResDesc): array(nullptr)
{ {
memcpy((void*)&resDesc, (void*)pResDesc, sizeof(hipResourceDesc)); memcpy(&resDesc, pResDesc, sizeof(hipResourceDesc));
} }
hipArray* array; hipArray* array;
hipResourceDesc resDesc; hipResourceDesc resDesc;
}; };
static std::map<hipSurfaceObject_t, hipSurface*> surfaceHash; static std::unordered_map<hipSurfaceObject_t, hipSurface*> surfaceHash;
}; };
@@ -59,11 +59,20 @@ hipError_t hipCreateSurfaceObject(hipSurfaceObject_t* pSurfObject,
default: default:
break; break;
} }
unsigned int* surfObj; hipSurfaceObject_t surfObj;
hipMalloc((void**)&surfObj, sizeof(hipArray)); hipError_t err = hipMalloc(reinterpret_cast<void**>(&surfObj), sizeof(hipArray));
hipMemcpy(surfObj, (void*)pResDesc->res.array.array, sizeof(hipArray), if (err != hipSuccess) {
delete pSurface;
HIP_RETURN(hipErrorOutOfMemory);
}
err = hipMemcpy(reinterpret_cast<void*>(surfObj), reinterpret_cast<void*>(pResDesc->res.array.array), sizeof(hipArray),
hipMemcpyHostToDevice); hipMemcpyHostToDevice);
*pSurfObject = (hipSurfaceObject_t)surfObj; if (err != hipSuccess) {
delete pSurface;
hipFree(reinterpret_cast<void*>(surfObj));
HIP_RETURN(err);
}
*pSurfObject = surfObj;
amd::ScopedLock lock(surfaceLock); amd::ScopedLock lock(surfaceLock);
surfaceHash[*pSurfObject] = pSurface; surfaceHash[*pSurfObject] = pSurface;
@@ -80,7 +89,8 @@ hipError_t hipDestroySurfaceObject(hipSurfaceObject_t surfaceObject) {
if (pSurface != nullptr) { if (pSurface != nullptr) {
delete pSurface; delete pSurface;
surfaceHash.erase(surfaceObject); surfaceHash.erase(surfaceObject);
HIP_RETURN(hipFree(reinterpret_cast<void*>(surfaceObject)));
} }
HIP_RETURN(hipSuccess); HIP_RETURN(hipErrorUnknown);
} }