From e51d371f58c273713759dbcb9b34f61373c2703e Mon Sep 17 00:00:00 2001 From: Hayodea Hekol Date: Wed, 26 Nov 2025 13:00:24 -0400 Subject: [PATCH] LG1PclAmbienceStencil: allocate stencils in constructor --- include/user/stencil.h | 6 ++++ .../livoxGen1/lg1PcloudAmbienceStencil.h | 36 ++++++++++++++++++- .../livoxGen1/pcloudAmbienceStimulusBuffer.h | 18 ++++++++-- .../livoxGen1/pcloudStimulusProducer.cpp | 13 ++++++- 4 files changed, 68 insertions(+), 5 deletions(-) diff --git a/include/user/stencil.h b/include/user/stencil.h index 7a6b6f0..a307bd2 100644 --- a/include/user/stencil.h +++ b/include/user/stencil.h @@ -45,6 +45,12 @@ public: Stencil() = default; virtual ~Stencil() = default; + // Non-copyable, non-movable (stencils are constructed in place) + Stencil(const Stencil&) = delete; + Stencil& operator=(const Stencil&) = delete; + Stencil(Stencil&&) = delete; + Stencil& operator=(Stencil&&) = delete; + /** * Returns true if the Stencil has data, false otherwise. */ diff --git a/stimBuffApis/livoxGen1/lg1PcloudAmbienceStencil.h b/stimBuffApis/livoxGen1/lg1PcloudAmbienceStencil.h index 6a4481b..03ccc3a 100644 --- a/stimBuffApis/livoxGen1/lg1PcloudAmbienceStencil.h +++ b/stimBuffApis/livoxGen1/lg1PcloudAmbienceStencil.h @@ -32,11 +32,45 @@ public: stencilBuffer( stencilBufferConstraints, // Input constraints stencilBufferConstraints, // Output constraints (same as input) - nDgramsPerFrame) + nDgramsPerFrame), + nRangeDescriptors(0) {} + ~LG1PcloudAmbienceStencil() = default; + + // Implement pure virtual functions from Stencil + bool hasData() const override + { + return nRangeDescriptors > 0; + } + + size_t getRelevantCount() const override + { + // TODO: Implement based on range descriptors + return 0; + } + + bool isRelevant(size_t offset) const override + { + // TODO: Implement based on range descriptors + (void)offset; + return false; + } + + size_t getNRangeDescriptors() const override + { + return nRangeDescriptors; + } + + bool buildStencilMetadata() override + { + // TODO: Implement stencil metadata building + return true; + } + public: StagingBuffer stencilBuffer; + size_t nRangeDescriptors; }; } // namespace stim_buff diff --git a/stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h b/stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h index 49c9056..c198a06 100644 --- a/stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h +++ b/stimBuffApis/livoxGen1/pcloudAmbienceStimulusBuffer.h @@ -3,8 +3,11 @@ #include #include +#include +#include #include #include +#include "lg1PcloudAmbienceStencil.h" namespace smo { namespace stim_buff { @@ -27,13 +30,20 @@ public: const StagingBuffer::IOEngineConstraints& outputEngineConstraints, const SmoCallbacks& callbacks, cl_mem_flags flags, - uint32_t ambienceHighVal_) + uint32_t ambienceHighVal_, + size_t nStencils_, size_t nDgramsPerFrame_) : StimulusBuffer( parent, deviceAttachmentSpec, histbuffMs, inputEngineConstraints, outputEngineConstraints, callbacks, flags), - ambienceHighVal(ambienceHighVal_) - {} + ambienceHighVal(ambienceHighVal_), + nStencils(nStencils_) + { + // Construct stencils and add to list (FIFO behavior) + for (size_t i = 0; i < nStencils; ++i) { + stencils.emplace_back(nDgramsPerFrame_); + } + } ~PcloudAmbienceStimulusBuffer() = default; @@ -45,6 +55,8 @@ public: public: uint32_t ambienceHighVal; + size_t nStencils; + std::list stencils; }; } // namespace stim_buff diff --git a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp index b829c30..f2cd8b1 100644 --- a/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp +++ b/stimBuffApis/livoxGen1/pcloudStimulusProducer.cpp @@ -323,6 +323,16 @@ std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << st ambienceHighValParamNames, 116); uint32_t ambienceHighVal = static_cast(ambienceHighValInt); + // Parse n-stencils from qualeIfaceApiParams + const std::vector nStencilsParamNames = { + "n-stencils" + }; + int nStencilsInt = device::DeviceAttachmentSpec + ::parseOptionalParamAsIntWithSynonyms( + deviceAttachmentSpec->qualeIfaceApiParams, + nStencilsParamNames, 1); + size_t nStencils = static_cast(nStencilsInt); + /* Calculate slotStrideNBytes: * nDgramsPerStagingBufferFrame * sizeof(uint32_t) */ @@ -334,7 +344,8 @@ std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << st auto ambienceBuffer = std::make_shared( *this, deviceAttachmentSpec, histbuffMs, openClAmbienceInputConstraints, openClAmbienceInputConstraints, - *smoHooksPtr, CL_MEM_READ_WRITE, ambienceHighVal); + *smoHooksPtr, CL_MEM_READ_WRITE, ambienceHighVal, + nStencils, this->nDgramsPerStagingBufferFrame); std::cout << __func__ << ": $$$$$$$ Created PcloudAmbienceStimulusBuffer" << std::endl; this->stop();