StagingBuffer: add OpenCL buff handles to StimFrames
This commit is contained in:
@@ -10,6 +10,9 @@
|
||||
#include <user/stimulusFrame.h>
|
||||
#include <user/frameAssemblyDesc.h>
|
||||
#include <user/sequenceLock.h>
|
||||
#include <user/senseApiDesc.h>
|
||||
#define CL_TARGET_OPENCL_VERSION 120
|
||||
#include <CL/cl.h>
|
||||
|
||||
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> &frameAssemblyDesc_)
|
||||
const std::shared_ptr<FrameAssemblyDesc> &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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,8 +7,11 @@
|
||||
#include <user/spMcRingBuffer.h>
|
||||
#include <user/stagingBuffer.h>
|
||||
#include <user/frameAssemblyDesc.h>
|
||||
#include <user/senseApiDesc.h>
|
||||
#include "stimulusFrame.h"
|
||||
#include "deviceAttachmentSpec.h"
|
||||
#define CL_TARGET_OPENCL_VERSION 120
|
||||
#include <CL/cl.h>
|
||||
|
||||
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<size_t>(histbuffMs / CONFIG_STIMBUFF_FRAME_PERIOD_MS)),
|
||||
ringBuffer(static_cast<std::shared_ptr<FrameAssemblyDesc>>(stagingBuffer))
|
||||
ringBuffer(
|
||||
static_cast<std::shared_ptr<FrameAssemblyDesc>>(stagingBuffer),
|
||||
callbacks, flags)
|
||||
{}
|
||||
|
||||
virtual ~StimulusBuffer() = default;
|
||||
|
||||
@@ -2,8 +2,13 @@
|
||||
#define _ATTACHMENT_SUPPORT_STIMULUS_FRAME_H
|
||||
|
||||
#include <cstdint>
|
||||
#include <memory>
|
||||
#include <user/frameAssemblyDesc.h>
|
||||
#include <user/sequenceLock.h>
|
||||
#include <user/compute.h>
|
||||
#include <user/senseApiDesc.h>
|
||||
#define CL_TARGET_OPENCL_VERSION 120
|
||||
#include <CL/cl.h>
|
||||
|
||||
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<smo::compute::ClBuffer> clBuffer;
|
||||
};
|
||||
|
||||
} // namespace stim_buff
|
||||
|
||||
Reference in New Issue
Block a user