Rename: OpenGlSplittingEngine=>OpenGlCollatingAndMeshingEngine
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
#include <stdexcept>
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
#include "openClCollatingAndMeshingEngine.h"
|
||||
#include "pcloudStimulusBuffer.h"
|
||||
|
||||
namespace smo {
|
||||
namespace stim_buff {
|
||||
|
||||
OpenClCollatingAndMeshingEngine::OpenClCollatingAndMeshingEngine(PcloudStimulusBuffer& parent_)
|
||||
: parent(parent_),
|
||||
platform(nullptr),
|
||||
device(nullptr),
|
||||
context(nullptr),
|
||||
commandQueue(nullptr),
|
||||
program(nullptr),
|
||||
kernel(nullptr),
|
||||
isSetup(false),
|
||||
assemblyBuffer(nullptr),
|
||||
xyzBuffer(nullptr),
|
||||
intensityBuffer(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
OpenClCollatingAndMeshingEngine::~OpenClCollatingAndMeshingEngine()
|
||||
{
|
||||
finalize();
|
||||
}
|
||||
|
||||
bool OpenClCollatingAndMeshingEngine::setup()
|
||||
{
|
||||
if (isSetup) {
|
||||
return true;
|
||||
}
|
||||
|
||||
cl_int err;
|
||||
cl_queue_properties queueProps[] = {CL_QUEUE_PROPERTIES, 0, 0};
|
||||
|
||||
// Get platform
|
||||
cl_uint numPlatforms;
|
||||
err = clGetPlatformIDs(1, &platform, &numPlatforms);
|
||||
if (err != CL_SUCCESS || numPlatforms == 0) {
|
||||
std::cerr << __func__ << ": failed to get OpenCL platform: "
|
||||
<< err << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get device
|
||||
err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 1, &device, nullptr);
|
||||
if (err != CL_SUCCESS) {
|
||||
std::cerr << __func__ << ": failed to get GPU device: "
|
||||
<< err << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Create context
|
||||
context = clCreateContext(nullptr, 1, &device, nullptr, nullptr, &err);
|
||||
if (err != CL_SUCCESS || !context) {
|
||||
std::cerr << __func__ << ": failed to create OpenCL context: "
|
||||
<< err << std::endl;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
// Create command queue
|
||||
commandQueue = clCreateCommandQueueWithProperties(
|
||||
context, device, queueProps, &err);
|
||||
if (err != CL_SUCCESS || !commandQueue) {
|
||||
std::cerr << __func__ << ": failed to create command queue: "
|
||||
<< err << std::endl;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
// TODO: Create program and kernel
|
||||
// TODO: Create buffers
|
||||
|
||||
isSetup = true;
|
||||
return true;
|
||||
|
||||
cleanup:
|
||||
finalize();
|
||||
return false;
|
||||
}
|
||||
|
||||
void OpenClCollatingAndMeshingEngine::finalize()
|
||||
{
|
||||
if (intensityBuffer) {
|
||||
clReleaseMemObject(intensityBuffer);
|
||||
intensityBuffer = nullptr;
|
||||
}
|
||||
if (xyzBuffer) {
|
||||
clReleaseMemObject(xyzBuffer);
|
||||
xyzBuffer = nullptr;
|
||||
}
|
||||
if (assemblyBuffer) {
|
||||
clReleaseMemObject(assemblyBuffer);
|
||||
assemblyBuffer = nullptr;
|
||||
}
|
||||
if (kernel) {
|
||||
clReleaseKernel(kernel);
|
||||
kernel = nullptr;
|
||||
}
|
||||
if (program) {
|
||||
clReleaseProgram(program);
|
||||
program = nullptr;
|
||||
}
|
||||
if (commandQueue) {
|
||||
clReleaseCommandQueue(commandQueue);
|
||||
commandQueue = nullptr;
|
||||
}
|
||||
if (context) {
|
||||
clReleaseContext(context);
|
||||
context = nullptr;
|
||||
}
|
||||
|
||||
device = nullptr;
|
||||
platform = nullptr;
|
||||
isSetup = false;
|
||||
}
|
||||
|
||||
} // namespace stim_buff
|
||||
} // namespace smo
|
||||
|
||||
Reference in New Issue
Block a user