Bullet Collision Detection & Physics Library
btSoftBodySolverLinkData_OpenCLSIMDAware.h
Go to the documentation of this file.
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
4 
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10 
11 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
13 3. This notice may not be removed or altered from any source distribution.
14 */
15 
18 
19 
20 #ifndef BT_SOFT_BODY_SOLVER_LINK_DATA_OPENCL_SIMDAWARE_H
21 #define BT_SOFT_BODY_SOLVER_LINK_DATA_OPENCL_SIMDAWARE_H
22 
23 
25 {
26 public:
27  bool m_onGPU;
28 
30 
31  const int m_wavefrontSize;
32  const int m_linksPerWorkItem;
37 
39 
41  {
44  };
45 
49 
50  // All arrays here will contain batches of m_maxLinksPerWavefront links
51  // ordered by wavefront.
52  // with either global vertex pairs or local vertex pairs
53  btAlignedObjectArray< int > m_wavefrontVerticesGlobalAddresses; // List of global vertices per wavefront
62 
63  struct BatchPair
64  {
65  int start;
66  int length;
67 
69  start(0),
70  length(0)
71  {
72  }
73 
74  BatchPair( int s, int l ) :
75  start( s ),
76  length( l )
77  {
78  }
79  };
80 
86 
91 
93 
95 
97  virtual void createLinks( int numLinks );
98 
100  virtual void setLinkAt(
101  const LinkDescription &link,
102  int linkIndex );
103 
104  virtual bool onAccelerator();
105 
106  virtual bool moveToAccelerator();
107 
108  virtual bool moveFromAccelerator();
109 
116  void generateBatches();
117 
119  {
121  }
122 
124  {
125  return m_wavefrontSize;
126  }
127 
129  {
130  return m_linksPerWorkItem;
131  }
132 
134  {
135  return m_maxLinksPerWavefront;
136  }
137 
139  {
140  return m_maxBatchesWithinWave;
141  }
142 
144  {
145  return m_numWavefronts;
146  }
147 
149  {
150  return m_numBatchesAndVerticesWithinWaves[wavefront];
151  }
152 
153  int getVertexGlobalAddresses( int vertexIndex )
154  {
155  return m_wavefrontVerticesGlobalAddresses[vertexIndex];
156  }
157 
162  {
163  return m_linkVerticesLocalAddresses[linkIndex];
164  }
165 };
166 
167 
168 
169 #endif // #ifndef BT_SOFT_BODY_SOLVER_LINK_DATA_OPENCL_SIMDAWARE_H
btAlignedObjectArray< int > m_linkAddresses
Link addressing information for each cloth.
virtual bool moveToAccelerator()
Move data from host memory to the accelerator.
virtual bool onAccelerator()
Return true if data is on the accelerator.
struct _cl_context * cl_context
Definition: cl.h:41
btAlignedObjectArray< NumBatchesVerticesPair > m_numBatchesAndVerticesWithinWaves
virtual bool moveFromAccelerator()
Move data from host memory from the accelerator.
LinkNodePair getVertexPairLocalAddresses(int linkIndex)
Get post-batching local addresses of the vertex pair for a link assuming all vertices used by a wavef...
virtual void createLinks(int numLinks)
Allocate enough space in all link-related arrays to fit numLinks links.
Class representing a link as a set of three indices into the vertex array.
void generateBatches()
Generate (and later update) the batching for the entire link set.
Class describing a link for input into the system.
NumBatchesVerticesPair getNumBatchesAndVerticesWithinWavefront(int wavefront)
struct _cl_command_queue * cl_command_queue
Definition: cl.h:42
virtual void setLinkAt(const LinkDescription &link, int linkIndex)
Insert the link described into the correct data structures assuming space has already been allocated ...
btOpenCLBuffer< NumBatchesVerticesPair > m_clNumBatchesAndVerticesWithinWaves
btSoftBodyLinkDataOpenCLSIMDAware(cl_command_queue queue, cl_context ctx)
btAlignedObjectArray< LinkNodePair > m_linkVerticesLocalAddresses
btAlignedObjectArray< BatchPair > m_wavefrontBatchStartLengths
Start and length values for computation batches over link data.