diff options
Diffstat (limited to 'thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.h')
| -rw-r--r-- | thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.h | 126 | 
1 files changed, 55 insertions, 71 deletions
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.h index b37f2f1bec..ee63531d78 100644 --- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.h +++ b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.h @@ -13,7 +13,6 @@ subject to the following restrictions:  */  //Originally written by Takahiro Harada -  #ifndef __ADL_SOLVER_H  #define __ADL_SOLVER_H @@ -29,98 +28,83 @@ subject to the following restrictions:  #include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h" - -#define B3NEXTMULTIPLEOF(num, alignment) (((num)/(alignment) + (((num)%(alignment)==0)?0:1))*(alignment)) +#define B3NEXTMULTIPLEOF(num, alignment) (((num) / (alignment) + (((num) % (alignment) == 0) ? 0 : 1)) * (alignment))  enum  { -	B3_SOLVER_N_SPLIT_X = 8,//16,//4, -	B3_SOLVER_N_SPLIT_Y = 4,//16,//4, -	B3_SOLVER_N_SPLIT_Z = 8,//, -	B3_SOLVER_N_CELLS = B3_SOLVER_N_SPLIT_X*B3_SOLVER_N_SPLIT_Y*B3_SOLVER_N_SPLIT_Z, -	B3_SOLVER_N_BATCHES = 8,//4,//8,//4, +	B3_SOLVER_N_SPLIT_X = 8,  //16,//4, +	B3_SOLVER_N_SPLIT_Y = 4,  //16,//4, +	B3_SOLVER_N_SPLIT_Z = 8,  //, +	B3_SOLVER_N_CELLS = B3_SOLVER_N_SPLIT_X * B3_SOLVER_N_SPLIT_Y * B3_SOLVER_N_SPLIT_Z, +	B3_SOLVER_N_BATCHES = 8,  //4,//8,//4,  	B3_MAX_NUM_BATCHES = 128,  };  class b3SolverBase  { -	public: -		 - -		struct ConstraintCfg -		{ -			ConstraintCfg( float dt = 0.f ): m_positionDrift( 0.005f ), m_positionConstraintCoeff( 0.2f ), m_dt(dt), m_staticIdx(-1) {} - -			float m_positionDrift; -			float m_positionConstraintCoeff; -			float m_dt; -			bool m_enableParallelSolve; -			float m_batchCellSize; -			int m_staticIdx; -		}; -		 +public: +	struct ConstraintCfg +	{ +		ConstraintCfg(float dt = 0.f) : m_positionDrift(0.005f), m_positionConstraintCoeff(0.2f), m_dt(dt), m_staticIdx(-1) {} + +		float m_positionDrift; +		float m_positionConstraintCoeff; +		float m_dt; +		bool m_enableParallelSolve; +		float m_batchCellSize; +		int m_staticIdx; +	};  };  class b3Solver : public b3SolverBase  { -	public: - -		cl_context m_context; -		cl_device_id m_device; -		cl_command_queue m_queue; -				 - -		b3OpenCLArray<unsigned int>* m_numConstraints; -		b3OpenCLArray<unsigned int>* m_offsets; -		b3OpenCLArray<int> m_batchSizes; -		 -		 -		int m_nIterations; -		cl_kernel m_batchingKernel; -		cl_kernel m_batchingKernelNew; -		cl_kernel m_solveContactKernel; -		cl_kernel m_solveFrictionKernel; -		cl_kernel m_contactToConstraintKernel; -		cl_kernel m_setSortDataKernel; -		cl_kernel m_reorderContactKernel; -		cl_kernel m_copyConstraintKernel; +public: +	cl_context m_context; +	cl_device_id m_device; +	cl_command_queue m_queue; -		class b3RadixSort32CL*	m_sort32; -		class b3BoundSearchCL*	m_search; -		class b3PrefixScanCL*	m_scan; +	b3OpenCLArray<unsigned int>* m_numConstraints; +	b3OpenCLArray<unsigned int>* m_offsets; +	b3OpenCLArray<int> m_batchSizes; -		b3OpenCLArray<b3SortData>* m_sortDataBuffer; -		b3OpenCLArray<b3Contact4>* m_contactBuffer2; +	int m_nIterations; +	cl_kernel m_batchingKernel; +	cl_kernel m_batchingKernelNew; +	cl_kernel m_solveContactKernel; +	cl_kernel m_solveFrictionKernel; +	cl_kernel m_contactToConstraintKernel; +	cl_kernel m_setSortDataKernel; +	cl_kernel m_reorderContactKernel; +	cl_kernel m_copyConstraintKernel; -		enum -		{ -			DYNAMIC_CONTACT_ALLOCATION_THRESHOLD = 2000000, -		}; +	class b3RadixSort32CL* m_sort32; +	class b3BoundSearchCL* m_search; +	class b3PrefixScanCL* m_scan; -		 +	b3OpenCLArray<b3SortData>* m_sortDataBuffer; +	b3OpenCLArray<b3Contact4>* m_contactBuffer2; -		 -		b3Solver(cl_context ctx, cl_device_id device, cl_command_queue queue, int pairCapacity); +	enum +	{ +		DYNAMIC_CONTACT_ALLOCATION_THRESHOLD = 2000000, +	}; -		virtual ~b3Solver(); -		 -		void solveContactConstraint( const b3OpenCLArray<b3RigidBodyData>* bodyBuf, const b3OpenCLArray<b3InertiaData>* inertiaBuf,  -			b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n ,int maxNumBatches); +	b3Solver(cl_context ctx, cl_device_id device, cl_command_queue queue, int pairCapacity); -		void solveContactConstraintHost(  b3OpenCLArray<b3RigidBodyData>* bodyBuf, b3OpenCLArray<b3InertiaData>* shapeBuf,  -			b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n ,int maxNumBatches, b3AlignedObjectArray<int>* batchSizes); +	virtual ~b3Solver(); +	void solveContactConstraint(const b3OpenCLArray<b3RigidBodyData>* bodyBuf, const b3OpenCLArray<b3InertiaData>* inertiaBuf, +								b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches); -		void convertToConstraints( const b3OpenCLArray<b3RigidBodyData>* bodyBuf,  -			const b3OpenCLArray<b3InertiaData>* shapeBuf,  -			b3OpenCLArray<b3Contact4>* contactsIn, b3OpenCLArray<b3GpuConstraint4>* contactCOut, void* additionalData,  -			int nContacts, const ConstraintCfg& cfg ); +	void solveContactConstraintHost(b3OpenCLArray<b3RigidBodyData>* bodyBuf, b3OpenCLArray<b3InertiaData>* shapeBuf, +									b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches, b3AlignedObjectArray<int>* batchSizes); -		void	batchContacts( b3OpenCLArray<b3Contact4>* contacts, int nContacts, b3OpenCLArray<unsigned int>* n, b3OpenCLArray<unsigned int>* offsets, int staticIdx ); +	void convertToConstraints(const b3OpenCLArray<b3RigidBodyData>* bodyBuf, +							  const b3OpenCLArray<b3InertiaData>* shapeBuf, +							  b3OpenCLArray<b3Contact4>* contactsIn, b3OpenCLArray<b3GpuConstraint4>* contactCOut, void* additionalData, +							  int nContacts, const ConstraintCfg& cfg); +	void batchContacts(b3OpenCLArray<b3Contact4>* contacts, int nContacts, b3OpenCLArray<unsigned int>* n, b3OpenCLArray<unsigned int>* offsets, int staticIdx);  }; - - - -#endif //__ADL_SOLVER_H +#endif  //__ADL_SOLVER_H  |