b3GpuGridBroadphase.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #ifndef B3_GPU_GRID_BROADPHASE_H
  2. #define B3_GPU_GRID_BROADPHASE_H
  3. #include "b3GpuBroadphaseInterface.h"
  4. #include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
  5. struct b3ParamsGridBroadphaseCL
  6. {
  7. float m_invCellSize[4];
  8. int m_gridSize[4];
  9. int getMaxBodiesPerCell() const
  10. {
  11. return m_gridSize[3];
  12. }
  13. void setMaxBodiesPerCell(int maxOverlap)
  14. {
  15. m_gridSize[3] = maxOverlap;
  16. }
  17. };
  18. class b3GpuGridBroadphase : public b3GpuBroadphaseInterface
  19. {
  20. protected:
  21. cl_context m_context;
  22. cl_device_id m_device;
  23. cl_command_queue m_queue;
  24. b3OpenCLArray<b3SapAabb> m_allAabbsGPU1;
  25. b3AlignedObjectArray<b3SapAabb> m_allAabbsCPU1;
  26. b3OpenCLArray<int> m_smallAabbsMappingGPU;
  27. b3AlignedObjectArray<int> m_smallAabbsMappingCPU;
  28. b3OpenCLArray<int> m_largeAabbsMappingGPU;
  29. b3AlignedObjectArray<int> m_largeAabbsMappingCPU;
  30. b3AlignedObjectArray<b3Int4> m_hostPairs;
  31. b3OpenCLArray<b3Int4> m_gpuPairs;
  32. b3OpenCLArray<b3SortData> m_hashGpu;
  33. b3OpenCLArray<int> m_cellStartGpu;
  34. b3ParamsGridBroadphaseCL m_paramsCPU;
  35. b3OpenCLArray<b3ParamsGridBroadphaseCL> m_paramsGPU;
  36. class b3RadixSort32CL* m_sorter;
  37. public:
  38. b3GpuGridBroadphase(cl_context ctx, cl_device_id device, cl_command_queue q);
  39. virtual ~b3GpuGridBroadphase();
  40. static b3GpuBroadphaseInterface* CreateFunc(cl_context ctx, cl_device_id device, cl_command_queue q)
  41. {
  42. return new b3GpuGridBroadphase(ctx, device, q);
  43. }
  44. virtual void createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask);
  45. virtual void createLargeProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask);
  46. virtual void calculateOverlappingPairs(int maxPairs);
  47. virtual void calculateOverlappingPairsHost(int maxPairs);
  48. //call writeAabbsToGpu after done making all changes (createProxy etc)
  49. virtual void writeAabbsToGpu();
  50. virtual cl_mem getAabbBufferWS();
  51. virtual int getNumOverlap();
  52. virtual cl_mem getOverlappingPairBuffer();
  53. virtual b3OpenCLArray<b3SapAabb>& getAllAabbsGPU();
  54. virtual b3AlignedObjectArray<b3SapAabb>& getAllAabbsCPU();
  55. virtual b3OpenCLArray<b3Int4>& getOverlappingPairsGPU();
  56. virtual b3OpenCLArray<int>& getSmallAabbIndicesGPU();
  57. virtual b3OpenCLArray<int>& getLargeAabbIndicesGPU();
  58. };
  59. #endif //B3_GPU_GRID_BROADPHASE_H