aboutsummaryrefslogtreecommitdiff
path: root/tests/bullet/src/BulletMultiThreaded/SequentialThreadSupport.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-04-21 17:55:35 -0700
committerAlon Zakai <alonzakai@gmail.com>2011-04-21 17:55:35 -0700
commit887ce3dde89410d012a708c3ec454f679b2e5b1e (patch)
treedaeadbc86bf721a5d4fff109a1d87a4c69215905 /tests/bullet/src/BulletMultiThreaded/SequentialThreadSupport.cpp
parentb3f4022e35b34002f44aacde554cc8b3ea927500 (diff)
update bullet test to compile from source
Diffstat (limited to 'tests/bullet/src/BulletMultiThreaded/SequentialThreadSupport.cpp')
-rw-r--r--tests/bullet/src/BulletMultiThreaded/SequentialThreadSupport.cpp169
1 files changed, 169 insertions, 0 deletions
diff --git a/tests/bullet/src/BulletMultiThreaded/SequentialThreadSupport.cpp b/tests/bullet/src/BulletMultiThreaded/SequentialThreadSupport.cpp
new file mode 100644
index 00000000..8cc72418
--- /dev/null
+++ b/tests/bullet/src/BulletMultiThreaded/SequentialThreadSupport.cpp
@@ -0,0 +1,169 @@
+/*
+Bullet Continuous Collision Detection and Physics Library
+Copyright (c) 2003-2007 Erwin Coumans http://bulletphysics.com
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it freely,
+subject to the following restrictions:
+
+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.
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "SequentialThreadSupport.h"
+
+
+#include "SpuCollisionTaskProcess.h"
+#include "SpuNarrowPhaseCollisionTask/SpuGatheringCollisionTask.h"
+
+SequentialThreadSupport::SequentialThreadSupport(SequentialThreadConstructionInfo& threadConstructionInfo)
+{
+ startThreads(threadConstructionInfo);
+}
+
+///cleanup/shutdown Libspe2
+SequentialThreadSupport::~SequentialThreadSupport()
+{
+ stopSPU();
+}
+
+#include <stdio.h>
+
+///send messages to SPUs
+void SequentialThreadSupport::sendRequest(uint32_t uiCommand, ppu_address_t uiArgument0, uint32_t taskId)
+{
+ switch (uiCommand)
+ {
+ case CMD_GATHER_AND_PROCESS_PAIRLIST:
+ {
+ btSpuStatus& spuStatus = m_activeSpuStatus[0];
+ spuStatus.m_userPtr=(void*)uiArgument0;
+ spuStatus.m_userThreadFunc(spuStatus.m_userPtr,spuStatus.m_lsMemory);
+ }
+ break;
+ default:
+ {
+ ///not implemented
+ btAssert(0 && "Not implemented");
+ }
+
+ };
+
+
+}
+
+///check for messages from SPUs
+void SequentialThreadSupport::waitForResponse(unsigned int *puiArgument0, unsigned int *puiArgument1)
+{
+ btAssert(m_activeSpuStatus.size());
+ btSpuStatus& spuStatus = m_activeSpuStatus[0];
+ *puiArgument0 = spuStatus.m_taskId;
+ *puiArgument1 = spuStatus.m_status;
+}
+
+void SequentialThreadSupport::startThreads(SequentialThreadConstructionInfo& threadConstructionInfo)
+{
+ m_activeSpuStatus.resize(1);
+ printf("STS: Not starting any threads\n");
+ btSpuStatus& spuStatus = m_activeSpuStatus[0];
+ spuStatus.m_userPtr = 0;
+ spuStatus.m_taskId = 0;
+ spuStatus.m_commandId = 0;
+ spuStatus.m_status = 0;
+ spuStatus.m_lsMemory = threadConstructionInfo.m_lsMemoryFunc();
+ spuStatus.m_userThreadFunc = threadConstructionInfo.m_userThreadFunc;
+ printf("STS: Created local store at %p for task %s\n", spuStatus.m_lsMemory, threadConstructionInfo.m_uniqueName);
+}
+
+void SequentialThreadSupport::startSPU()
+{
+}
+
+void SequentialThreadSupport::stopSPU()
+{
+ m_activeSpuStatus.clear();
+}
+
+void SequentialThreadSupport::setNumTasks(int numTasks)
+{
+ printf("SequentialThreadSupport::setNumTasks(%d) is not implemented and has no effect\n",numTasks);
+}
+
+
+
+
+class btDummyBarrier : public btBarrier
+{
+private:
+
+public:
+ btDummyBarrier()
+ {
+ }
+
+ virtual ~btDummyBarrier()
+ {
+ }
+
+ void sync()
+ {
+ }
+
+ virtual void setMaxCount(int n) {}
+ virtual int getMaxCount() {return 1;}
+};
+
+class btDummyCriticalSection : public btCriticalSection
+{
+
+public:
+ btDummyCriticalSection()
+ {
+ }
+
+ virtual ~btDummyCriticalSection()
+ {
+ }
+
+ unsigned int getSharedParam(int i)
+ {
+ btAssert(i>=0&&i<31);
+ return mCommonBuff[i+1];
+ }
+
+ void setSharedParam(int i,unsigned int p)
+ {
+ btAssert(i>=0&&i<31);
+ mCommonBuff[i+1] = p;
+ }
+
+ void lock()
+ {
+ mCommonBuff[0] = 1;
+ }
+
+ void unlock()
+ {
+ mCommonBuff[0] = 0;
+ }
+};
+
+
+
+
+btBarrier* SequentialThreadSupport::createBarrier()
+{
+ return new btDummyBarrier();
+}
+
+btCriticalSection* SequentialThreadSupport::createCriticalSection()
+{
+ return new btDummyCriticalSection();
+
+}
+
+
+