|
@@ -1648,8 +1648,14 @@ namespace bgfx
|
|
|
Resolution resolution;
|
|
Resolution resolution;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ struct IndexBuffer
|
|
|
|
|
+ {
|
|
|
|
|
+ uint32_t m_size;
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
struct VertexBuffer
|
|
struct VertexBuffer
|
|
|
{
|
|
{
|
|
|
|
|
+ uint32_t m_size;
|
|
|
uint16_t m_stride;
|
|
uint16_t m_stride;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -2836,6 +2842,9 @@ namespace bgfx
|
|
|
BX_WARN(isValid(handle), "Failed to allocate index buffer handle.");
|
|
BX_WARN(isValid(handle), "Failed to allocate index buffer handle.");
|
|
|
if (isValid(handle) )
|
|
if (isValid(handle) )
|
|
|
{
|
|
{
|
|
|
|
|
+ IndexBuffer& ib = m_indexBuffers[handle.idx];
|
|
|
|
|
+ ib.m_size = _mem->size;
|
|
|
|
|
+
|
|
|
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateIndexBuffer);
|
|
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateIndexBuffer);
|
|
|
cmdbuf.write(handle);
|
|
cmdbuf.write(handle);
|
|
|
cmdbuf.write(_mem);
|
|
cmdbuf.write(_mem);
|
|
@@ -2899,7 +2908,9 @@ namespace bgfx
|
|
|
|
|
|
|
|
m_declRef.add(handle, declHandle, _decl.m_hash);
|
|
m_declRef.add(handle, declHandle, _decl.m_hash);
|
|
|
|
|
|
|
|
- m_vertexBuffers[handle.idx].m_stride = _decl.m_stride;
|
|
|
|
|
|
|
+ VertexBuffer& vb = m_vertexBuffers[handle.idx];
|
|
|
|
|
+ vb.m_size = _mem->size;
|
|
|
|
|
+ vb.m_stride = _decl.m_stride;
|
|
|
|
|
|
|
|
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateVertexBuffer);
|
|
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateVertexBuffer);
|
|
|
cmdbuf.write(handle);
|
|
cmdbuf.write(handle);
|
|
@@ -2950,11 +2961,14 @@ namespace bgfx
|
|
|
BX_WARN(isValid(indexBufferHandle), "Failed to allocate index buffer handle.");
|
|
BX_WARN(isValid(indexBufferHandle), "Failed to allocate index buffer handle.");
|
|
|
if (!isValid(indexBufferHandle) )
|
|
if (!isValid(indexBufferHandle) )
|
|
|
{
|
|
{
|
|
|
- return ptr;
|
|
|
|
|
|
|
+ return NonLocalAllocator::kInvalidBlock;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const uint32_t allocSize = bx::max<uint32_t>(BGFX_CONFIG_DYNAMIC_INDEX_BUFFER_SIZE, _size);
|
|
const uint32_t allocSize = bx::max<uint32_t>(BGFX_CONFIG_DYNAMIC_INDEX_BUFFER_SIZE, _size);
|
|
|
|
|
|
|
|
|
|
+ IndexBuffer& ib = m_indexBuffers[indexBufferHandle.idx];
|
|
|
|
|
+ ib.m_size = allocSize;
|
|
|
|
|
+
|
|
|
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateDynamicIndexBuffer);
|
|
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateDynamicIndexBuffer);
|
|
|
cmdbuf.write(indexBufferHandle);
|
|
cmdbuf.write(indexBufferHandle);
|
|
|
cmdbuf.write(allocSize);
|
|
cmdbuf.write(allocSize);
|
|
@@ -3063,7 +3077,7 @@ namespace bgfx
|
|
|
const uint32_t offset = (dib.m_startIndex + _startIndex)*indexSize;
|
|
const uint32_t offset = (dib.m_startIndex + _startIndex)*indexSize;
|
|
|
const uint32_t size = bx::min<uint32_t>(offset
|
|
const uint32_t size = bx::min<uint32_t>(offset
|
|
|
+ bx::min(bx::uint32_satsub(dib.m_size, _startIndex*indexSize), _mem->size)
|
|
+ bx::min(bx::uint32_satsub(dib.m_size, _startIndex*indexSize), _mem->size)
|
|
|
- , BGFX_CONFIG_DYNAMIC_INDEX_BUFFER_SIZE) - offset
|
|
|
|
|
|
|
+ , m_indexBuffers[dib.m_handle.idx].m_size) - offset
|
|
|
;
|
|
;
|
|
|
BX_CHECK(_mem->size <= size, "Truncating dynamic index buffer update (size %d, mem size %d)."
|
|
BX_CHECK(_mem->size <= size, "Truncating dynamic index buffer update (size %d, mem size %d)."
|
|
|
, size
|
|
, size
|
|
@@ -3115,7 +3129,6 @@ namespace bgfx
|
|
|
if (ptr == NonLocalAllocator::kInvalidBlock)
|
|
if (ptr == NonLocalAllocator::kInvalidBlock)
|
|
|
{
|
|
{
|
|
|
VertexBufferHandle vertexBufferHandle = { m_vertexBufferHandle.alloc() };
|
|
VertexBufferHandle vertexBufferHandle = { m_vertexBufferHandle.alloc() };
|
|
|
-
|
|
|
|
|
BX_WARN(isValid(vertexBufferHandle), "Failed to allocate dynamic vertex buffer handle.");
|
|
BX_WARN(isValid(vertexBufferHandle), "Failed to allocate dynamic vertex buffer handle.");
|
|
|
if (!isValid(vertexBufferHandle) )
|
|
if (!isValid(vertexBufferHandle) )
|
|
|
{
|
|
{
|
|
@@ -3124,6 +3137,10 @@ namespace bgfx
|
|
|
|
|
|
|
|
const uint32_t allocSize = bx::max<uint32_t>(BGFX_CONFIG_DYNAMIC_VERTEX_BUFFER_SIZE, _size);
|
|
const uint32_t allocSize = bx::max<uint32_t>(BGFX_CONFIG_DYNAMIC_VERTEX_BUFFER_SIZE, _size);
|
|
|
|
|
|
|
|
|
|
+ VertexBuffer& vb = m_vertexBuffers[vertexBufferHandle.idx];
|
|
|
|
|
+ vb.m_size = allocSize;
|
|
|
|
|
+ vb.m_stride = 0;
|
|
|
|
|
+
|
|
|
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateDynamicVertexBuffer);
|
|
CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateDynamicVertexBuffer);
|
|
|
cmdbuf.write(vertexBufferHandle);
|
|
cmdbuf.write(vertexBufferHandle);
|
|
|
cmdbuf.write(allocSize);
|
|
cmdbuf.write(allocSize);
|
|
@@ -3242,7 +3259,7 @@ namespace bgfx
|
|
|
const uint32_t offset = (dvb.m_startVertex + _startVertex)*dvb.m_stride;
|
|
const uint32_t offset = (dvb.m_startVertex + _startVertex)*dvb.m_stride;
|
|
|
const uint32_t size = bx::min<uint32_t>(offset
|
|
const uint32_t size = bx::min<uint32_t>(offset
|
|
|
+ bx::min(bx::uint32_satsub(dvb.m_size, _startVertex*dvb.m_stride), _mem->size)
|
|
+ bx::min(bx::uint32_satsub(dvb.m_size, _startVertex*dvb.m_stride), _mem->size)
|
|
|
- , BGFX_CONFIG_DYNAMIC_VERTEX_BUFFER_SIZE) - offset
|
|
|
|
|
|
|
+ , m_vertexBuffers[dvb.m_handle.idx].m_size) - offset
|
|
|
;
|
|
;
|
|
|
BX_CHECK(_mem->size <= size, "Truncating dynamic vertex buffer update (size %d, mem size %d)."
|
|
BX_CHECK(_mem->size <= size, "Truncating dynamic vertex buffer update (size %d, mem size %d)."
|
|
|
, size
|
|
, size
|
|
@@ -4616,6 +4633,7 @@ namespace bgfx
|
|
|
uint64_t m_tempKeys[BGFX_CONFIG_MAX_DRAW_CALLS];
|
|
uint64_t m_tempKeys[BGFX_CONFIG_MAX_DRAW_CALLS];
|
|
|
RenderItemCount m_tempValues[BGFX_CONFIG_MAX_DRAW_CALLS];
|
|
RenderItemCount m_tempValues[BGFX_CONFIG_MAX_DRAW_CALLS];
|
|
|
|
|
|
|
|
|
|
+ IndexBuffer m_indexBuffers[BGFX_CONFIG_MAX_INDEX_BUFFERS];
|
|
|
VertexBuffer m_vertexBuffers[BGFX_CONFIG_MAX_VERTEX_BUFFERS];
|
|
VertexBuffer m_vertexBuffers[BGFX_CONFIG_MAX_VERTEX_BUFFERS];
|
|
|
|
|
|
|
|
DynamicIndexBuffer m_dynamicIndexBuffers[BGFX_CONFIG_MAX_DYNAMIC_INDEX_BUFFERS];
|
|
DynamicIndexBuffer m_dynamicIndexBuffers[BGFX_CONFIG_MAX_DYNAMIC_INDEX_BUFFERS];
|