Skip to content

Commit 5ca9f47

Browse files
committed
Update PhysX to 5.6.1 at b07ddd12
1 parent fb8aebe commit 5ca9f47

File tree

150 files changed

+6764
-4482
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

150 files changed

+6764
-4482
lines changed

physx/CHANGELOG.md

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,73 @@
1-
# v5.6.0-107.0
1+
# v5.6.1-107.3
2+
3+
## General
4+
5+
### Fixed
6+
7+
* PxHashSet would crash after adding ~300 million entries to the set due to internal PxU32 overflows. This has been fixed.
8+
* The documentation build tool had a regression that made the search not find terms properly.
9+
10+
### Added
11+
12+
* Update NVCC compiler options to generate SASS for Blackwell.
13+
14+
## Articulations
15+
16+
### Deprecated
17+
18+
* Deprecated PxArticulationFlag::eDRIVE_LIMITS_ARE_FORCES. Joint dofs configured to use PxPerformanceEnvelope will already ignore the flag and assume they are configured for forces/torques.
19+
20+
### Added
21+
22+
* A new motor model for clamping total joint effort (force or torque). The total joint effort is comprised of drive effort and joint effort applied through articulation cache by the user. Please see PxPerformanceEnvelope for clamping details.
23+
* New direct GPU API getters for PxArticulationGPUAPIReadType::eFIXED_TENDON, PxArticulationGPUAPIReadType::eFIXED_TENDON_JOINT, PxArticulationGPUAPIReadType::eSPATIAL_TENDON, and PxArticulationGPUAPIReadType::eSPATIAL_TENDON_ATTACHMENT.
24+
* PxArticulationFixedTendon, PxArticulationTendonJoint, PxArticulationSpatialTendon, and PxArticulationAttachment's parameter getters now report errors if called when PxSceneFlag::eENABLE_DIRECT_GPU_API is enabled.
25+
26+
### Fixed
27+
28+
* When running on GPU, the link incoming joint force was not being reported correctly in certain scenarios (PxArticulationCacheFlag::eLINK_INCOMING_JOINT_FORCE, PxArticulationGPUAPIReadType::eLINK_INCOMING_JOINT_FORCE).
29+
30+
## Joints
31+
32+
### Deprecated
233

3-
With this release, we make the complete GPU source code available under the BSD-3 license. We no longer provide binaries for GPU acceleration and users have to build the GPU binaries from source; in order to do so, please note the additional build instructions in the platform readmes linked below.
34+
* PxD6Drive::eSWING has been deprecated. Furthermore, the angular joint drive precedence system (PxD6Drive::eSLERP taking precedence over PxD6Drive::eSWING/eTWIST) has been deprecated too. The recommended approach is now to first define the desired angular drive model before setting any drive parameters. The new API PxD6Joint::setAngularDriveConfig() can be used for this purpose. The recommended workflow is as follows:
35+
* To use PxD6Drive::eSLERP, first call PxD6Joint::setAngularDriveConfig(PxD6AngularDriveConfig::eSLERP) (PxD6Drive::eSWING/eTWIST/eSWING1/eSWING2 can not be used in this config).
36+
* To use PxD6Drive::eTWIST/eSWING1/eSWING2, first call PxD6Joint::setAngularDriveConfig(PxD6AngularDriveConfig::eSWING_TWIST) (PxD6Drive::eSWING/eSLERP can not be used in this config).
37+
* PxD6Drive::eSWING should not be used anymore. The configuration of the previous bullet point can be used instead together with setting identical drive parameters for PxD6Drive::eSWING1/eSWING2.
38+
39+
### Added
40+
41+
* PxD6Joint::setAngularDriveConfig() has been added to configure whether angular drives should use the slerp model or twist/swing1/swing2.
42+
* It is now possible to set different parameters for drives along the swing1 and swing2 axes (see new entries PxD6Drive::eSWING1 and PxD6Drive::eSWING2). Note that it is necessary to configure the D6 joint via PxD6Joint::setAngularDriveConfig(PxD6AngularDriveConfig::eSWING_TWIST) to enable this functionality.
43+
44+
### Fixed
45+
46+
* When running with Direct GPU API enabled (PxSceneFlag::eENABLE_DIRECT_GPU_API), D6 joints were not able to break if the force exceeded the break threshold. The joints do break now but there is a potential performance penalty if the scene has breakable D6 joints.
47+
48+
## Deformable Body
49+
50+
### Fixed
51+
52+
* Deformable Volume collision filter deallocation resulted in memory leaks.
53+
* Deformable-rigid dynamic friction resolution has received wrong rigid dynamic friction values.
54+
55+
## Rigid Body
56+
57+
### Fixed
58+
59+
* A rare crash in PxConvexCoreGeometry contact generation in Gu::FaceClipper::makePlanes() function has been fixed.
60+
* A bug when PxPhysics::createMaterial() allowed to create materials with invalid restitution values. The accepted values now are [0, 1] for restitution and (-PX_MAX_REAL, 0) if it's the compliant contact stiffness.
61+
* Pairs of triangle mesh colliders (where both have no SDF) are filtered out from the collision pipeline, avoiding a crash when e.g. kinematic triangle meshes collide.
62+
* A regression in the GPU geometry code that could cause ghost contacts between a sphere and a triangle mesh has been fixed.
63+
64+
## Scene Queries
65+
66+
### Added
67+
68+
* `PxConvexCoreGeometry` is now supported as the query geometry in `sweep()` and `overlap()` scene queries.
69+
70+
# v5.6.0-107.0
471

