|
|
|
@@ -18,10 +18,24 @@ extern const SmoCallbacks* smoHooksPtr;
|
|
|
|
|
|
|
|
|
|
// OpenCL kernels are used to collate and produce our StimFrames.
|
|
|
|
|
static StagingBuffer::IOEngineConstraints openClInputConstraints(
|
|
|
|
|
/** FIXME:
|
|
|
|
|
* This should eventually be aligned to 4B and padded to 12B.
|
|
|
|
|
*/
|
|
|
|
|
// slotStartAlignmentByteVal (page alignment)
|
|
|
|
|
sizeof(float) * 3,
|
|
|
|
|
sizeof(float) * 4,
|
|
|
|
|
// slotPadToNBytes (pointer size)
|
|
|
|
|
sizeof(void *),
|
|
|
|
|
sizeof(float) * 4,
|
|
|
|
|
// frameStartAlignmentByteVal (page alignment)
|
|
|
|
|
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)),
|
|
|
|
|
// framePadToNBytes (pointer size)
|
|
|
|
|
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)));
|
|
|
|
|
|
|
|
|
|
// OpenCL kernels are used to collate and produce our StimFrames.
|
|
|
|
|
static StagingBuffer::IOEngineConstraints openClMeshInputConstraints(
|
|
|
|
|
// slotStartAlignmentByteVal (page alignment)
|
|
|
|
|
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)),
|
|
|
|
|
// slotPadToNBytes (pointer size)
|
|
|
|
|
sizeof(float) * 3,
|
|
|
|
|
// frameStartAlignmentByteVal (page alignment)
|
|
|
|
|
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)),
|
|
|
|
|
// framePadToNBytes (pointer size)
|
|
|
|
@@ -29,7 +43,7 @@ static StagingBuffer::IOEngineConstraints openClInputConstraints(
|
|
|
|
|
|
|
|
|
|
static StagingBuffer::IOEngineConstraints openClIntensityInputConstraints(
|
|
|
|
|
// slotStartAlignmentByteVal (page alignment)
|
|
|
|
|
sizeof(float),
|
|
|
|
|
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)),
|
|
|
|
|
// slotPadToNBytes (intensity value size)
|
|
|
|
|
sizeof(float),
|
|
|
|
|
// frameStartAlignmentByteVal (page alignment)
|
|
|
|
@@ -39,9 +53,9 @@ static StagingBuffer::IOEngineConstraints openClIntensityInputConstraints(
|
|
|
|
|
|
|
|
|
|
static StagingBuffer::IOEngineConstraints openClAmbienceInputConstraints(
|
|
|
|
|
// slotStartAlignmentByteVal (page alignment)
|
|
|
|
|
sizeof(float),
|
|
|
|
|
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)),
|
|
|
|
|
// slotPadToNBytes (pointer size)
|
|
|
|
|
sizeof(void *),
|
|
|
|
|
sizeof(float),
|
|
|
|
|
// frameStartAlignmentByteVal (page alignment)
|
|
|
|
|
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)),
|
|
|
|
|
// framePadToNBytes (pointer size)
|
|
|
|
@@ -68,10 +82,11 @@ collationBuffer(
|
|
|
|
|
StagingBuffer::IOEngineConstraints::openClInputConstraints,
|
|
|
|
|
StagingBuffer::IOEngineConstraints::openClInputConstraints,
|
|
|
|
|
nDgramsPerStagingBufferFrame),
|
|
|
|
|
tempStimulusFrame(
|
|
|
|
|
StagingBuffer::IOEngineConstraints::openClInputConstraints,
|
|
|
|
|
StagingBuffer::IOEngineConstraints::openClInputConstraints,
|
|
|
|
|
nDgramsPerStagingBufferFrame)
|
|
|
|
|
tempStimulusFrameMem(0),
|
|
|
|
|
tempStimulusFrame(FrameAssemblyDesc::SlotDesc{
|
|
|
|
|
0,
|
|
|
|
|
reinterpret_cast<uint8_t*>(&tempStimulusFrameMem),
|
|
|
|
|
sizeof(tempStimulusFrameMem)})
|
|
|
|
|
{
|
|
|
|
|
if (smoHooksPtr->OptionParser_getOptions().verbose)
|
|
|
|
|
{
|
|
|
|
@@ -204,19 +219,24 @@ PcloudStimulusProducer::getOrCreateAttachedStimulusBuffer(
|
|
|
|
|
// Parse qualeIfaceApi to determine buffer type
|
|
|
|
|
const std::string& qualeIfaceApi = deviceAttachmentSpec->qualeIfaceApi;
|
|
|
|
|
|
|
|
|
|
// Calculate nPointsPerStimFrame based on return mode
|
|
|
|
|
// Calculate nPointsPerDgram based on return mode
|
|
|
|
|
size_t nPointsPerDgram = livoxProto1::Device::getNPointsPerDgram(
|
|
|
|
|
static_cast<int>(device->currentReturnMode));
|
|
|
|
|
size_t nPointsPerStimFrame = this->nDgramsPerStagingBufferFrame
|
|
|
|
|
* nPointsPerDgram;
|
|
|
|
|
|
|
|
|
|
if (qualeIfaceApi == "mesh")
|
|
|
|
|
{
|
|
|
|
|
/* Calculate slotStrideNBytes:
|
|
|
|
|
* nDgramsPerStagingBufferFrame * nPointsPerDgram * sizeof(float) * 3
|
|
|
|
|
*/
|
|
|
|
|
size_t slotStrideNBytes = this->nDgramsPerStagingBufferFrame
|
|
|
|
|
* nPointsPerDgram * sizeof(float) * 3;
|
|
|
|
|
// Reuse openClMeshInputConstraints, only modify slotPadToNBytes
|
|
|
|
|
openClMeshInputConstraints.slotPadToNBytes = slotStrideNBytes;
|
|
|
|
|
|
|
|
|
|
std::cout << __func__ << ": $$$$$$$ Creating MeshStimulusBuffer" << std::endl;
|
|
|
|
|
auto meshBuffer = std::make_shared<MeshStimulusBuffer>(
|
|
|
|
|
*this, deviceAttachmentSpec, histbuffMs,
|
|
|
|
|
openClInputConstraints, openClInputConstraints,
|
|
|
|
|
nPointsPerStimFrame);
|
|
|
|
|
openClMeshInputConstraints, openClMeshInputConstraints);
|
|
|
|
|
|
|
|
|
|
std::cout << __func__ << ": $$$$$$$ Created MeshStimulusBuffer" << std::endl;
|
|
|
|
|
meshStimulusBuffer = meshBuffer;
|
|
|
|
@@ -225,11 +245,18 @@ std::cout << __func__ << ": $$$$$$$ Created MeshStimulusBuffer" << std::endl;
|
|
|
|
|
}
|
|
|
|
|
else if (qualeIfaceApi == "pcloudIntensity")
|
|
|
|
|
{
|
|
|
|
|
/* Calculate slotStrideNBytes:
|
|
|
|
|
* nDgramsPerStagingBufferFrame * nPointsPerDgram * sizeof(float) * 1
|
|
|
|
|
*/
|
|
|
|
|
size_t slotStrideNBytes = this->nDgramsPerStagingBufferFrame
|
|
|
|
|
* nPointsPerDgram * sizeof(float) * 1;
|
|
|
|
|
// Reuse openClIntensityInputConstraints, only modify slotPadToNBytes
|
|
|
|
|
openClIntensityInputConstraints.slotPadToNBytes = slotStrideNBytes;
|
|
|
|
|
|
|
|
|
|
std::cout << __func__ << ": $$$$$$$ Creating PcloudIntensityStimulusBuffer" << std::endl;
|
|
|
|
|
auto intensityBuffer = std::make_shared<PcloudIntensityStimulusBuffer>(
|
|
|
|
|
*this, deviceAttachmentSpec, histbuffMs,
|
|
|
|
|
openClIntensityInputConstraints, openClIntensityInputConstraints,
|
|
|
|
|
nPointsPerStimFrame);
|
|
|
|
|
openClIntensityInputConstraints, openClIntensityInputConstraints);
|
|
|
|
|
|
|
|
|
|
std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << std::endl;
|
|
|
|
|
intensityStimulusBuffer = intensityBuffer;
|
|
|
|
@@ -238,11 +265,17 @@ std::cout << __func__ << ": $$$$$$$ Created PcloudIntensityStimulusBuffer" << st
|
|
|
|
|
}
|
|
|
|
|
else if (qualeIfaceApi == "pcloudAmbience")
|
|
|
|
|
{
|
|
|
|
|
std::cout << __func__ << ": $$$$$$$ Creating PcloudAmbienceStimulusBuffer" << std::endl;
|
|
|
|
|
/* Calculate slotStrideNBytes:
|
|
|
|
|
* nDgramsPerStagingBufferFrame * sizeof(float)
|
|
|
|
|
*/
|
|
|
|
|
size_t slotStrideNBytes = this->nDgramsPerStagingBufferFrame
|
|
|
|
|
* sizeof(float);
|
|
|
|
|
// Reuse openClAmbienceInputConstraints, only modify slotPadToNBytes
|
|
|
|
|
openClAmbienceInputConstraints.slotPadToNBytes = slotStrideNBytes;
|
|
|
|
|
|
|
|
|
|
auto ambienceBuffer = std::make_shared<PcloudAmbienceStimulusBuffer>(
|
|
|
|
|
*this, deviceAttachmentSpec, histbuffMs,
|
|
|
|
|
openClAmbienceInputConstraints, openClAmbienceInputConstraints,
|
|
|
|
|
nDgramsPerStagingBufferFrame);
|
|
|
|
|
openClAmbienceInputConstraints, openClAmbienceInputConstraints);
|
|
|
|
|
|
|
|
|
|
std::cout << __func__ << ": $$$$$$$ Created PcloudAmbienceStimulusBuffer" << std::endl;
|
|
|
|
|
ambienceStimulusBuffer = ambienceBuffer;
|
|
|
|
|