diff options
| author | git perforce import user <a@b> | 2016-10-25 12:29:14 -0600 |
|---|---|---|
| committer | Sheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees> | 2016-10-25 18:56:37 -0500 |
| commit | 3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch) | |
| tree | fa6485c169e50d7415a651bf838f5bcd0fd3bfbd /PhysX_3.4/Source/PhysXGpu/include/PxParticleDeviceExclusive.h | |
| download | physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip | |
Initial commit:
PhysX 3.4.0 Update @ 21294896
APEX 1.4.0 Update @ 21275617
[CL 21300167]
Diffstat (limited to 'PhysX_3.4/Source/PhysXGpu/include/PxParticleDeviceExclusive.h')
| -rw-r--r-- | PhysX_3.4/Source/PhysXGpu/include/PxParticleDeviceExclusive.h | 252 |
1 files changed, 252 insertions, 0 deletions
diff --git a/PhysX_3.4/Source/PhysXGpu/include/PxParticleDeviceExclusive.h b/PhysX_3.4/Source/PhysXGpu/include/PxParticleDeviceExclusive.h new file mode 100644 index 00000000..a26c6915 --- /dev/null +++ b/PhysX_3.4/Source/PhysXGpu/include/PxParticleDeviceExclusive.h @@ -0,0 +1,252 @@ +// 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-2016 NVIDIA Corporation. All rights reserved. +// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved. +// Copyright (c) 2001-2004 NovodeX AG. All rights reserved. + + +#ifndef PX_PARTICLE_DEVICE_EXCLUSIVE_H +#define PX_PARTICLE_DEVICE_EXCLUSIVE_H + +#include "foundation/PxFlags.h" +#include "PxPhysXCommonConfig.h" + +typedef PX_DEPRECATED struct CUstream_st *CUstream; + +namespace physx +{ + +class PxBaseTask; + +/** +\brief Internal per particle flags to mark changes in device particle data. (deprecated) + +\deprecated The PhysX particle feature has been deprecated in PhysX version 3.4 + +@see PxParticleDeviceExclusive.getReadWriteCudaBuffers +*/ +struct PX_DEPRECATED PxInternalParticleFlagGpu +{ + enum Enum + { + //reserved (1<<0), + //reserved (1<<1), + //reserved (1<<2), + //reserved (1<<3), + //reserved (1<<4), + //reserved (1<<5), + eCUDA_NOTIFY_CREATE = (1<<6), + eCUDA_NOTIFY_SET_POSITION = (1<<7) + }; +}; + +/** +\brief Combined api and internal flags for device particle data. (deprecated) + +\deprecated The PhysX particle feature has been deprecated in PhysX version 3.4 + +@see PxInternalParticleFlagGpu, PxParticleDeviceExclusive.getReadWriteCudaBuffers +*/ +struct PX_DEPRECATED PxParticleFlagGpu +{ + PxParticleFlagGpu(PxU16 apiFlags, PxU16 lowFlags) + : api(apiFlags) + , low(lowFlags) + {} + + PxParticleFlagGpu() {} + + PxU16 api; // PxParticleFlag + PxU16 low; // PxInternalParticleFlagGpu +}; + +/** +\brief Device particle buffer descriptor. (deprecated) + +\deprecated The PhysX particle feature has been deprecated in PhysX version 3.4 +*/ +struct PX_DEPRECATED PxCudaReadWriteParticleBuffers +{ + PxVec4* positions; + PxVec4* velocities; + PxVec4* collisionNormals; + PxVec4* collisionVelocities; + PxF32* densities; + PxF32* restOffset; + PxParticleFlagGpu* flags; + PxU32 maxParticles; +}; + +/** +\brief Flags to control whether the particle simulation updates positions for new and externally moved particles. (deprecated) +When updating particle positions through the device (by adding particles or setting the position of particles) +collisions with the environment can't be resolved for the corresponding particles. Sometimes it's better +to avoid particle positions being changed by the simulation in these cases, to void missing collisions +against static actors. + +\deprecated The PhysX particle feature has been deprecated in PhysX version 3.4 + +@see PxParticleDeviceExclusive.setFlags +*/ +struct PX_DEPRECATED PxParticleDeviceExclusiveFlag +{ + enum Enum + { + eDISABLE_POSITION_UPDATE_ON_CREATE = (1 << 0), + eDISABLE_POSITION_UPDATE_ON_SETPOS = (1 << 1) + }; +}; + +typedef PX_DEPRECATED PxFlags<PxParticleDeviceExclusiveFlag::Enum, PxU32> PxParticleDeviceExclusiveFlags; +PX_FLAGS_OPERATORS(PxParticleDeviceExclusiveFlag::Enum, PxU32) + +/** +\brief API for gpu specific particle functionality. (deprecated) + +\deprecated The PhysX particle feature has been deprecated in PhysX version 3.4 +*/ +class PX_DEPRECATED PxParticleDeviceExclusive +{ +public: + + /** + \brief Experimental method for particle data read/write access from cuda device memory. + + By calling this method, the cuda particle system enters a "device exclusive" mode. This + means that particles can't be read nor updated through the host side PxParticleBase + interface. Additionally, it's not possible to enter the device exclusive mode after particles were + already added through the host side interface. + + Particle systems need to be part of a scene and need to have the PxParticleBaseFlag::eGPU raised in order + to enter the device exclusive mode successfully. Particle systems that are removed from a scene leave the + device exclusive mode. + + Note: particle systems in device exclusive mode are not displayed with the PhysX Visual Debugger. + @see PxParticleDeviceExclusive.isEnabled + */ + PX_PHYSX_CORE_API static void enable(class PxParticleBase& particleBase); + + /** + \brief Returns whether particle system is in device exclusive mode. + + @see PxParticleDeviceExclusive.enable + */ + PX_PHYSX_CORE_API static bool isEnabled(class PxParticleBase& particleBase); + + /** + \brief Experimental method for getting particle data read/write access through cuda device memory. + + Protocol for creating, releasing and updating particles: + + Initial particle state: + - all fields uninitialized but flags set to 0 + + Creating: + - set position + - set velocity + - set flags: PxParticleFlagGpu.api = PxParticleFlag::eVALID, PxParticleFlagGpu.low = PxInternalParticleFlagGpu::eCUDA_NOTIFY_CREATE + + Releasing: + - set flags to 0 + + Updating positions: + - set position + - set flags: PxParticleFlagGpu.low |= PxInternalParticleFlagGpu::eCUDA_NOTIFY_SET_POSITION + + Updating velocities: + - set velocity + + Updating with forces: + - not supported + + Updating restOffsets: + - not supported yet + + \param[in] particleBase PxParticleBase instance to fetch cuda buffers from. + \param[out] buffers Descriptor for cuda device particle data. + */ + PX_PHYSX_CORE_API static void getReadWriteCudaBuffers(class PxParticleBase& particleBase, PxCudaReadWriteParticleBuffers& buffers); + + /** + \brief Experimental method for optionally setting the valid particle range in device exclusive mode. + + By default PxParticleBase::getMaxParticles is used to define the range at which particle are processed in "device exclusive" mode. + Optionally this can be optimized by the application using this method. This method should be called for every following + call to PxScene::simulate(), otherwise PxParticleBase::getMaxParticles is assumed. + + \param[in] particleBase PxParticleBase instance to fetch cuda buffers from. + \param[in] validParticleRange valid particle range (index+1, with index being the highest particle index with (PxCudaReadWriteParticleBuffers::flags[index].api & PxParticleFlag::eVALID != 0) + + @see PxParticleDeviceExclusive.getReadWriteCudaBuffers + */ + PX_PHYSX_CORE_API static void setValidParticleRange(class PxParticleBase& particleBase, PxU32 validParticleRange); + + /** + \brief Set flags to control position update for added particles and particles for which position has been set. + @see PxParticleDeviceExclusiveFlags + */ + PX_PHYSX_CORE_API static void setFlags(class PxParticleBase& particleBase, PxParticleDeviceExclusiveFlags flags); + + /** + \brief Query task that launches PhysX particle kernels. + */ + PX_PHYSX_CORE_API static class physx::PxBaseTask* getLaunchTask(class PxParticleBase& particleBase); + + /** + \brief Adds a dependency to the PhysX particle kernel launch task. + + Similarly to PxGpuDispatcher.addPreLaunchDependent and PxGpuDispatcher.addPostLaunchDependent + this adds a reference to the launch task. + */ + PX_PHYSX_CORE_API static void addLaunchTaskDependent(class PxParticleBase& particleBase, class physx::PxBaseTask& dependent); + + /** + \brief Query the cuda stream that is used for the PhysX particle kernels. + \note The stream is not valid if getLaunchTask returns NULL. + \return the cuda stream. + */ + PX_PHYSX_CORE_API static CUstream getCudaStream(class PxParticleBase& particleBase); +}; + +/** +Internal class providing device exclusive mode functionality. (deprecated) + +\deprecated The PhysX particle feature has been deprecated in PhysX version 3.4 +*/ +class PX_DEPRECATED PxParticleDeviceExclusiveAccess +{ +public: + virtual void getReadWriteCudaBuffers(PxCudaReadWriteParticleBuffers& buffers) const = 0; + virtual void setValidParticleRange(PxU32 validParticleRange) = 0; + virtual void setFlags(PxU32 flags) = 0; + virtual class physx::PxBaseTask* getLaunchTask() const = 0; + virtual void addLaunchTaskDependent(class physx::PxBaseTask& dependent) = 0; + virtual size_t getCudaStream() const = 0; +}; + +} + +#endif // PX_SUPPORT_GPU_PHYSX |