Stimulus[Buffer|Frame]: initial impl, unoptimized for mem use
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include <user/stimulusBuffer.h>
|
||||
#include <user/stagingBuffer.h>
|
||||
|
||||
namespace smo {
|
||||
namespace stim_buff {
|
||||
@@ -21,9 +22,12 @@ public:
|
||||
StimulusProducer& parent,
|
||||
const std::shared_ptr<device::DeviceAttachmentSpec>& deviceAttachmentSpec,
|
||||
int histbuffMs,
|
||||
const SpMcRingBuffer::InputEngineConstraints& ringBufferConstraints)
|
||||
const StagingBuffer::IOEngineConstraints& inputEngineConstraints,
|
||||
const StagingBuffer::IOEngineConstraints& outputEngineConstraints,
|
||||
size_t nSlotsPerStimFrame)
|
||||
: StimulusBuffer(
|
||||
parent, deviceAttachmentSpec, histbuffMs, ringBufferConstraints)
|
||||
parent, deviceAttachmentSpec, histbuffMs,
|
||||
inputEngineConstraints, outputEngineConstraints, nSlotsPerStimFrame)
|
||||
{}
|
||||
|
||||
~MeshStimulusBuffer() = default;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include <user/stimulusBuffer.h>
|
||||
#include <user/stagingBuffer.h>
|
||||
|
||||
namespace smo {
|
||||
namespace stim_buff {
|
||||
@@ -21,9 +22,12 @@ public:
|
||||
StimulusProducer& parent,
|
||||
const std::shared_ptr<device::DeviceAttachmentSpec>& deviceAttachmentSpec,
|
||||
int histbuffMs,
|
||||
const SpMcRingBuffer::InputEngineConstraints& ringBufferConstraints)
|
||||
const StagingBuffer::IOEngineConstraints& inputEngineConstraints,
|
||||
const StagingBuffer::IOEngineConstraints& outputEngineConstraints,
|
||||
size_t nSlotsPerStimFrame)
|
||||
: StimulusBuffer(
|
||||
parent, deviceAttachmentSpec, histbuffMs, ringBufferConstraints)
|
||||
parent, deviceAttachmentSpec, histbuffMs,
|
||||
inputEngineConstraints, outputEngineConstraints, nSlotsPerStimFrame)
|
||||
{}
|
||||
|
||||
~PcloudAmbienceStimulusBuffer() = default;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <memory>
|
||||
#include <user/stimulusBuffer.h>
|
||||
#include <user/stagingBuffer.h>
|
||||
|
||||
namespace smo {
|
||||
namespace stim_buff {
|
||||
@@ -22,9 +23,12 @@ public:
|
||||
const std::shared_ptr<device::DeviceAttachmentSpec>
|
||||
&deviceAttachmentSpec,
|
||||
int histbuffMs,
|
||||
const SpMcRingBuffer::InputEngineConstraints& ringBufferConstraints)
|
||||
const StagingBuffer::IOEngineConstraints& inputEngineConstraints,
|
||||
const StagingBuffer::IOEngineConstraints& outputEngineConstraints,
|
||||
size_t nSlotsPerStimFrame)
|
||||
: StimulusBuffer(
|
||||
parent, deviceAttachmentSpec, histbuffMs, ringBufferConstraints)
|
||||
parent, deviceAttachmentSpec, histbuffMs,
|
||||
inputEngineConstraints, outputEngineConstraints, nSlotsPerStimFrame)
|
||||
{}
|
||||
|
||||
~PcloudIntensityStimulusBuffer() = default;
|
||||
|
||||
@@ -7,8 +7,9 @@
|
||||
#include <componentThread.h>
|
||||
#include <asynchronousLoop.h>
|
||||
#include <user/stimulusFrame.h>
|
||||
#include "pcloudStimulusProducer.h"
|
||||
#include <user/frameAssemblyDesc.h>
|
||||
#include <livoxProto1/device.h>
|
||||
#include "pcloudStimulusProducer.h"
|
||||
|
||||
namespace smo {
|
||||
namespace stim_buff {
|
||||
@@ -16,8 +17,15 @@ namespace stim_buff {
|
||||
extern const SmoCallbacks* smoHooksPtr;
|
||||
|
||||
// OpenCL kernels are used to collate and produce our StimFrames.
|
||||
static SpMcRingBuffer::InputEngineConstraints openClInputConstraints(
|
||||
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)), sizeof(void *));
|
||||
static StagingBuffer::IOEngineConstraints openClInputConstraints(
|
||||
// slotStartAlignmentByteVal (page alignment)
|
||||
sizeof(float) * 3,
|
||||
// slotPadToNBytes (pointer size)
|
||||
sizeof(void *),
|
||||
// frameStartAlignmentByteVal (page alignment)
|
||||
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)),
|
||||
// framePadToNBytes (pointer size)
|
||||
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)));
|
||||
|
||||
static StagingBuffer::IOEngineConstraints openClIntensityInputConstraints(
|
||||
// slotStartAlignmentByteVal (page alignment)
|
||||
@@ -27,7 +35,17 @@ static StagingBuffer::IOEngineConstraints openClIntensityInputConstraints(
|
||||
// frameStartAlignmentByteVal (page alignment)
|
||||
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)),
|
||||
// framePadToNBytes (pointer size)
|
||||
sizeof(void *));
|
||||
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)));
|
||||
|
||||
static StagingBuffer::IOEngineConstraints openClAmbienceInputConstraints(
|
||||
// slotStartAlignmentByteVal (page alignment)
|
||||
sizeof(float),
|
||||
// slotPadToNBytes (pointer size)
|
||||
sizeof(void *),
|
||||
// frameStartAlignmentByteVal (page alignment)
|
||||
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)),
|
||||
// framePadToNBytes (pointer size)
|
||||
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)));
|
||||
|
||||
PcloudStimulusProducer::PcloudStimulusProducer(
|
||||
const std::shared_ptr<device::DeviceAttachmentSpec> &deviceAttachmentSpec,
|
||||
@@ -37,6 +55,7 @@ PcloudStimulusProducer::PcloudStimulusProducer(
|
||||
: StimulusProducer(
|
||||
deviceAttachmentSpec,
|
||||
device->componentThread->getIoService()),
|
||||
nDgramsPerStagingBufferFrame(nDgramsPerStagingBufferFrame),
|
||||
device(device),
|
||||
formatDesc(formatDesc),
|
||||
openClCollatingAndMeshingEngine(*this),
|
||||
@@ -46,6 +65,10 @@ assemblyBuffer(
|
||||
nDgramsPerStagingBufferFrame),
|
||||
ioUringAssemblyEngine(*this, nDgramsPerStagingBufferFrame),
|
||||
collationBuffer(
|
||||
StagingBuffer::IOEngineConstraints::openClInputConstraints,
|
||||
StagingBuffer::IOEngineConstraints::openClInputConstraints,
|
||||
nDgramsPerStagingBufferFrame),
|
||||
tempStimulusFrame(
|
||||
StagingBuffer::IOEngineConstraints::openClInputConstraints,
|
||||
StagingBuffer::IOEngineConstraints::openClInputConstraints,
|
||||
nDgramsPerStagingBufferFrame)
|
||||
@@ -181,30 +204,47 @@ PcloudStimulusProducer::getOrCreateAttachedStimulusBuffer(
|
||||
// Parse qualeIfaceApi to determine buffer type
|
||||
const std::string& qualeIfaceApi = deviceAttachmentSpec->qualeIfaceApi;
|
||||
|
||||
// Calculate nPointsPerStimFrame based on return mode
|
||||
size_t nPointsPerDgram = livoxProto1::Device::getNPointsPerDgram(
|
||||
static_cast<int>(device->currentReturnMode));
|
||||
size_t nPointsPerStimFrame = this->nDgramsPerStagingBufferFrame
|
||||
* nPointsPerDgram;
|
||||
|
||||
if (qualeIfaceApi == "mesh")
|
||||
{
|
||||
std::cout << __func__ << ": $$$$$$$ Creating MeshStimulusBuffer" << std::endl;
|
||||
auto meshBuffer = std::make_shared<MeshStimulusBuffer>(
|
||||
*this, deviceAttachmentSpec, histbuffMs, openClInputConstraints);
|
||||
*this, deviceAttachmentSpec, histbuffMs,
|
||||
openClInputConstraints, openClInputConstraints,
|
||||
nPointsPerStimFrame);
|
||||
|
||||
std::cout << __func__ << ": $$$$$$$ Created MeshStimulusBuffer" << std::endl;
|
||||
meshStimulusBuffer = meshBuffer;
|
||||
attachedStimulusBuffers.push_back(meshBuffer);
|
||||
return meshBuffer;
|
||||
}
|
||||
else if (qualeIfaceApi == "pcloudIntensity")
|
||||
{
|
||||
std::cout << __func__ << ": $$$$$$$ Creating PcloudIntensityStimulusBuffer" << std::endl;
|
||||
auto intensityBuffer = std::make_shared<PcloudIntensityStimulusBuffer>(
|
||||
*this, deviceAttachmentSpec, histbuffMs,
|
||||
openClInputConstraints);
|
||||
openClIntensityInputConstraints, openClIntensityInputConstraints,
|
||||
nPointsPerStimFrame);
|
||||
|
||||
std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << std::endl;
|
||||
intensityStimulusBuffer = intensityBuffer;
|
||||
attachedStimulusBuffers.push_back(intensityBuffer);
|
||||
return intensityBuffer;
|
||||
}
|
||||
else if (qualeIfaceApi == "pcloudAmbience")
|
||||
{
|
||||
std::cout << __func__ << ": $$$$$$$ Creating PcloudAmbienceStimulusBuffer" << std::endl;
|
||||
auto ambienceBuffer = std::make_shared<PcloudAmbienceStimulusBuffer>(
|
||||
*this, deviceAttachmentSpec, histbuffMs, openClInputConstraints);
|
||||
*this, deviceAttachmentSpec, histbuffMs,
|
||||
openClAmbienceInputConstraints, openClAmbienceInputConstraints,
|
||||
nDgramsPerStagingBufferFrame);
|
||||
|
||||
std::cout << __func__ << ": $$$$$$$ Created PcloudAmbienceStimulusBuffer" << std::endl;
|
||||
ambienceStimulusBuffer = ambienceBuffer;
|
||||
attachedStimulusBuffers.push_back(ambienceBuffer);
|
||||
return ambienceBuffer;
|
||||
|
||||
@@ -79,6 +79,7 @@ protected:
|
||||
public:
|
||||
void produceFrameReq(smo::Callback<produceFrameReqCbFn> callback);
|
||||
|
||||
size_t nDgramsPerStagingBufferFrame;
|
||||
std::shared_ptr<livoxProto1::Device> device;
|
||||
PcloudFormatDesc formatDesc;
|
||||
OpenClCollatingAndMeshingEngine openClCollatingAndMeshingEngine;
|
||||
|
||||
Reference in New Issue
Block a user