Skip to content

Commit

Permalink
Restore Android SDK 21 support.
Browse files Browse the repository at this point in the history
  • Loading branch information
eugeneko committed Oct 20, 2024
1 parent 5813d15 commit 9d03c71
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
2 changes: 1 addition & 1 deletion BuildTools/Android/tests/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ android {
defaultConfig {
applicationId 'DE.Android.Tests'
targetSdkVersion 32
minSdkVersion 28
minSdkVersion 21

ndk {
abiFilters = []
Expand Down
35 changes: 35 additions & 0 deletions Common/src/DefaultRawMemoryAllocator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,37 @@
namespace Diligent
{

namespace
{

#if PLATFORM_ANDROID && __ANDROID_API__ < 28
void* AllocateAlignedFallback(size_t Size, size_t Alignment)
{
constexpr size_t PointerSize = sizeof(void*);
const size_t AdjustedAlignment = (std::max)(Alignment, PointerSize);

void* Pointer = malloc(Size + AdjustedAlignment + PointerSize);
void* AlignedPointer = AlignUp(reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(Pointer) + PointerSize), AdjustedAlignment);

void** StoredPointer = reinterpret_cast<void**>(AlignedPointer) - 1;
VERIFY_EXPR(StoredPointer >= Pointer);
*StoredPointer = Pointer;

return AlignedPointer;
}

void FreeAlignedFallback(void* Ptr)
{
if (Ptr != nullptr)
{
void* OriginalPointer = *(reinterpret_cast<void**>(Ptr) - 1);
free(OriginalPointer);
}
}
#endif

} // namespace

DefaultRawMemoryAllocator::DefaultRawMemoryAllocator()
{
}
Expand Down Expand Up @@ -66,6 +97,8 @@ void* DefaultRawMemoryAllocator::AllocateAligned(size_t Size, size_t Alignment,
return _aligned_malloc_dbg(Size, Alignment, dbgFileName, dbgLineNumber);
#elif defined(_MSC_VER) || defined(__MINGW64__) || defined(__MINGW32__)
return _aligned_malloc(Size, Alignment);
#elif PLATFORM_ANDROID && __ANDROID_API__ < 28
return AllocateAlignedFallback(Size, Alignment);
#else
return aligned_alloc(Alignment, Size);
#endif
Expand All @@ -75,6 +108,8 @@ void DefaultRawMemoryAllocator::FreeAligned(void* Ptr)
{
#if defined(_MSC_VER) || defined(__MINGW64__) || defined(__MINGW32__)
_aligned_free(Ptr);
#elif PLATFORM_ANDROID && __ANDROID_API__ < 28
FreeAlignedFallback(Ptr);
#else
free(Ptr);
#endif
Expand Down

0 comments on commit 9d03c71

Please sign in to comment.