OClCollMeshEngn: Use uniq_ptr for Cl handle RAII

We no longer use a goto slide to deal with initialization errors
in setup()/finalize(). We use RAII instead.
This commit is contained in:
2025-12-07 19:12:26 -04:00
parent dc5587bfcc
commit 702855a27d
2 changed files with 125 additions and 84 deletions
@@ -5,6 +5,7 @@
#include <cstdint>
#include <cstddef>
#include <memory>
#include <type_traits>
#include <functional>
#include <optional>
#include <iostream>
@@ -26,6 +27,25 @@
namespace smo {
namespace stim_buff {
// Custom deleters for OpenCL handles
struct ClProgramDeleter
{
void operator()(cl_program prog) const
{ if (prog) { clReleaseProgram(prog); } }
};
struct ClKernelDeleter
{
void operator()(cl_kernel kernel) const
{ if (kernel) { clReleaseKernel(kernel); } }
};
// 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>;
class PcloudStimulusProducer;
class OpenClCollatingAndMeshingEngine
@@ -90,10 +110,10 @@ private:
// OpenCL infrastructure (managed by ComputeManager)
std::shared_ptr<smo::compute::ComputeDevice> computeDevice;
cl_program slotCompactorProgram;
cl_program collateProgram;
cl_kernel slotCompactorKernel;
cl_kernel collateKernel;
ClProgramPtr slotCompactorProgram;
ClProgramPtr collateProgram;
ClKernelPtr slotCompactorKernel;
ClKernelPtr collateKernel;
// OpenCL buffers (managed by ComputeManager)
std::shared_ptr<smo::compute::ClBuffer> clAssemblyBufferClBuffer;
@@ -145,9 +165,13 @@ private:
// Private helper methods
bool compileAndPrepareKernel(
const std::shared_ptr<smo::compute::ComputeDevice>& computeDevice,
const char* kernelSource, size_t kernelSourceLen,
const char* kernelName, cl_program& program, cl_kernel& kernel);
bool compileAndPrepareKernels();
const char* kernelName, ClProgramPtr& program, ClKernelPtr& kernel);
bool compileAndPrepareKernels(
const std::shared_ptr<smo::compute::ComputeDevice>& computeDevice,
ClProgramPtr& slotCompactorProgram, ClProgramPtr& collateProgram,
ClKernelPtr& slotCompactorKernel, ClKernelPtr& collateKernel);
bool setupSlotCompactorsArgs(
StagingBuffer& assemblyBuff, uint32_t nSucceeded);
bool setupCollateDgramsArgs(