|
@@ -0,0 +1,53 @@
|
|
|
+diff --git a/thirdparty/vhacd/inc/btScalar.h b/thirdparty/vhacd/inc/btScalar.h
|
|
|
+index 487205062..52297cd78 100644
|
|
|
+--- a/thirdparty/vhacd/inc/btScalar.h
|
|
|
++++ b/thirdparty/vhacd/inc/btScalar.h
|
|
|
+@@ -535,6 +535,29 @@ struct btTypedObject {
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
++// -- GODOT start --
|
|
|
++// Cherry-picked from Bullet 2.88 to fix GH-27926
|
|
|
++///align a pointer to the provided alignment, upwards
|
|
|
++template <typename T>
|
|
|
++T *btAlignPointer(T *unalignedPtr, size_t alignment)
|
|
|
++{
|
|
|
++ struct btConvertPointerSizeT
|
|
|
++ {
|
|
|
++ union {
|
|
|
++ T *ptr;
|
|
|
++ size_t integer;
|
|
|
++ };
|
|
|
++ };
|
|
|
++ btConvertPointerSizeT converter;
|
|
|
++
|
|
|
++ const size_t bit_mask = ~(alignment - 1);
|
|
|
++ converter.ptr = unalignedPtr;
|
|
|
++ converter.integer += alignment - 1;
|
|
|
++ converter.integer &= bit_mask;
|
|
|
++ return converter.ptr;
|
|
|
++}
|
|
|
++// -- GODOT end --
|
|
|
++
|
|
|
+ // -- GODOT start --
|
|
|
+ }; // namespace VHACD
|
|
|
+ // -- GODOT end --
|
|
|
+diff --git a/thirdparty/vhacd/src/btAlignedAllocator.cpp b/thirdparty/vhacd/src/btAlignedAllocator.cpp
|
|
|
+index ce0e7f26f..8dee31e7e 100644
|
|
|
+--- a/thirdparty/vhacd/src/btAlignedAllocator.cpp
|
|
|
++++ b/thirdparty/vhacd/src/btAlignedAllocator.cpp
|
|
|
+@@ -72,8 +72,12 @@ static inline void* btAlignedAllocDefault(size_t size, int32_t alignment)
|
|
|
+
|
|
|
+ real = (char*)sAllocFunc(size + sizeof(void*) + (alignment - 1));
|
|
|
+ if (real) {
|
|
|
+- offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1);
|
|
|
+- ret = (void*)((real + sizeof(void*)) + offset);
|
|
|
++ // -- GODOT start --
|
|
|
++ // Synced with Bullet 2.88 to fix GH-27926
|
|
|
++ //offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1);
|
|
|
++ //ret = (void*)((real + sizeof(void*)) + offset);
|
|
|
++ ret = btAlignPointer(real + sizeof(void *), alignment);
|
|
|
++ // -- GODOT end --
|
|
|
+ *((void**)(ret)-1) = (void*)(real);
|
|
|
+ }
|
|
|
+ else {
|