diff --git a/include/user/spMcRingBuffer.h b/include/user/spMcRingBuffer.h index f4a350a..b368af6 100644 --- a/include/user/spMcRingBuffer.h +++ b/include/user/spMcRingBuffer.h @@ -10,6 +10,9 @@ #include #include #include +#include +#define CL_TARGET_OPENCL_VERSION 120 +#include namespace smo { namespace stim_buff { @@ -31,7 +34,9 @@ public: * each initialized with a SlotDesc from the FrameAssemblyDesc. */ explicit SpMcRingBuffer( - const std::shared_ptr &frameAssemblyDesc_) + const std::shared_ptr &frameAssemblyDesc_, + const SmoCallbacks& callbacks, + cl_mem_flags flags) : nBuffers(frameAssemblyDesc_ ? frameAssemblyDesc_->slots.size() : 0), frameAssemblyDesc(frameAssemblyDesc_), @@ -54,7 +59,8 @@ public: for (size_t i = 0; i < nBuffers; ++i) { slots[i].~StimulusFrame(); // Destroy default-constructed object - new (&slots[i]) StimulusFrame(frameAssemblyDesc->slots[i]); + new (&slots[i]) StimulusFrame( + frameAssemblyDesc->slots[i], callbacks, flags); } } diff --git a/include/user/stimulusBuffer.h b/include/user/stimulusBuffer.h index 7569954..15750c1 100644 --- a/include/user/stimulusBuffer.h +++ b/include/user/stimulusBuffer.h @@ -7,8 +7,11 @@ #include #include #include +#include #include "stimulusFrame.h" #include "deviceAttachmentSpec.h" +#define CL_TARGET_OPENCL_VERSION 120 +#include namespace smo { namespace stim_buff { @@ -31,7 +34,9 @@ public: &deviceAttachmentSpec, int histbuffMs, const StagingBuffer::IOEngineConstraints& inputEngineConstraints, - const StagingBuffer::IOEngineConstraints& outputEngineConstraints) + const StagingBuffer::IOEngineConstraints& outputEngineConstraints, + const SmoCallbacks& callbacks, + cl_mem_flags flags) : parent(parent), deviceAttachmentSpec(deviceAttachmentSpec), histbuffMs(histbuffMs), @@ -39,7 +44,9 @@ public: inputEngineConstraints, outputEngineConstraints, static_cast(histbuffMs / CONFIG_STIMBUFF_FRAME_PERIOD_MS)), - ringBuffer(static_cast>(stagingBuffer)) + ringBuffer( + static_cast>(stagingBuffer), + callbacks, flags) {} virtual ~StimulusBuffer() = default; diff --git a/include/user/stimulusFrame.h b/include/user/stimulusFrame.h index 32caea7..b18cdb7 100644 --- a/include/user/stimulusFrame.h +++ b/include/user/stimulusFrame.h @@ -2,8 +2,13 @@ #define _ATTACHMENT_SUPPORT_STIMULUS_FRAME_H #include +#include #include #include +#include +#include +#define CL_TARGET_OPENCL_VERSION 120 +#include namespace smo { namespace stim_buff { @@ -69,9 +74,30 @@ public: */ StimulusFrame() = default; - StimulusFrame(const FrameAssemblyDesc::SlotDesc& slotDesc_) + StimulusFrame( + const FrameAssemblyDesc::SlotDesc& slotDesc_, + const SmoCallbacks& callbacks, + cl_mem_flags flags) : slotDesc(slotDesc_) - {} + { + if (!callbacks.ComputeManager_createUseHostPtrBuffer) + { + throw std::runtime_error(std::string(__func__) + + ": StimulusFrame: ComputeManager_createUseHostPtrBuffer " + "callback is null"); + } + + clBuffer = callbacks.ComputeManager_createUseHostPtrBuffer( + slotDesc.vaddr, slotDesc.nBytes, flags); + + if (!clBuffer) + { + throw std::runtime_error(std::string(__func__) + + ": StimulusFrame: failed to create clBuffer"); + } + + std::cout << __func__ << ": StimulusFrame: created clBuffer with size " << slotDesc.nBytes << " bytes @ " << (const void*)slotDesc.vaddr << std::endl; + } ~StimulusFrame() = default; @@ -85,6 +111,7 @@ public: SequenceLock lock; SimultaneityStamp simultaneityStamp; FrameAssemblyDesc::SlotDesc slotDesc; + std::shared_ptr clBuffer; }; } // namespace stim_buff diff --git a/stimBuffApis/livoxGen1/meshStimulusBuffer.h b/stimBuffApis/livoxGen1/meshStimulusBuffer.h index f5d4a49..b208bd8 100644 --- a/stimBuffApis/livoxGen1/meshStimulusBuffer.h +++ b/stimBuffApis/livoxGen1/meshStimulusBuffer.h @@ -23,10 +23,13 @@ public: const std::shared_ptr& deviceAttachmentSpec, int histbuffMs, const StagingBuffer::IOEngineConstraints& inputEngineConstraints, - const StagingBuffer::IOEngineConstraints& outputEngineConstraints) + const StagingBuffer::IOEngineConstraints& outputEngineConstraints, + const SmoCallbacks& callbacks, + cl_mem_flags flags) : StimulusBuffer( parent, deviceAttachmentSpec, histbuffMs, - inputEngineConstraints, outputEngineConstraints) + inputEngineConstraints, outputEngineConstraints, + callbacks, flags) {} ~MeshStimulusBuffer() = default; diff --git a/stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h b/stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h index c10d20d..c5c41c2 100644 --- a/stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h +++ b/stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h @@ -23,10 +23,13 @@ public: const std::shared_ptr& deviceAttachmentSpec, int histbuffMs, const StagingBuffer::IOEngineConstraints& inputEngineConstraints, - const StagingBuffer::IOEngineConstraints& outputEngineConstraints) + const StagingBuffer::IOEngineConstraints& outputEngineConstraints, + const SmoCallbacks& callbacks, + cl_mem_flags flags) : StimulusBuffer( parent, deviceAttachmentSpec, histbuffMs, - inputEngineConstraints, outputEngineConstraints) + inputEngineConstraints, outputEngineConstraints, + callbacks, flags) {} ~PcloudAmbienceStimulusBuffer() = default; diff --git a/stimBuffApis/livoxGen1/pcloudIntensityStimulusBuffer.h b/stimBuffApis/livoxGen1/pcloudIntensityStimulusBuffer.h index 8aa10ef..e978f30 100644 --- a/stimBuffApis/livoxGen1/pcloudIntensityStimulusBuffer.h +++ b/stimBuffApis/livoxGen1/pcloudIntensityStimulusBuffer.h @@ -24,10 +24,13 @@ public: &deviceAttachmentSpec, int histbuffMs, const StagingBuffer::IOEngineConstraints& inputEngineConstraints, - const StagingBuffer::IOEngineConstraints& outputEngineConstraints) + const StagingBuffer::IOEngineConstraints& outputEngineConstraints, + const SmoCallbacks& callbacks, + cl_mem_flags flags) : StimulusBuffer( parent, deviceAttachmentSpec, histbuffMs, - inputEngineConstraints, outputEngineConstraints) + inputEngineConstraints, outputEngineConstraints, + callbacks, flags) {} ~PcloudIntensityStimulusBuffer() = default; diff --git a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp index bb202b5..5517e49 100644 --- a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp +++ b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp @@ -83,10 +83,12 @@ collationBuffer( StagingBuffer::IOEngineConstraints::openClInputConstraints, nDgramsPerStagingBufferFrame), tempStimulusFrameMem(0), -tempStimulusFrame(FrameAssemblyDesc::SlotDesc{ - 0, - reinterpret_cast(&tempStimulusFrameMem), - sizeof(tempStimulusFrameMem)}) +tempStimulusFrame( + FrameAssemblyDesc::SlotDesc{ + 0, + reinterpret_cast(&tempStimulusFrameMem), + sizeof(tempStimulusFrameMem)}, + *smoHooksPtr, 0) { if (smoHooksPtr->OptionParser_getOptions().verbose) { @@ -236,7 +238,8 @@ PcloudStimulusProducer::getOrCreateAttachedStimulusBuffer( std::cout << __func__ << ": $$$$$$$ Creating MeshStimulusBuffer" << std::endl; auto meshBuffer = std::make_shared( *this, deviceAttachmentSpec, histbuffMs, - openClMeshInputConstraints, openClMeshInputConstraints); + openClMeshInputConstraints, openClMeshInputConstraints, + *smoHooksPtr, CL_MEM_READ_WRITE); std::cout << __func__ << ": $$$$$$$ Created MeshStimulusBuffer" << std::endl; meshStimulusBuffer = meshBuffer; @@ -256,7 +259,8 @@ std::cout << __func__ << ": $$$$$$$ Created MeshStimulusBuffer" << std::endl; std::cout << __func__ << ": $$$$$$$ Creating PcloudIntensityStimulusBuffer" << std::endl; auto intensityBuffer = std::make_shared( *this, deviceAttachmentSpec, histbuffMs, - openClIntensityInputConstraints, openClIntensityInputConstraints); + openClIntensityInputConstraints, openClIntensityInputConstraints, + *smoHooksPtr, CL_MEM_READ_WRITE); std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << std::endl; intensityStimulusBuffer = intensityBuffer; @@ -275,7 +279,8 @@ std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << st auto ambienceBuffer = std::make_shared( *this, deviceAttachmentSpec, histbuffMs, - openClAmbienceInputConstraints, openClAmbienceInputConstraints); + openClAmbienceInputConstraints, openClAmbienceInputConstraints, + *smoHooksPtr, CL_MEM_READ_WRITE); std::cout << __func__ << ": $$$$$$$ Created PcloudAmbienceStimulusBuffer" << std::endl; ambienceStimulusBuffer = ambienceBuffer;