572
## Supported Platforms
673

@@ -35,12 +102,14 @@ With this release, we make the complete GPU source code available under the BSD-
35102
* Added SnippetProfilerConverter to convert profiler data to a file format that can be viewed in Chrome.
36103
* The task system now supports high-priority tasks, which are used by the CPU broadphase (PxBroadPhaseType::ePABP). This can sometimes give small performance gains and smoother performance profiles. If not using the default PhysX CPU dispatcher, support for high-priority tasks should be replicated in user-provided CPU dispatchers to take advantage of this change.
37104
* Added setName/getName functions to PxArticulationJointReducedCoordinate class.
105+
* The PxGpuBroadPhaseDesc structure has been added, to let users tweak the GPU broadphase data. This is mostly useful when using environment IDs in colocated reinforcement learning cases.
38106

39107
## Rigid Body
40108

41109
### Fixed
42110

43111
* A bug leading to a potential performance issue in the PxBroadPhaseType::ePABP broadphase has been fixed. A pair buffer was constantly resizing each frame for no reason.
112+
* The GPU broadphase could overflow internal 32bit counters with large colocated environments (reinforcement learning cases). This has been fixed.
44113
* Switching dynamic/kinematic at runtime when direct GPU API was in use was causing errors and was disabled for that reason in 106.5. The bug was fixed and the feature is enabled again.
45114

46115
### Removed

physx/buildtools/cmake_generate_projects.py

Lines changed: 64 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,43 +13,89 @@ def cmakeExt():
1313
return ''
1414

1515

16-
def filterPreset(presetName):
16+
def filterPreset(presetPath):
17+
# If this is a file path, extract the actual preset name from XML or filename
18+
if os.path.isfile(presetPath):
19+
try:
20+
presetXml = xml.etree.ElementTree.parse(presetPath).getroot()
21+
presetName = presetXml.get('name')
22+
except:
23+
# Fall back to just using the basename without extension if XML parsing fails
24+
basename = os.path.basename(presetPath)
25+
presetName = os.path.splitext(basename)[0]
26+
else:
27+
# If not a file path, assume it's already a preset name
28+
presetName = presetPath
29+
30+
# Platform-specific filtering
1731
winPresetFilter = ['win','switch','crosscompile']
1832
if sys.platform == 'win32':
33+
# On Windows, include presets that contain win, switch, or crosscompile
34+
# (but not windows-crosscompile)
1935
if any((presetName.find(elem) != -1 and 'windows-crosscompile' not in presetName) for elem in winPresetFilter):
2036
return True
2137
else:
22-
if all((presetName.find(elem) == -1 or 'windows-crosscompile' in presetName) for elem in winPresetFilter):
38+
# On non-Windows, include Linux presets and windows-crosscompile
39+
# Check for Linux or other Unix/macOS presets (those not containing Windows-specific terms)
40+
# Special case: include windows-crosscompile, which is for cross-compiling Windows targets
41+
if 'linux' in presetName.lower() or 'mac' in presetName.lower() or 'windows-crosscompile' in presetName:
42+
return True
43+
if all(presetName.find(elem) == -1 for elem in ['win', 'switch']):
2344
return True
2445
return False
2546

