29 #ifndef NVBLASTTKTASKIMPL_H 30 #define NVBLASTTKTASKIMPL_H 40 #include <condition_variable> 79 SharedBlock() : m_numElementsPerBlock(0), m_numBlocks(0), m_buffer(nullptr) {}
84 void allocate(uint32_t elementsPerBlock, uint32_t numBlocks)
88 m_buffer =
reinterpret_cast<T*
>(
NVBLAST_ALLOC_NAMED(elementsPerBlock*numBlocks*
sizeof(T),
"SharedBlock"));
89 m_numElementsPerBlock = elementsPerBlock;
90 m_numBlocks = numBlocks;
99 return &m_buffer[
id*m_numElementsPerBlock];
107 return m_numElementsPerBlock;
116 m_numElementsPerBlock = 0;
122 uint32_t m_numElementsPerBlock;
123 uint32_t m_numBlocks;
146 size_t start = m_used.fetch_add(n);
147 return &m_buffer[start];
157 m_capacity = capacity;
176 m_capacity = m_used = 0;
181 std::atomic<size_t> m_used;
200 if (m_used + n > m_capacity)
202 allocateNewBlock(n > m_capacity ? n : m_capacity);
205 size_t index = m_used;
207 return &m_currentBlock[index];
216 for (
void* block : m_memoryBlocks)
220 m_memoryBlocks.clear();
229 m_currentBlock = block;
230 m_capacity = capacity;
238 void allocateNewBlock(
size_t capacity)
241 m_capacity = capacity;
242 m_currentBlock =
static_cast<T*
>(
NVBLAST_ALLOC_NAMED(capacity*
sizeof(T),
"Blast LocalBuffer"));
243 m_memoryBlocks.pushBack(m_currentBlock);
267 return m_newActorBuffers.reserve(n);
275 return m_newTkActorBuffers.reserve(n);
281 void allocate(TkFamilyImpl&);
289 m_newActorBuffers.reset();
290 m_newTkActorBuffers.reset();
318 return m_refCount > 0;
326 m_newActorBuffers.release();
327 m_newTkActorBuffers.release();
349 TkWorker() : m_id(~(uint32_t)0), m_group(nullptr), m_isBusy(false) {}
351 void process(uint32_t jobID);
373 #endif // NVBLASTTKTASKIMPL_H uint32_t m_eventsMemory
expected memory size for event data
Definition: NvBlastTkTaskImpl.h:331
SharedBlock()
Definition: NvBlastTkTaskImpl.h:79
SharedMemory()
Definition: NvBlastTkTaskImpl.h:260
LocalBuffer< NvBlastBondFractureData > m_bondBuffer
memory manager for bonds event data
Definition: NvBlastTkTaskImpl.h:360
Definition: NvBlastTkActorImpl.h:75
Definition: NvBlastTkTaskImpl.h:135
Definition: NvBlastArray.h:58
bool m_isBusy
Definition: NvBlastTkTaskImpl.h:364
bool isUsed()
Definition: NvBlastTkTaskImpl.h:316
void reset()
Definition: NvBlastTkTaskImpl.h:287
Definition: NvBlastTkActor.h:57
void * m_splitScratch
Definition: NvBlastTkTaskImpl.h:362
void initialize(T *block, size_t capacity)
Definition: NvBlastTkTaskImpl.h:227
NvBlastActor ** reserveNewActors(size_t n)
Definition: NvBlastTkTaskImpl.h:265
void addReference(size_t n)
Definition: NvBlastTkTaskImpl.h:301
TkGroupImpl * m_group
the group owning this worker
Definition: NvBlastTkTaskImpl.h:357
LocalBuffer< NvBlastChunkFractureData > m_chunkBuffer
memory manager for chunk event data
Definition: NvBlastTkTaskImpl.h:359
Definition: NvBlastTkGroup.h:58
TkActorImpl ** m_newActors
list of child actors created by splitting
Definition: NvBlastTkTaskImpl.h:63
Definition: NvBlastTkTaskImpl.h:346
void clear()
Definition: NvBlastTkTaskImpl.h:214
#define NVBLAST_ASSERT(exp)
Definition: NvBlastAssert.h:37
void addReference()
Definition: NvBlastTkTaskImpl.h:296
void release()
Definition: NvBlastTkTaskImpl.h:171
uint32_t m_newActorsCount
the number of child actors created
Definition: NvBlastTkTaskImpl.h:64
TkActorImpl * m_tkActor
the actor to process
Definition: NvBlastTkTaskImpl.h:62
void release()
Definition: NvBlastTkTaskImpl.h:324
Definition: NvBlastTkTaskImpl.h:60
#define BLAST_PROFILE_SCOPE_L(name)
Definition: NvBlastProfilerInternal.h:85
uint32_t m_id
this worker's id
Definition: NvBlastTkTaskImpl.h:356
Definition: NvBlastTkEventQueue.h:61
void allocate(size_t capacity)
Definition: NvBlastTkTaskImpl.h:153
T * allocate(size_t n)
Definition: NvBlastTkTaskImpl.h:198
#define NVBLAST_FREE(_mem)
Definition: NvBlastGlobals.h:222
Definition: NvBlastTkTaskImpl.h:75
Definition: NvBlastTkTaskImpl.h:257
uint32_t numElementsPerBlock() const
Definition: NvBlastTkTaskImpl.h:105
void release()
Definition: NvBlastTkTaskImpl.h:113
TkEventQueue m_events
event queue shared across a group's actors of the same family
Definition: NvBlastTkTaskImpl.h:330
Definition: NvBlastTypes.h:468
#define NVBLAST_ALLOC_NAMED(_size, _name)
Definition: NvBlastGlobals.h:221
Definition: NvBlastTkGroup.h:74
void reset()
Definition: NvBlastTkTaskImpl.h:163
T * reserve(size_t n)
Definition: NvBlastTkTaskImpl.h:143
T * getBlock(uint32_t id)
Definition: NvBlastTkTaskImpl.h:96
uint32_t m_eventsCount
expected number of events
Definition: NvBlastTkTaskImpl.h:332
Definition: NvBlastArray.h:37
TkActor ** reserveNewTkActors(size_t n)
Definition: NvBlastTkTaskImpl.h:273
NvBlastFractureBuffers m_tempBuffer
Definition: NvBlastTkTaskImpl.h:363
Definition: NvBlastTypes.h:387
SharedBuffer()
Definition: NvBlastTkTaskImpl.h:138
void allocate(uint32_t elementsPerBlock, uint32_t numBlocks)
Definition: NvBlastTkTaskImpl.h:84
Definition: NvBlastTkTaskImpl.h:191
bool removeReference()
Definition: NvBlastTkTaskImpl.h:307
TkWorker()
Definition: NvBlastTkTaskImpl.h:349