OClCollMeshEngn: produce ambience into stimBuff frames directly
This commit is contained in:
@@ -9,7 +9,6 @@
|
||||
#include <spinscale/asynchronousLoop.h>
|
||||
#include <user/stimulusFrame.h>
|
||||
#include <user/frameAssemblyDesc.h>
|
||||
#include <user/pcloudAmbienceStencil.h>
|
||||
#include <livoxProto1/device.h>
|
||||
#include "livoxGen1.h"
|
||||
#include "pcloudStimulusProducer.h"
|
||||
@@ -54,20 +53,14 @@ static StagingBuffer::IOEngineConstraints openClIntensityInputConstraints(
|
||||
// framePadToNBytes (pointer size)
|
||||
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)));
|
||||
|
||||
/* IOEngineConstraints for PcloudAmbienceStimulusBuffer's StagingBuffer, which
|
||||
* backs SpMcRingBuffer (one StimulusFrame per ring slot). Not the OpenCL
|
||||
* collating engine's assembly/collation buffers — those use assemblyBuffer /
|
||||
* collationBuffer above. slotPadToNBytes here is the byte size of each ringbuff
|
||||
* slot: nDgramsPerStagingBufferFrame floats (set in ctor).
|
||||
*/
|
||||
static StagingBuffer::IOEngineConstraints openClAmbienceInputConstraints(
|
||||
// slotStartAlignmentByteVal (sizeof(void*))
|
||||
sizeof(PcloudAmbienceStencil::PcloudAmbienceStimulusValue),
|
||||
// slotPadToNBytes (sizeof(PcloudAmbienceStimulusValue))
|
||||
sizeof(PcloudAmbienceStencil::PcloudAmbienceStimulusValue),
|
||||
// frameStartAlignmentByteVal (page alignment)
|
||||
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)),
|
||||
// framePadToNBytes (page alignment)
|
||||
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)));
|
||||
|
||||
static StagingBuffer::IOEngineConstraints openClAverageIntensityConstraints(
|
||||
// slotStartAlignmentByteVal (sizeof(float))
|
||||
sizeof(float),
|
||||
// slotPadToNBytes (sizeof(float))
|
||||
sizeof(float),
|
||||
// frameStartAlignmentByteVal (page alignment)
|
||||
static_cast<size_t>(sysconf(_SC_PAGE_SIZE)),
|
||||
@@ -96,12 +89,6 @@ collationBuffer(
|
||||
StagingBuffer::IOEngineConstraints::openClInputConstraints,
|
||||
nDgramsPerStagingBufferFrame),
|
||||
collationBufferMlockPinner(collationBuffer.makeMlockPinner()),
|
||||
averageIntensityBuffer(
|
||||
openClAverageIntensityConstraints,
|
||||
openClAverageIntensityConstraints,
|
||||
nDgramsPerStagingBufferFrame),
|
||||
averageIntensityBufferMlockPinner(
|
||||
averageIntensityBuffer.makeMlockPinner()),
|
||||
pcloudFrameDumper(deviceAttachmentSpec),
|
||||
tempStimulusFrameMem(0),
|
||||
tempStimulusFrame(
|
||||
@@ -111,6 +98,10 @@ tempStimulusFrame(
|
||||
sizeof(tempStimulusFrameMem)},
|
||||
*smoHooksPtr, 0, SIZE_MAX)
|
||||
{
|
||||
// See comment in openClAmbienceInputConstraints above.
|
||||
openClAmbienceInputConstraints.slotPadToNBytes =
|
||||
nDgramsPerStagingBufferFrame * sizeof(float);
|
||||
|
||||
if (smoHooksPtr->OptionParser_getOptions().verbose)
|
||||
{
|
||||
std::cout << __func__ << ": assembly buffer : "
|
||||
@@ -291,12 +282,10 @@ PcloudStimulusProducer::getOrCreateAttachedStimulusBuffer(
|
||||
// Parse qualeIfaceApi to determine buffer type
|
||||
const std::string& qualeIfaceApi = deviceAttachmentSpec->qualeIfaceApi;
|
||||
|
||||
// Calculate nPointsPerDgram based on return mode
|
||||
size_t nPointsPerDgram = livoxProto1::Device::getNPointsPerDgram(
|
||||
static_cast<int>(device->currentReturnMode));
|
||||
|
||||
if (qualeIfaceApi == "mesh")
|
||||
{
|
||||
size_t nPointsPerDgram = livoxProto1::Device::getNPointsPerDgram(
|
||||
static_cast<int>(device->currentReturnMode));
|
||||
/* Calculate slotStrideNBytes:
|
||||
* nDgramsPerStagingBufferFrame * nPointsPerDgram * sizeof(float) * 3
|
||||
*/
|
||||
@@ -318,6 +307,8 @@ PcloudStimulusProducer::getOrCreateAttachedStimulusBuffer(
|
||||
}
|
||||
else if (qualeIfaceApi == "pcloudIntensity")
|
||||
{
|
||||
size_t nPointsPerDgram = livoxProto1::Device::getNPointsPerDgram(
|
||||
static_cast<int>(device->currentReturnMode));
|
||||
/* Calculate slotStrideNBytes:
|
||||
* nDgramsPerStagingBufferFrame * nPointsPerDgram * sizeof(float) * 1
|
||||
*/
|
||||
@@ -340,27 +331,17 @@ PcloudStimulusProducer::getOrCreateAttachedStimulusBuffer(
|
||||
}
|
||||
else if (qualeIfaceApi == "pcloudAmbience")
|
||||
{
|
||||
// Parse n-stencils from qualeIfaceApiParams
|
||||
const std::vector<std::string> nStencilsParamNames = {
|
||||
"n-stencils"
|
||||
};
|
||||
int nStencilsInt = device::DeviceAttachmentSpec
|
||||
::parseOptionalParamAsIntWithSynonyms(
|
||||
deviceAttachmentSpec->qualeIfaceApiParams,
|
||||
nStencilsParamNames, 1);
|
||||
size_t nStencils = static_cast<size_t>(nStencilsInt);
|
||||
|
||||
auto ambienceBuffer = std::make_shared<PcloudAmbienceStimulusBuffer>(
|
||||
auto ambienceStimBuff = std::make_shared<PcloudAmbienceStimulusBuffer>(
|
||||
*this, deviceAttachmentSpec, histbuffMs,
|
||||
openClAmbienceInputConstraints, openClAmbienceInputConstraints,
|
||||
*smoHooksPtr, CL_MEM_READ_WRITE,
|
||||
nStencils, this->nDgramsPerStagingBufferFrame);
|
||||
this->nDgramsPerStagingBufferFrame);
|
||||
|
||||
this->stop();
|
||||
addAttachedStimulusBufferIfNotExists(ambienceBuffer);
|
||||
ambienceStimulusBuffer.store(ambienceBuffer, std::memory_order_release);
|
||||
addAttachedStimulusBufferIfNotExists(ambienceStimBuff);
|
||||
ambienceStimulusBuffer.store(ambienceStimBuff, std::memory_order_release);
|
||||
this->start();
|
||||
return ambienceBuffer;
|
||||
return ambienceStimBuff;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user