From 56315c67110f0f692e1cb0196a430932d20dd92f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Tue, 29 May 2018 17:24:35 -0700 Subject: [PATCH] Fixed memory alignment. --- include/bimg/bimg.h | 2 +- src/image.cpp | 4 ++-- tools/texturec/texturec.cpp | 28 +++++++++++++++++++++++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/include/bimg/bimg.h b/include/bimg/bimg.h index 92cd974..8f62b74 100644 --- a/include/bimg/bimg.h +++ b/include/bimg/bimg.h @@ -9,7 +9,7 @@ #include // uint32_t #include // NULL -#define BIMG_API_VERSION UINT32_C(5) +#define BIMG_API_VERSION UINT32_C(6) namespace bx { diff --git a/src/image.cpp b/src/image.cpp index d644db0..5aea629 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -2891,10 +2891,10 @@ namespace bimg const uint8_t numMips = _hasMips ? imageGetNumMips(_format, _width, _height, _depth) : 1; uint32_t size = imageGetSize(NULL, _width, _height, _depth, _cubeMap, _hasMips, _numLayers, _format); - ImageContainer* imageContainer = (ImageContainer*)BX_ALLOC(_allocator, size + sizeof(ImageContainer) ); + ImageContainer* imageContainer = (ImageContainer*)BX_ALLOC(_allocator, size + BX_ALIGN_16(sizeof(ImageContainer) ) ); imageContainer->m_allocator = _allocator; - imageContainer->m_data = imageContainer + 1; + imageContainer->m_data = bx::alignPtr(imageContainer + 1, 0, 16); imageContainer->m_format = _format; imageContainer->m_orientation = Orientation::R0; imageContainer->m_size = size; diff --git a/tools/texturec/texturec.cpp b/tools/texturec/texturec.cpp index cfbf2cc..58321cb 100644 --- a/tools/texturec/texturec.cpp +++ b/tools/texturec/texturec.cpp @@ -796,6 +796,30 @@ void help(const char* _str, const bx::Error& _err) help(str.c_str(), false); } +class AlignedAllocator : public bx::AllocatorI +{ +public: + AlignedAllocator(bx::AllocatorI* _allocator, size_t _minAlignment) + : m_allocator(_allocator) + , m_minAlignment(_minAlignment) + { + } + + virtual void* realloc( + void* _ptr + , size_t _size + , size_t _align + , const char* _file + , uint32_t _line + ) + { + return m_allocator->realloc(_ptr, _size, bx::max(_align, m_minAlignment), _file, _line); + } + + bx::AllocatorI* m_allocator; + size_t m_minAlignment; +}; + int main(int _argc, const char* _argv[]) { bx::CommandLine cmdLine(_argc, _argv); @@ -947,7 +971,9 @@ int main(int _argc, const char* _argv[]) return bx::kExitFailure; } - bx::DefaultAllocator allocator; + bx::DefaultAllocator defaultAllocator; + AlignedAllocator allocator(&defaultAllocator, 16); + uint8_t* inputData = (uint8_t*)BX_ALLOC(&allocator, inputSize); bx::read(&reader, inputData, inputSize, &err);