2647
def noPresetProvided(physx_root_dir):
2748
global input
2849
print('Preset parameter required, available presets:')
29-
internal_presets = os.path.join(physx_root_dir, "buildtools", "presets", "*.xml")
30-
public_presets = os.path.join(physx_root_dir, "buildtools", "presets", "public", "*.xml")
50+
presets_dir = os.path.join(physx_root_dir, "buildtools", "presets")
51+
internal_presets = os.path.join(presets_dir, "*.xml")
52+
public_presets = os.path.join(presets_dir, "public", "*.xml")
53+
54+
# Get all XML files in the presets directory
55+
internal_preset_files = glob.glob(internal_presets)
56+
57+
# Check if we have any non-directory XML files directly in presets folder
3158
presetfiles = []
32-
for file in glob.glob(internal_presets):
33-
presetfiles.append(file)
59+
for file in internal_preset_files:
60+
if not os.path.isdir(file): # Make sure it's a file, not a directory
61+
basename = os.path.basename(file)
62+
dirname = os.path.dirname(file)
63+
if os.path.basename(dirname) != "public": # Skip files in public subdirectory
64+
presetfiles.append(file)
65+
66+
# If no XML files in main presets directory, we're in public distribution
67+
# So use the files from public directory
68+
if len(presetfiles) == 0:
69+
print("No presets in main folder, using public presets")
70+
presetfiles = glob.glob(public_presets)
3471

3572
if len(presetfiles) == 0:
36-
for file in glob.glob(public_presets):
37-
presetfiles.append(file)
73+
print("Error: No preset files found. Make sure the directory structure is correct.")
74+
exit(1)
3875

3976
counter = 0
4077
presetList = []
4178
for preset in presetfiles:
4279
if filterPreset(preset):
43-
presetXml = xml.etree.ElementTree.parse(preset).getroot()
44-
if(preset.find('user') == -1):
45-
print('(' + str(counter) + ') ' + presetXml.get('name') +
46-
' <--- ' + presetXml.get('comment'))
47-
presetList.append(presetXml.get('name'))
48-
else:
49-
print('(' + str(counter) + ') ' + presetXml.get('name') +
50-
'.user <--- ' + presetXml.get('comment'))
51-
presetList.append(presetXml.get('name') + '.user')
52-
counter = counter + 1
80+
try:
81+
presetXml = xml.etree.ElementTree.parse(preset).getroot()
82+
if preset.find('user') == -1:
83+
print('(' + str(counter) + ') ' + presetXml.get('name') +
84+
' <--- ' + presetXml.get('comment'))
85+
presetList.append(presetXml.get('name'))
86+
else:
87+
print('(' + str(counter) + ') ' + presetXml.get('name') +
88+
'.user <--- ' + presetXml.get('comment'))
89+
presetList.append(presetXml.get('name') + '.user')
90+
counter = counter + 1
91+
except Exception as e:
92+
print(f"Warning: Could not parse preset file {preset}: {e}")
93+
continue
94+
95+
if counter == 0:
96+
print("Error: No valid presets found for this platform.")
97+
exit(1)
98+
5399
# Fix Python 2.x.
54100
try:
55101
input = raw_input
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
<config remotes="cloudfront">
1+
<config remotes="cloudfront urm">
22
<remote2 name="cloudfront">
33
<transport actions="download" protocol="https" packageLocation="d4i3qtqj3r0z5.cloudfront.net/${name}@${version}" />
44
</remote2>
5+
<remote2 name="urm">
6+
<transport actions="download" protocol="https" packageLocation="urm.nvidia.com/artifactory/ct-omniverse-generic/pkgs/${name}/${name}@${version}" />
7+
<transport actions="list" protocol="http" packageLocation="omnipackages.nvidia.com/api/v1/list/artifactory" />
8+
</remote2>
59
</config>

physx/generate_projects.bat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ if exist "%Install2022Dir%\VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.t
8585
)
8686

