From e4cde19f3563639d28094d0cf70d790d7845d2fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Fri, 12 Jan 2018 20:26:23 -0800 Subject: [PATCH] Fixed issue #1307. --- src/bgfx_p.h | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/bgfx_p.h b/src/bgfx_p.h index c58c198ce..1047385b0 100644 --- a/src/bgfx_p.h +++ b/src/bgfx_p.h @@ -1195,9 +1195,11 @@ namespace bgfx public: static UniformBuffer* create(uint32_t _size = 1<<20) { - uint32_t size = BX_ALIGN_16(bx::uint32_max(_size, sizeof(UniformBuffer) ) ); - void* data = BX_ALLOC(g_allocator, size); - return BX_PLACEMENT_NEW(data, UniformBuffer)(_size); + const uint32_t structSize = sizeof(UniformBuffer)-sizeof(UniformBuffer::m_buffer); + + uint32_t size = BX_ALIGN_16(_size); + void* data = BX_ALLOC(g_allocator, size+structSize); + return BX_PLACEMENT_NEW(data, UniformBuffer)(size); } static void destroy(UniformBuffer* _uniformBuffer) @@ -1211,8 +1213,9 @@ namespace bgfx UniformBuffer* uniformBuffer = *_uniformBuffer; if (_treshold >= uniformBuffer->m_size - uniformBuffer->m_pos) { - uint32_t size = BX_ALIGN_16(bx::uint32_max(uniformBuffer->m_size + _grow, sizeof(UniformBuffer) ) ); - void* data = BX_REALLOC(g_allocator, uniformBuffer, size); + const uint32_t structSize = sizeof(UniformBuffer)-sizeof(UniformBuffer::m_buffer); + uint32_t size = BX_ALIGN_16(uniformBuffer->m_size + _grow); + void* data = BX_REALLOC(g_allocator, uniformBuffer, size+structSize); uniformBuffer = reinterpret_cast(data); uniformBuffer->m_size = size; @@ -1300,7 +1303,7 @@ namespace bgfx private: UniformBuffer(uint32_t _size) - : m_size(_size-sizeof(m_buffer) ) + : m_size(_size) , m_pos(0) { finish(); @@ -1312,7 +1315,7 @@ namespace bgfx uint32_t m_size; uint32_t m_pos; - char m_buffer[8]; + char m_buffer[INT32_MAX]; }; struct UniformRegInfo