diff options
| author | Marijn Tamis <[email protected]> | 2018-05-03 18:22:48 +0200 |
|---|---|---|
| committer | Marijn Tamis <[email protected]> | 2018-05-03 18:22:48 +0200 |
| commit | ca32c59a58d37c1822e185a2d5f3d0d3e8943593 (patch) | |
| tree | b06b9eec03f34344ef8fc31aa147b2714d3962ee /NvCloth/samples/SampleBase/task/PxGpuTask.h | |
| parent | Forced rename of platform folders in cmake dir. Git didn't pick this up before. (diff) | |
| download | nvcloth-ca32c59a58d37c1822e185a2d5f3d0d3e8943593.tar.xz nvcloth-ca32c59a58d37c1822e185a2d5f3d0d3e8943593.zip | |
NvCloth 1.1.4 Release. (24070740)
Diffstat (limited to 'NvCloth/samples/SampleBase/task/PxGpuTask.h')
| -rw-r--r-- | NvCloth/samples/SampleBase/task/PxGpuTask.h | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/NvCloth/samples/SampleBase/task/PxGpuTask.h b/NvCloth/samples/SampleBase/task/PxGpuTask.h new file mode 100644 index 0000000..197fc3d --- /dev/null +++ b/NvCloth/samples/SampleBase/task/PxGpuTask.h @@ -0,0 +1,118 @@ +// This code contains NVIDIA Confidential Information and is disclosed to you +// under a form of NVIDIA software license agreement provided separately to you. +// +// Notice +// NVIDIA Corporation and its licensors retain all intellectual property and +// proprietary rights in and to this software and 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. +// +// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES +// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO +// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, +// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. +// +// Information and code furnished is believed to be accurate and reliable. +// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such +// information or for any infringement of patents or other rights of third parties that may +// result from its use. No license is granted by implication or otherwise under any patent +// or patent rights of NVIDIA Corporation. Details are subject to change without notice. +// This code supersedes and replaces all information previously supplied. +// NVIDIA Corporation products are not authorized for use as critical +// components in life support devices or systems without express written approval of +// NVIDIA Corporation. +// +// Copyright (c) 2008-2017 NVIDIA Corporation. All rights reserved. + + +#ifndef PXTASK_PXGPUTASK_H +#define PXTASK_PXGPUTASK_H + +#include "task/PxTaskDefine.h" +#include "task/PxTask.h" +#include "task/PxGpuDispatcher.h" + +namespace physx +{ + +PX_PUSH_PACK_DEFAULT + +/** \brief Define the 'flavor' of a PxGpuTask + * + * Each PxGpuTask should have a specific function; either copying data to the + * device, running kernels on that data, or copying data from the device. + * + * For optimal performance, the dispatcher should run all available HtoD tasks + * before running all Kernel tasks, and all Kernel tasks before running any DtoH + * tasks. This provides maximal kernel overlap and the least number of CUDA + * flushes. + */ +struct PxGpuTaskHint +{ + /// \brief Enums for the type of GPU task + enum Enum + { + HostToDevice, + Kernel, + DeviceToHost, + + NUM_GPU_TASK_HINTS + }; +}; + +/** + * \brief PxTask implementation for launching CUDA work + */ +class PxGpuTask : public PxTask +{ +public: + PxGpuTask() : mComp(NULL) {} + + /** + * \brief iterative "run" function for a PxGpuTask + * + * The GpuDispatcher acquires the CUDA context for the duration of this + * function call, and it is highly recommended that the PxGpuTask use the + * provided CUstream for all kernels. + * + * kernelIndex will be 0 for the initial call and incremented before each + * subsequent call. Once launchInstance() returns false, its PxGpuTask is + * considered completed and is released. + */ + virtual bool launchInstance(CUstream stream, int kernelIndex) = 0; + + /** + * \brief Returns a hint indicating the function of this task + */ + virtual PxGpuTaskHint::Enum getTaskHint() const = 0; + + /** + * \brief Specify a task that will have its reference count decremented + * when this task is released + */ + void setCompletionTask(PxBaseTask& task) + { + mComp = &task; + } + + void release() + { + if (mComp) + { + mComp->removeReference(); + mComp = NULL; + } + PxTask::release(); + } + +protected: + /// \brief A pointer to the completion task + PxBaseTask* mComp; +}; + +PX_POP_PACK + +} // end physx namespace + +#endif // PXTASK_PXGPUTASK_H |