[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-physics / third-party / bullet3 / src / Bullet3OpenCL / RigidBody / b3GpuPgsContactSolver.h
1
2 #ifndef B3_GPU_BATCHING_PGS_SOLVER_H
3 #define B3_GPU_BATCHING_PGS_SOLVER_H
4
5 #include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h"
6 #include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
7 #include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
8 #include "Bullet3Collision/NarrowPhaseCollision/b3Contact4.h"
9 #include "b3GpuConstraint4.h"
10
11 class b3GpuPgsContactSolver
12 {
13 protected:
14         int m_debugOutput;
15
16         struct b3GpuBatchingPgsSolverInternalData* m_data;
17
18         void batchContacts(b3OpenCLArray<b3Contact4>* contacts, int nContacts, b3OpenCLArray<unsigned int>* n, b3OpenCLArray<unsigned int>* offsets, int staticIdx);
19
20         inline int sortConstraintByBatch(b3Contact4* cs, int n, int simdWidth, int staticIdx, int numBodies);
21         inline int sortConstraintByBatch2(b3Contact4* cs, int n, int simdWidth, int staticIdx, int numBodies);
22         inline int sortConstraintByBatch3(b3Contact4* cs, int n, int simdWidth, int staticIdx, int numBodies, int* batchSizes);
23
24         void solveContactConstraintBatchSizes(const b3OpenCLArray<b3RigidBodyData>* bodyBuf, const b3OpenCLArray<b3InertiaData>* shapeBuf,
25                                                                                   b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches, int numIterations, const b3AlignedObjectArray<int>* batchSizes);  //const b3OpenCLArray<int>* gpuBatchSizes);
26
27         void solveContactConstraint(const b3OpenCLArray<b3RigidBodyData>* bodyBuf, const b3OpenCLArray<b3InertiaData>* shapeBuf,
28                                                                 b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches, int numIterations, const b3AlignedObjectArray<int>* batchSizes);  //const b3OpenCLArray<int>* gpuBatchSizes);
29
30 public:
31         b3GpuPgsContactSolver(cl_context ctx, cl_device_id device, cl_command_queue q, int pairCapacity);
32         virtual ~b3GpuPgsContactSolver();
33
34         void solveContacts(int numBodies, cl_mem bodyBuf, cl_mem inertiaBuf, int numContacts, cl_mem contactBuf, const struct b3Config& config, int static0Index);
35 };
36
37 #endif  //B3_GPU_BATCHING_PGS_SOLVER_H