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