How to install vphysics jolt on gmod server?
ForvatorDMC opened this issue · 7 comments
Tell me as a dumb vegetable how to install this on a gmod server, linux x32.
just drop all the content from the archive into the root folder of the game.
All my 4 servers are on the standard Linux x32 gmod branch and not one of them has the “vphysics.so” file in the “bin” folder; instead, the “vphysics_srv.so” file is used.
Initially, I tried to simply rename this file by adding the word “_srv”, but after that my server basically stopped starting with the error “AppFramework: Unable to load module vphysics_srv.so!”.
I also tried to rename the rest of the vjolt files, and freaking out, I finally had about 20 files in the “bin” folder with different names, where the word “_srv” was in different places, or it was not there at all, but this again did not give anything and The error above was repeated. I also tried to rebuild this project personally, in the hope that I could get this treasured file (since the word “vphysics_jolt_srv.so” was in “build.md”), but after compilation it also did not create this file for me, and created a complete a copy of those files that are already in the archive.
@selenter-c
I have exactly the same problem.
same here
It seems like the issue why it crashes is that it searches for libtier0.so
but on a Linux 32x server, there it should be a libtier0_srv.so
so it can't find that dependency and fails to load.
If that would be fixed, there would be another crash which seems to be caused by Jolt.
Crash 1
It depends on libtier0.so
and libvstdlib.so
which don't exist.
root@wsl:/funnypath/gmod/bin# readelf -d vphysics_srv.so
Dynamic section at offset 0xeee8 contains 29 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libtier0.so] <---------------------------------
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
0x00000001 (NEEDED) Shared library: [ld-linux.so.2]
0x00000001 (NEEDED) Shared library: [libc.so.6]
[...] -- unimportant stuff
root@wsl:/funnypath/gmod/bin# readelf -d vphysics_srv_orig.so
Dynamic section at offset 0x19f0c4 contains 28 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libtier0_srv.so] <---------------------------------
0x00000001 (NEEDED) Shared library: [libvstdlib_srv.so]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [ld-linux.so.2]
0x00000001 (NEEDED) Shared library: [libc.so.6]
[...] -- unimportant stuff
It's possible to manually solve this one like this:
patchelf --replace-needed libtier0.so libtier0_srv.so vphysics_srv.so
patchelf --replace-needed libtier0.so libtier0_srv.so vphysics_jolt_avx2.so
patchelf --replace-needed libtier0.so libtier0_srv.so vphysics_jolt_sse2.so
patchelf --replace-needed libtier0.so libtier0_srv.so vphysics_jolt_sse42.so
# same issue with libvstdlib.so
patchelf --replace-needed libvstdlib.so libvstdlib_srv.so vphysics_jolt_avx2.so
patchelf --replace-needed libvstdlib.so libvstdlib_srv.so vphysics_jolt_sse2.so
patchelf --replace-needed libvstdlib.so libvstdliba_srv.so vphysics_jolt_sse42.so
Crash 2
So it seems like with the Jolt update ValidationContext
was added which now seems to cause it to crash?
I tested a bit around to try to find the cause of it, but It's getting late, so I'll stop for now.
MY guess would be that something inside JoltPhysicsCollision::CreateVirtualMesh
is broken.
This is what I got so far:
Currently, there is a server crash which is caused by jolt trying to use vertices that don't seem to exist?
- Crash Cause:
for (const IndexedTriangle &i : inTriangles)
for (uint32 idx : i.mIdx)
mBounds.Encapsulate(Vec3(inVertices[idx])); -- Vec3 constructor crashes
- Possible Cause: indexedTriangleList[xyz].m_Idx[idx] = Invalid vertex index?
Stacktrace (If someone want's to take a look into it):
0 - _mm_set_ss
1 - _mm_load_ss
2 - JPH::Vec3::Vec3 - Vec3.inl#L56
3 - JPH::TriangleCodecIndexed8BitPackSOA4Flags::ValidationContext::ValidationContext
- - - TriangleCodecIndexed8BitPackSOA4Flags.h#L102
4 - JPH::MeshShapeSettings::Sanitize - MeshShape.cpp:96
5 - JPH::MeshShapeSettings::MeshShapeSettings - MeshShape.cpp:88
6 - JoltPhysicsCollision::CreateVirtualMesh - vjolt_collide.cpp:865
7 - CM_CreateDispPhysCollide - engine_srv.so
Anyone found a fix ? i want to try it on my server too
For crash 2, I made the following change to:
VPhysics-Jolt/vphysics_jolt/vjolt_collide.cpp
Line 826 in 9f3bff4
- indexedTriangleList.resize( meshList.indexCount * 2 );
+ indexedTriangleList.resize( meshList.indexCount / 3 * 2 );
Seemed to fix the out of bounds issue based on some testing.