Fixed issue #1307.

This commit is contained in:
Branimir Karadžić 2018-01-12 20:26:23 -08:00
parent 9c4600e2e7
commit e4cde19f35

View File

@ -1195,9 +1195,11 @@ namespace bgfx
public: public:
static UniformBuffer* create(uint32_t _size = 1<<20) static UniformBuffer* create(uint32_t _size = 1<<20)
{ {
uint32_t size = BX_ALIGN_16(bx::uint32_max(_size, sizeof(UniformBuffer) ) ); const uint32_t structSize = sizeof(UniformBuffer)-sizeof(UniformBuffer::m_buffer);
void* data = BX_ALLOC(g_allocator, size);
return BX_PLACEMENT_NEW(data, UniformBuffer)(_size); 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) static void destroy(UniformBuffer* _uniformBuffer)
@ -1211,8 +1213,9 @@ namespace bgfx
UniformBuffer* uniformBuffer = *_uniformBuffer; UniformBuffer* uniformBuffer = *_uniformBuffer;
if (_treshold >= uniformBuffer->m_size - uniformBuffer->m_pos) if (_treshold >= uniformBuffer->m_size - uniformBuffer->m_pos)
{ {
uint32_t size = BX_ALIGN_16(bx::uint32_max(uniformBuffer->m_size + _grow, sizeof(UniformBuffer) ) ); const uint32_t structSize = sizeof(UniformBuffer)-sizeof(UniformBuffer::m_buffer);
void* data = BX_REALLOC(g_allocator, uniformBuffer, size); uint32_t size = BX_ALIGN_16(uniformBuffer->m_size + _grow);
void* data = BX_REALLOC(g_allocator, uniformBuffer, size+structSize);
uniformBuffer = reinterpret_cast<UniformBuffer*>(data); uniformBuffer = reinterpret_cast<UniformBuffer*>(data);
uniformBuffer->m_size = size; uniformBuffer->m_size = size;
@ -1300,7 +1303,7 @@ namespace bgfx
private: private:
UniformBuffer(uint32_t _size) UniformBuffer(uint32_t _size)
: m_size(_size-sizeof(m_buffer) ) : m_size(_size)
, m_pos(0) , m_pos(0)
{ {
finish(); finish();
@ -1312,7 +1315,7 @@ namespace bgfx
uint32_t m_size; uint32_t m_size;
uint32_t m_pos; uint32_t m_pos;
char m_buffer[8]; char m_buffer[INT32_MAX];
}; };
struct UniformRegInfo struct UniformRegInfo