2 #include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
3 #include "b3BufferInfoCL.h"
4 #include "b3LauncherCL.h"
6 #define FILL_CL_PROGRAM_PATH "src/Bullet3OpenCL/ParallelPrimitives/kernels/FillKernels.cl"
8 #include "kernels/FillKernelsCL.h"
10 b3FillCL::b3FillCL(cl_context ctx, cl_device_id device, cl_command_queue queue)
11 : m_commandQueue(queue)
13 const char* kernelSource = fillKernelsCL;
15 const char* additionalMacros = "";
17 cl_program fillProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, kernelSource, &pErrNum, additionalMacros, FILL_CL_PROGRAM_PATH);
20 m_fillIntKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "FillIntKernel", &pErrNum, fillProg, additionalMacros);
21 b3Assert(m_fillIntKernel);
23 m_fillUnsignedIntKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "FillUnsignedIntKernel", &pErrNum, fillProg, additionalMacros);
24 b3Assert(m_fillIntKernel);
26 m_fillFloatKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "FillFloatKernel", &pErrNum, fillProg, additionalMacros);
27 b3Assert(m_fillFloatKernel);
29 m_fillKernelInt2 = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "FillInt2Kernel", &pErrNum, fillProg, additionalMacros);
30 b3Assert(m_fillKernelInt2);
35 clReleaseKernel(m_fillKernelInt2);
36 clReleaseKernel(m_fillIntKernel);
37 clReleaseKernel(m_fillUnsignedIntKernel);
38 clReleaseKernel(m_fillFloatKernel);
41 void b3FillCL::execute(b3OpenCLArray<float>& src, const float value, int n, int offset)
46 b3LauncherCL launcher(m_commandQueue, m_fillFloatKernel, "m_fillFloatKernel");
47 launcher.setBuffer(src.getBufferCL());
49 launcher.setConst(value);
50 launcher.setConst(offset);
56 void b3FillCL::execute(b3OpenCLArray<int>& src, const int value, int n, int offset)
61 b3LauncherCL launcher(m_commandQueue, m_fillIntKernel, "m_fillIntKernel");
62 launcher.setBuffer(src.getBufferCL());
64 launcher.setConst(value);
65 launcher.setConst(offset);
70 void b3FillCL::execute(b3OpenCLArray<unsigned int>& src, const unsigned int value, int n, int offset)
75 b3BufferInfoCL bInfo[] = {b3BufferInfoCL(src.getBufferCL())};
77 b3LauncherCL launcher(m_commandQueue, m_fillUnsignedIntKernel, "m_fillUnsignedIntKernel");
78 launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
80 launcher.setConst(value);
81 launcher.setConst(offset);
87 void b3FillCL::executeHost(b3AlignedObjectArray<b3Int2>& src, const b3Int2& value, int n, int offset)
89 for (int i = 0; i < n; i++)
91 src[i + offset] = value;
95 void b3FillCL::executeHost(b3AlignedObjectArray<int>& src, const int value, int n, int offset)
97 for (int i = 0; i < n; i++)
99 src[i + offset] = value;
103 void b3FillCL::execute(b3OpenCLArray<b3Int2>& src, const b3Int2& value, int n, int offset)
108 b3BufferInfoCL bInfo[] = {b3BufferInfoCL(src.getBufferCL())};
110 b3LauncherCL launcher(m_commandQueue, m_fillKernelInt2, "m_fillKernelInt2");
111 launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
112 launcher.setConst(n);
113 launcher.setConst(value);
114 launcher.setConst(offset);
117 launcher.launch1D(n);