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:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user