aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/module/basicios/src/BasicIosScene.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'APEX_1.4/module/basicios/src/BasicIosScene.cpp')
-rw-r--r--APEX_1.4/module/basicios/src/BasicIosScene.cpp469
1 files changed, 0 insertions, 469 deletions
diff --git a/APEX_1.4/module/basicios/src/BasicIosScene.cpp b/APEX_1.4/module/basicios/src/BasicIosScene.cpp
deleted file mode 100644
index c142a5e4..00000000
--- a/APEX_1.4/module/basicios/src/BasicIosScene.cpp
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
- * Copyright (c) 2008-2015, NVIDIA CORPORATION. All rights reserved.
- *
- * NVIDIA CORPORATION and its licensors retain all intellectual property
- * and proprietary rights in and to this software, related documentation
- * and any modifications thereto. Any use, reproduction, disclosure or
- * distribution of this software and related documentation without an express
- * license agreement from NVIDIA CORPORATION is strictly prohibited.
- */
-
-
-#include "Apex.h"
-
-#include "BasicIosScene.h"
-#include "ModuleBasicIosImpl.h"
-#include "BasicIosActorImpl.h"
-#include "BasicIosActorCPU.h"
-#include "ApexUsingNamespace.h"
-#include "SceneIntl.h"
-#include "ModulePerfScope.h"
-#include "ModuleFieldSamplerIntl.h"
-#include "RenderDebugInterface.h"
-
-#if APEX_CUDA_SUPPORT
-#include <cuda.h>
-#include "ApexCutil.h"
-#include "BasicIosActorGPU.h"
-
-#include "ApexCudaSource.h"
-#endif
-
-#include <PxScene.h>
-
-namespace nvidia
-{
-namespace basicios
-{
-
-#pragma warning(push)
-#pragma warning(disable:4355)
-
-BasicIosScene::BasicIosScene(ModuleBasicIosImpl& _module, SceneIntl& scene, RenderDebugInterface* debugRender, ResourceList& list)
- : mPhysXScene(NULL)
- , mModule(&_module)
- , mApexScene(&scene)
- , mDebugRender(debugRender)
- , mSumBenefit(0.0f)
- , mFieldSamplerManager(NULL)
- , mInjectorAllocator(this)
-{
- list.add(*this);
-
- /* Initialize reference to BasicIosDebugRenderParams */
- mDebugRenderParams = DYNAMIC_CAST(DebugRenderParams*)(mApexScene->getDebugRenderParams());
- PX_ASSERT(mDebugRenderParams);
- NvParameterized::Handle handle(*mDebugRenderParams), memberHandle(*mDebugRenderParams);
- int size;
-
- if (mDebugRenderParams->getParameterHandle("moduleName", handle) == NvParameterized::ERROR_NONE)
- {
- handle.getArraySize(size, 0);
- handle.resizeArray(size + 1);
- if (handle.getChildHandle(size, memberHandle) == NvParameterized::ERROR_NONE)
- {
- memberHandle.initParamRef(BasicIosDebugRenderParams::staticClassName(), true);
- }
- }
-
- /* Load reference to BasicIosDebugRenderParams */
- NvParameterized::Interface* refPtr = NULL;
- memberHandle.getParamRef(refPtr);
- mBasicIosDebugRenderParams = DYNAMIC_CAST(BasicIosDebugRenderParams*)(refPtr);
- PX_ASSERT(mBasicIosDebugRenderParams);
-}
-
-#pragma warning(pop)
-
-BasicIosScene::~BasicIosScene()
-{
-}
-
-void BasicIosScene::destroy()
-{
- removeAllActors();
- mApexScene->moduleReleased(*this);
- delete this;
-}
-
-void BasicIosScene::setModulePhysXScene(PxScene* s)
-{
- if (mPhysXScene == s)
- {
- return;
- }
-
- mPhysXScene = s;
- for (uint32_t i = 0; i < mActorArray.size(); ++i)
- {
- BasicIosActorImpl* actor = DYNAMIC_CAST(BasicIosActorImpl*)(mActorArray[i]);
- actor->setPhysXScene(mPhysXScene);
- }
-}
-
-void BasicIosScene::visualize()
-{
-#ifndef WITHOUT_DEBUG_VISUALIZE
- if (!mBasicIosDebugRenderParams->VISUALIZE_BASIC_IOS_ACTOR)
- {
- return;
- }
-
- RENDER_DEBUG_IFACE(mDebugRender)->pushRenderState();
- for (uint32_t i = 0 ; i < mActorArray.size() ; i++)
- {
- BasicIosActorImpl* testActor = DYNAMIC_CAST(BasicIosActorImpl*)(mActorArray[ i ]);
- testActor->visualize();
- }
- RENDER_DEBUG_IFACE(mDebugRender)->popRenderState();
-#endif
-}
-
-void BasicIosScene::submitTasks(float /*elapsedTime*/, float /*substepSize*/, uint32_t /*numSubSteps*/)
-{
- for (uint32_t i = 0; i < mActorArray.size(); ++i)
- {
- BasicIosActorImpl* actor = DYNAMIC_CAST(BasicIosActorImpl*)(mActorArray[i]);
- if (mPhysXScene)
- {
- PxVec3 gravity = mApexScene->getGravity();
-
- if (actor->getGravity() != gravity)
- {
- actor->setGravity(gravity);
- }
- }
- actor->submitTasks();
- }
-}
-
-void BasicIosScene::setTaskDependencies()
-{
- for (uint32_t i = 0; i < mActorArray.size(); ++i)
- {
- BasicIosActorImpl* actor = DYNAMIC_CAST(BasicIosActorImpl*)(mActorArray[i]);
- actor->setTaskDependencies();
- }
-
- onSimulationStart();
-}
-
-void BasicIosScene::fetchResults()
-{
- onSimulationFinish();
-
- for (uint32_t i = 0; i < mActorArray.size(); ++i)
- {
- BasicIosActorImpl* actor = DYNAMIC_CAST(BasicIosActorImpl*)(mActorArray[i]);
- actor->fetchResults();
- }
-}
-
-FieldSamplerManagerIntl* BasicIosScene::getInternalFieldSamplerManager()
-{
- if (mFieldSamplerManager == NULL)
- {
- ModuleFieldSamplerIntl* moduleFieldSampler = mModule->getInternalModuleFieldSampler();
- if (moduleFieldSampler != NULL)
- {
- mFieldSamplerManager = moduleFieldSampler->getInternalFieldSamplerManager(*mApexScene);
- PX_ASSERT(mFieldSamplerManager != NULL);
- }
- }
- return mFieldSamplerManager;
-}
-
-/******************************** CPU Version ********************************/
-
-void BasicIosSceneCPU::TimerCallback::operator()(void* stream)
-{
- PX_UNUSED(stream);
-
- float elapsed = (float)mTimer.peekElapsedSeconds();
- mMinTime = PxMin(elapsed, mMinTime);
- mMaxTime = PxMax(elapsed, mMaxTime);
-}
-
-void BasicIosSceneCPU::TimerCallback::reset()
-{
- mTimer.getElapsedSeconds();
- mMinTime = 1e20;
- mMaxTime = 0.f;
-}
-
-float BasicIosSceneCPU::TimerCallback::getElapsedTime() const
-{
- return (mMaxTime - mMinTime) * 1000.f;
-}
-
-BasicIosSceneCPU::BasicIosSceneCPU(ModuleBasicIosImpl& module, SceneIntl& scene, RenderDebugInterface* debugRender, ResourceList& list)
- : BASIC_IOS_SCENE(module, scene, debugRender, list)
-{
-}
-
-BasicIosSceneCPU::~BasicIosSceneCPU()
-{
-}
-
-
-void BasicIosSceneCPU::setCallbacks(BasicIosActorCPU* actor)
-{
- actor->setOnStartFSCallback(&mTimerCallback);
- actor->setOnFinishIOFXCallback(&mTimerCallback);
-}
-
-
-BasicIosActorImpl* BasicIosSceneCPU::createIosActor(ResourceList& list, BasicIosAssetImpl& asset, nvidia::apex::IofxAsset& iofxAsset)
-{
- BasicIosActorCPU* actor = PX_NEW(BasicIosActorCPU)(list, asset, *this, iofxAsset);
- setCallbacks(actor);
- return actor;
-}
-
-void BasicIosSceneCPU::fetchResults()
-{
- BasicIosScene::fetchResults();
-
- nvidia::apex::StatValue val;
- val.Float = mTimerCallback.getElapsedTime();
- mTimerCallback.reset();
- if (val.Float > 0.f)
- {
- mApexScene->setApexStatValue(SceneIntl::ParticleSimulationTime, val);
- }
-}
-
-/******************************** GPU Version ********************************/
-
-#if APEX_CUDA_SUPPORT
-
-BasicIosSceneGPU::EventCallback::EventCallback() : mIsCalled(false), mEvent(NULL)
-{
-}
-void BasicIosSceneGPU::EventCallback::init()
-{
- if (mEvent == NULL)
- {
- CUT_SAFE_CALL(cuEventCreate((CUevent*)(&mEvent), CU_EVENT_DEFAULT));
- }
-}
-
-BasicIosSceneGPU::EventCallback::~EventCallback()
-{
- if (mEvent != NULL)
- {
- CUT_SAFE_CALL(cuEventDestroy((CUevent)mEvent));
- }
-}
-
-void BasicIosSceneGPU::EventCallback::operator()(void* stream)
-{
- if (mEvent != NULL)
- {
- CUT_SAFE_CALL(cuEventRecord((CUevent)mEvent, (CUstream)stream));
- mIsCalled = true;
- }
-}
-
-BasicIosSceneGPU::BasicIosSceneGPU(ModuleBasicIosImpl& module, SceneIntl& scene, RenderDebugInterface* debugRender, ResourceList& list)
- : BASIC_IOS_SCENE(module, scene, debugRender, list)
- , CudaModuleScene(scene, *mModule, APEX_CUDA_TO_STR(APEX_CUDA_MODULE_PREFIX))
- , mInjectorConstMemGroup(APEX_CUDA_OBJ_NAME(simulateStorage))
-{
- {
- PxGpuDispatcher* gd = mApexScene->getTaskManager()->getGpuDispatcher();
- PX_ASSERT(gd != NULL);
- PxScopedCudaLock _lock_(*gd->getCudaContextManager());
-
- mOnSimulationStart.init();
-
-//CUDA module objects
-#include "../cuda/include/moduleList.h"
- }
-
- {
- mInjectorConstMemGroup.begin();
-
- mInjectorParamsArrayHandle.alloc(mInjectorConstMemGroup.getStorage());
-
- mInjectorConstMemGroup.end();
- }
-
-}
-
-BasicIosSceneGPU::~BasicIosSceneGPU()
-{
- for (uint32_t i = 0; i < mOnStartCallbacks.size(); i++)
- {
- PX_DELETE(mOnStartCallbacks[i]);
- }
- for (uint32_t i = 0; i < mOnFinishCallbacks.size(); i++)
- {
- PX_DELETE(mOnFinishCallbacks[i]);
- }
- CudaModuleScene::destroy(*mApexScene);
-}
-
-
-void BasicIosSceneGPU::setCallbacks(BasicIosActorGPU* actor)
-{
- mOnStartCallbacks.pushBack(PX_NEW(EventCallback)());
- mOnFinishCallbacks.pushBack(PX_NEW(EventCallback)());
- {
- PxGpuDispatcher* gd = mApexScene->getTaskManager()->getGpuDispatcher();
- PX_ASSERT(gd != NULL);
- PxScopedCudaLock _lock_(*gd->getCudaContextManager());
-
- mOnStartCallbacks.back()->init();
- mOnFinishCallbacks.back()->init();
- }
- actor->setOnStartFSCallback(mOnStartCallbacks.back());
- actor->setOnFinishIOFXCallback(mOnFinishCallbacks.back());
-}
-
-
-BasicIosActorImpl* BasicIosSceneGPU::createIosActor(ResourceList& list, BasicIosAssetImpl& asset, nvidia::apex::IofxAsset& iofxAsset)
-{
- BasicIosActorGPU* actor = PX_NEW(BasicIosActorGPU)(list, asset, *this, iofxAsset);
- setCallbacks(actor);
- return actor;
-}
-
-void BasicIosSceneGPU::fetchInjectorParams(uint32_t injectorID, InjectorParams& injParams)
-{
- APEX_CUDA_CONST_MEM_GROUP_SCOPE(mInjectorConstMemGroup);
-
- InjectorParamsArray injectorParamsArray;
- mInjectorParamsArrayHandle.fetch(_storage_, injectorParamsArray);
- PX_ASSERT(injectorID < injectorParamsArray.getSize());
- injectorParamsArray.fetchElem(_storage_, injParams, injectorID);
-}
-void BasicIosSceneGPU::updateInjectorParams(uint32_t injectorID, const InjectorParams& injParams)
-{
- APEX_CUDA_CONST_MEM_GROUP_SCOPE(mInjectorConstMemGroup);
-
- InjectorParamsArray injectorParamsArray;
- mInjectorParamsArrayHandle.fetch(_storage_, injectorParamsArray);
- PX_ASSERT(injectorID < injectorParamsArray.getSize());
- injectorParamsArray.updateElem(_storage_, injParams, injectorID);
-}
-
-bool BasicIosSceneGPU::growInjectorStorage(uint32_t newSize)
-{
- APEX_CUDA_CONST_MEM_GROUP_SCOPE(mInjectorConstMemGroup);
-
- if (mApexScene->isSimulating())
- {
- APEX_INTERNAL_ERROR("BasicIosSceneGPU::growInjectorStorage - is called while ApexScene in simulating!");
- PX_ASSERT(0);
- }
-
- InjectorParamsArray injectorParamsArray;
- mInjectorParamsArrayHandle.fetch(_storage_, injectorParamsArray);
- if (injectorParamsArray.resize(_storage_, newSize))
- {
- mInjectorParamsArrayHandle.update(_storage_, injectorParamsArray);
- return true;
- }
- return false;
-}
-
-
-void BasicIosSceneGPU::onSimulationStart()
-{
- BasicIosScene::onSimulationStart();
-
- PxGpuDispatcher* gd = mApexScene->getTaskManager()->getGpuDispatcher();
- PX_ASSERT(gd != NULL);
- PxScopedCudaLock _lock_(*gd->getCudaContextManager());
-
- //we pass default 0 stream so that this copy happens before any kernel launches
- APEX_CUDA_OBJ_NAME(simulateStorage).copyToDevice(gd->getCudaContextManager(), 0);
-
- mOnSimulationStart(NULL);
-}
-
-void BasicIosSceneGPU::fetchResults()
-{
- BasicIosScene::fetchResults();
-
- PxGpuDispatcher* gd = mApexScene->getTaskManager()->getGpuDispatcher();
- PX_ASSERT(gd != NULL);
- PxScopedCudaLock _lock_(*gd->getCudaContextManager());
-
- nvidia::apex::StatValue val;
- val.Float = 0.f;
- float minTime = 1e30;
-
- for (uint32_t i = 0 ; i < this->mOnStartCallbacks.size(); i++)
- {
- if (mOnStartCallbacks[i]->mIsCalled && mOnFinishCallbacks[i]->mIsCalled)
- {
- mOnStartCallbacks[i]->mIsCalled = false;
- mOnFinishCallbacks[i]->mIsCalled = false;
- CUT_SAFE_CALL(cuEventSynchronize((CUevent)mOnStartCallbacks[i]->getEvent()));
- CUT_SAFE_CALL(cuEventSynchronize((CUevent)mOnFinishCallbacks[i]->getEvent()));
- float tmp;
- CUT_SAFE_CALL(cuEventElapsedTime(&tmp, (CUevent)mOnSimulationStart.getEvent(), (CUevent)mOnStartCallbacks[i]->getEvent()));
- minTime = PxMin(tmp, minTime);
- CUT_SAFE_CALL(cuEventElapsedTime(&tmp, (CUevent)mOnSimulationStart.getEvent(), (CUevent)mOnFinishCallbacks[i]->getEvent()));
- val.Float = PxMax(tmp, val.Float);
- }
- }
- val.Float -= PxMin(minTime, val.Float);
-
- if (val.Float > 0.f)
- {
- mApexScene->setApexStatValue(SceneIntl::ParticleSimulationTime, val);
- }
-}
-#endif
-
-// BasicIosInjectorAllocator
-uint32_t BasicIosInjectorAllocator::allocateInjectorID()
-{
- uint32_t size = mInjectorList.size();
- if (mFreeInjectorListStart == NULL_INJECTOR_INDEX)
- {
- //try to get new injectors
- if (mStorage->growInjectorStorage(size + 1) == false)
- {
- return NULL_INJECTOR_INDEX;
- }
-
- mFreeInjectorListStart = size;
-
- mInjectorList.resize(size + 1);
- mInjectorList.back() = NULL_INJECTOR_INDEX;
- }
- uint32_t injectorID = mFreeInjectorListStart;
- mFreeInjectorListStart = mInjectorList[injectorID];
- mInjectorList[injectorID] = USED_INJECTOR_INDEX;
- return injectorID;
-}
-
-void BasicIosInjectorAllocator::releaseInjectorID(uint32_t injectorID)
-{
- //add to released injector list
- PX_ASSERT(mInjectorList[injectorID] == USED_INJECTOR_INDEX);
- mInjectorList[injectorID] = mReleasedInjectorListStart;
- mReleasedInjectorListStart = injectorID;
-}
-
-void BasicIosInjectorAllocator::flushReleased()
-{
- //add all released injectors to free injector list
- while (mReleasedInjectorListStart != NULL_INJECTOR_INDEX)
- {
- uint32_t injectorID = mInjectorList[mReleasedInjectorListStart];
-
- //add to free injector list
- mInjectorList[mReleasedInjectorListStart] = mFreeInjectorListStart;
- mFreeInjectorListStart = mReleasedInjectorListStart;
-
- mReleasedInjectorListStart = injectorID;
- }
-}
-
-}
-} // namespace nvidia