OClCollMeshEng: Use RAII for unmapBuffer() event destruction
This commit is contained in:
@@ -906,35 +906,33 @@ bool OpenClCollatingAndMeshingEngine::unmapBuffer(
|
|||||||
}
|
}
|
||||||
|
|
||||||
cl_int err;
|
cl_int err;
|
||||||
cl_event unmapEvent = nullptr;
|
cl_event rawUnmapEvent = nullptr;
|
||||||
err = clEnqueueUnmapMemObject(
|
err = clEnqueueUnmapMemObject(
|
||||||
computeDevice->commandQueue, buffer, mappedPtr,
|
computeDevice->commandQueue, buffer, mappedPtr,
|
||||||
0, nullptr, &unmapEvent);
|
0, nullptr, &rawUnmapEvent);
|
||||||
|
|
||||||
if (err != CL_SUCCESS)
|
if (err != CL_SUCCESS)
|
||||||
{
|
{
|
||||||
std::cerr << __func__ << ": failed to unmap buffer: " << err
|
std::cerr << __func__ << ": failed to unmap buffer: " << err
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
goto cleanup;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Wrap event in unique_ptr for automatic cleanup
|
||||||
|
ClEventPtr unmapEvent(rawUnmapEvent);
|
||||||
|
|
||||||
// Wait for unmap to complete and release the event
|
// Wait for unmap to complete and release the event
|
||||||
err = clWaitForEvents(1, &unmapEvent);
|
cl_event eventPtr = unmapEvent.get();
|
||||||
|
err = clWaitForEvents(1, &eventPtr);
|
||||||
if (err != CL_SUCCESS)
|
if (err != CL_SUCCESS)
|
||||||
{
|
{
|
||||||
std::cerr << __func__ << ": failed to wait for unmap event: " << err
|
std::cerr << __func__ << ": failed to wait for unmap event: " << err
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
goto cleanup_unmapEvent;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
clReleaseEvent(unmapEvent);
|
|
||||||
mappedPtr = nullptr;
|
mappedPtr = nullptr;
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
cleanup_unmapEvent:
|
|
||||||
clReleaseEvent(unmapEvent);
|
|
||||||
cleanup:
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool OpenClCollatingAndMeshingEngine::mapAssemblyBuffer(cl_map_flags mapFlags)
|
bool OpenClCollatingAndMeshingEngine::mapAssemblyBuffer(cl_map_flags mapFlags)
|
||||||
|
|||||||
@@ -40,11 +40,19 @@ struct ClKernelDeleter
|
|||||||
{ if (kernel) { clReleaseKernel(kernel); } }
|
{ if (kernel) { clReleaseKernel(kernel); } }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ClEventDeleter
|
||||||
|
{
|
||||||
|
void operator()(cl_event event) const
|
||||||
|
{ if (event) { clReleaseEvent(event); } }
|
||||||
|
};
|
||||||
|
|
||||||
// Type aliases for OpenCL handle unique_ptrs
|
// Type aliases for OpenCL handle unique_ptrs
|
||||||
using ClProgramPtr = std::unique_ptr<
|
using ClProgramPtr = std::unique_ptr<
|
||||||
std::remove_pointer_t<cl_program>, ClProgramDeleter>;
|
std::remove_pointer_t<cl_program>, ClProgramDeleter>;
|
||||||
using ClKernelPtr = std::unique_ptr<
|
using ClKernelPtr = std::unique_ptr<
|
||||||
std::remove_pointer_t<cl_kernel>, ClKernelDeleter>;
|
std::remove_pointer_t<cl_kernel>, ClKernelDeleter>;
|
||||||
|
using ClEventPtr = std::unique_ptr<
|
||||||
|
std::remove_pointer_t<cl_event>, ClEventDeleter>;
|
||||||
|
|
||||||
class PcloudStimulusProducer;
|
class PcloudStimulusProducer;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user