8787
:ADDITIONAL_PARAMS_MISSING
88-
call %PM_PYTHON% %PHYSX_ROOT_DIR%buildtools/cmake_generate_projects.py %1
88+
call "%PM_PYTHON%" "%PHYSX_ROOT_DIR%buildtools/cmake_generate_projects.py" %1
8989
if %ERRORLEVEL% neq 0 (
9090
set /p DUMMY=Hit ENTER to continue...
9191
exit /b %errorlevel%

physx/include/PxArticulationJointReducedCoordinate.h

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ namespace physx
223223
to #PxSceneDesc::wakeCounterResetValue if the counter value is below the reset value.
224224
225225
\note This call is not allowed while the simulation is running.
226+
\note This method should not be used after the direct GPU API has been enabled and initialized. See #PxDirectGPUAPI for the details.
226227
227228
\note For spherical joints, target must be in range [-Pi, Pi].
228229
@@ -240,7 +241,9 @@ namespace physx
240241
\brief Returns the joint drive position target for the given axis.
241242
242243
\param[in] axis The target axis.
243-
244+
245+
\note This method should not be used after the direct GPU API has been enabled and initialized. See #PxDirectGPUAPI for the details.
246+
244247
\return The target position.
245248
246249
\see PxArticulationAxis, setDriveTarget
@@ -259,6 +262,8 @@ namespace physx
259262
260263
\note This call is not allowed while the simulation is running.
261264
265+
\note This method should not be used after the direct GPU API has been enabled and initialized. See #PxDirectGPUAPI for the details.
266+
262267
\see PxArticulationAxis, getDriveVelocity
263268
264269
<b>Default:</b> 0.0
@@ -270,6 +275,8 @@ namespace physx
270275
271276
\param[in] axis The target axis.
272277
278+
\note This method should not be used after the direct GPU API has been enabled and initialized. See #PxDirectGPUAPI for the details.
279+
273280
\return The target velocity.
274281
275282
\see PxArticulationAxis, setDriveVelocity
@@ -422,6 +429,8 @@ namespace physx
422429
423430
\note This call is not allowed while the simulation is running.
424431
432+
\note This method should not be used after the direct GPU API has been enabled and initialized. See #PxDirectGPUAPI for the details.
433+
425434
\note For PxArticulationJointType::eSPHERICAL, jointPos must be in range [-Pi, Pi].
426435
\note For PxArticulationJointType::eREVOLUTE, jointPos must be in range [-2*Pi, 2*Pi].
427436
\note For PxArticulationJointType::eREVOLUTE_UNWRAPPED, jointPos must be in range [-PX_MAX_REAL, PX_MAX_REAL].
@@ -449,6 +458,8 @@ namespace physx
449458
\note This call is not allowed while the simulation is running except in a split simulation during #PxScene::collide() and up to #PxScene::advance(),
450459
and in PxContactModifyCallback or in contact report callbacks.
451460
461+
\note This method should not be used after the direct GPU API has been enabled and initialized. See #PxDirectGPUAPI for the details.
462+
452463
\see PxArticulationAxis, setJointPosition, PxArticulationCache::jointPosition
453464
*/
454465
virtual PxReal getJointPosition(PxArticulationAxis::Enum axis) const = 0;
@@ -465,6 +476,8 @@ namespace physx
465476
466477
\note This call is not allowed while the simulation is running.
467478
479+
\note This method should not be used after the direct GPU API has been enabled and initialized. See #PxDirectGPUAPI for the details.
480+
468481
\see PxArticulationAxis, getJointVelocity, PxArticulationCache::jointVelocity, PxArticulationReducedCoordinate::updateKinematic
469482
470483
<b>Default:</b> 0.0
@@ -483,6 +496,8 @@ namespace physx
483496
\note This call is not allowed while the simulation is running except in a split simulation during #PxScene::collide() and up to #PxScene::advance(),
484497
and in PxContactModifyCallback or in contact report callbacks.
485498
499+
\note This method should not be used after the direct GPU API has been enabled and initialized. See #PxDirectGPUAPI for the details.
500+
486501
\see PxArticulationAxis, setJointVelocity, PxArticulationCache::jointVelocity
487502
*/
488503
virtual PxReal getJointVelocity(PxArticulationAxis::Enum axis) const = 0;

0 commit comments

Comments
 (0)