parent
668439d16a
commit
74ab31b7f7
3 changed files with 82 additions and 2 deletions
53
thirdparty/vhacd/0002-fpermissive-fix.patch
vendored
Normal file
53
thirdparty/vhacd/0002-fpermissive-fix.patch
vendored
Normal file
|
@ -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 {
|
23
thirdparty/vhacd/inc/btScalar.h
vendored
23
thirdparty/vhacd/inc/btScalar.h
vendored
|
@ -543,6 +543,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 --
|
// -- GODOT start --
|
||||||
}; // namespace VHACD
|
}; // namespace VHACD
|
||||||
// -- GODOT end --
|
// -- GODOT end --
|
||||||
|
|
8
thirdparty/vhacd/src/btAlignedAllocator.cpp
vendored
8
thirdparty/vhacd/src/btAlignedAllocator.cpp
vendored
|
@ -72,8 +72,12 @@ static inline void* btAlignedAllocDefault(size_t size, int32_t alignment)
|
||||||
|
|
||||||
real = (char*)sAllocFunc(size + sizeof(void*) + (alignment - 1));
|
real = (char*)sAllocFunc(size + sizeof(void*) + (alignment - 1));
|
||||||
if (real) {
|
if (real) {
|
||||||
offset = (alignment - (unsigned long)(real + sizeof(void*))) & (alignment - 1);
|
// -- GODOT start --
|
||||||
ret = (void*)((real + sizeof(void*)) + offset);
|
// 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);
|
*((void**)(ret)-1) = (void*)(real);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Reference in a new issue