1 #ifndef B3_GPU_GRID_BROADPHASE_H
2 #define B3_GPU_GRID_BROADPHASE_H
4 #include "b3GpuBroadphaseInterface.h"
5 #include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
7 struct b3ParamsGridBroadphaseCL
9 float m_invCellSize[4];
12 int getMaxBodiesPerCell() const
17 void setMaxBodiesPerCell(int maxOverlap)
19 m_gridSize[3] = maxOverlap;
23 class b3GpuGridBroadphase : public b3GpuBroadphaseInterface
27 cl_device_id m_device;
28 cl_command_queue m_queue;
30 b3OpenCLArray<b3SapAabb> m_allAabbsGPU1;
31 b3AlignedObjectArray<b3SapAabb> m_allAabbsCPU1;
33 b3OpenCLArray<int> m_smallAabbsMappingGPU;
34 b3AlignedObjectArray<int> m_smallAabbsMappingCPU;
36 b3OpenCLArray<int> m_largeAabbsMappingGPU;
37 b3AlignedObjectArray<int> m_largeAabbsMappingCPU;
39 b3AlignedObjectArray<b3Int4> m_hostPairs;
40 b3OpenCLArray<b3Int4> m_gpuPairs;
42 b3OpenCLArray<b3SortData> m_hashGpu;
43 b3OpenCLArray<int> m_cellStartGpu;
45 b3ParamsGridBroadphaseCL m_paramsCPU;
46 b3OpenCLArray<b3ParamsGridBroadphaseCL> m_paramsGPU;
48 class b3RadixSort32CL* m_sorter;
51 b3GpuGridBroadphase(cl_context ctx, cl_device_id device, cl_command_queue q);
52 virtual ~b3GpuGridBroadphase();
54 static b3GpuBroadphaseInterface* CreateFunc(cl_context ctx, cl_device_id device, cl_command_queue q)
56 return new b3GpuGridBroadphase(ctx, device, q);
59 virtual void createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask);
60 virtual void createLargeProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask);
62 virtual void calculateOverlappingPairs(int maxPairs);
63 virtual void calculateOverlappingPairsHost(int maxPairs);
65 //call writeAabbsToGpu after done making all changes (createProxy etc)
66 virtual void writeAabbsToGpu();
68 virtual cl_mem getAabbBufferWS();
69 virtual int getNumOverlap();
70 virtual cl_mem getOverlappingPairBuffer();
72 virtual b3OpenCLArray<b3SapAabb>& getAllAabbsGPU();
73 virtual b3AlignedObjectArray<b3SapAabb>& getAllAabbsCPU();
75 virtual b3OpenCLArray<b3Int4>& getOverlappingPairsGPU();
76 virtual b3OpenCLArray<int>& getSmallAabbIndicesGPU();
77 virtual b3OpenCLArray<int>& getLargeAabbIndicesGPU();
80 #endif //B3_GPU_GRID_BROADPHASE_H