2025-11-08 01:48:56 -04:00
|
|
|
#ifndef _LIVOX_GEN1_OPENCL_COLLATING_AND_MESHING_ENGINE_H
|
|
|
|
|
#define _LIVOX_GEN1_OPENCL_COLLATING_AND_MESHING_ENGINE_H
|
|
|
|
|
|
2025-11-08 12:21:04 -04:00
|
|
|
#include <boostAsioLinkageFix.h>
|
2025-11-08 01:48:56 -04:00
|
|
|
#include <cstdint>
|
|
|
|
|
#include <cstddef>
|
|
|
|
|
#include <memory>
|
2025-11-08 12:21:04 -04:00
|
|
|
#include <functional>
|
2025-11-08 01:48:56 -04:00
|
|
|
#define CL_TARGET_OPENCL_VERSION 300
|
|
|
|
|
#include <CL/cl.h>
|
2025-11-08 12:21:04 -04:00
|
|
|
#include "stagingBuffer.h"
|
2025-11-08 01:48:56 -04:00
|
|
|
|
|
|
|
|
namespace smo {
|
|
|
|
|
namespace stim_buff {
|
|
|
|
|
|
|
|
|
|
class PcloudStimulusBuffer;
|
|
|
|
|
|
|
|
|
|
class OpenClCollatingAndMeshingEngine
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
explicit OpenClCollatingAndMeshingEngine(PcloudStimulusBuffer& parent);
|
|
|
|
|
~OpenClCollatingAndMeshingEngine();
|
|
|
|
|
|
|
|
|
|
// Non-copyable, movable
|
|
|
|
|
OpenClCollatingAndMeshingEngine(
|
|
|
|
|
const OpenClCollatingAndMeshingEngine&) = delete;
|
|
|
|
|
OpenClCollatingAndMeshingEngine& operator=(
|
|
|
|
|
const OpenClCollatingAndMeshingEngine&) = delete;
|
|
|
|
|
OpenClCollatingAndMeshingEngine(
|
|
|
|
|
OpenClCollatingAndMeshingEngine&&) = default;
|
|
|
|
|
OpenClCollatingAndMeshingEngine& operator=(
|
|
|
|
|
OpenClCollatingAndMeshingEngine&&) = default;
|
|
|
|
|
|
|
|
|
|
bool setup();
|
|
|
|
|
void finalize();
|
|
|
|
|
|
2025-11-08 12:21:04 -04:00
|
|
|
// Callback function type for collateFrameReq
|
|
|
|
|
typedef std::function<void()> collateFrameReqCbFn;
|
|
|
|
|
|
|
|
|
|
void start(
|
|
|
|
|
StagingBuffer& assemblyBuff, StagingBuffer& collationBuff,
|
|
|
|
|
collateFrameReqCbFn callback);
|
|
|
|
|
void stop();
|
|
|
|
|
|
2025-11-08 01:48:56 -04:00
|
|
|
private:
|
|
|
|
|
PcloudStimulusBuffer& parent;
|
|
|
|
|
|
|
|
|
|
// OpenCL infrastructure
|
|
|
|
|
cl_platform_id platform;
|
|
|
|
|
cl_device_id device;
|
|
|
|
|
cl_context context;
|
|
|
|
|
cl_command_queue commandQueue;
|
|
|
|
|
cl_program program;
|
|
|
|
|
cl_kernel kernel;
|
|
|
|
|
bool isSetup;
|
|
|
|
|
|
|
|
|
|
// OpenCL buffers
|
2025-11-08 12:21:04 -04:00
|
|
|
cl_mem clAssemblyBuffer;
|
|
|
|
|
cl_mem clCollationBuffer;
|
|
|
|
|
|
|
|
|
|
// State tracking
|
|
|
|
|
bool isRunning;
|
|
|
|
|
cl_event currentKernelEvent;
|
|
|
|
|
bool memoryPinned;
|
|
|
|
|
|
|
|
|
|
// Memory pinning tracking
|
|
|
|
|
void* assemblyBufferPtr;
|
|
|
|
|
size_t assemblyBufferSize;
|
|
|
|
|
void* collationBufferPtr;
|
|
|
|
|
size_t collationBufferSize;
|
|
|
|
|
|
|
|
|
|
// Callback storage
|
|
|
|
|
collateFrameReqCbFn collateFrameReqCb;
|
|
|
|
|
|
|
|
|
|
// Static callback for OpenCL event
|
|
|
|
|
static void CL_CALLBACK kernelEventCallback(
|
|
|
|
|
cl_event event, cl_int event_command_exec_status, void* user_data);
|
2025-11-08 01:48:56 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace stim_buff
|
|
|
|
|
} // namespace smo
|
|
|
|
|
|
|
|
|
|
#endif // _LIVOX_GEN1_OPENCL_COLLATING_AND_MESHING_ENGINE_H
|
|
|
|
|
|