From a038b6d4269e5b0f3efbde9f73c832d7c96bc392 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Sat, 10 Jan 2015 20:56:38 -0800 Subject: [PATCH] Added ability to bind static index buffer to compute. --- include/bgfx.h | 2 +- src/bgfx.cpp | 11 +++++++---- src/bgfx_p.h | 7 ++++--- src/renderer_d3d11.cpp | 4 ++-- src/renderer_d3d9.cpp | 2 +- src/renderer_gl.cpp | 2 +- src/renderer_null.cpp | 2 +- 7 files changed, 17 insertions(+), 13 deletions(-) diff --git a/include/bgfx.h b/include/bgfx.h index 4414cc110..77e471972 100644 --- a/include/bgfx.h +++ b/include/bgfx.h @@ -615,7 +615,7 @@ namespace bgfx /// @remarks /// Only 16-bit index buffer is supported. /// - IndexBufferHandle createIndexBuffer(const Memory* _mem); + IndexBufferHandle createIndexBuffer(const Memory* _mem, uint8_t _flags = BGFX_BUFFER_COMPUTE_NONE); /// Destroy static index buffer. void destroyIndexBuffer(IndexBufferHandle _handle); diff --git a/src/bgfx.cpp b/src/bgfx.cpp index 48b810809..0c235c626 100644 --- a/src/bgfx.cpp +++ b/src/bgfx.cpp @@ -1477,7 +1477,7 @@ again: m_renderCtx = NULL; m_exit = true; } - // fallthrough + // fall through case CommandBuffer::End: end = true; @@ -1491,7 +1491,10 @@ again: Memory* mem; _cmdbuf.read(mem); - m_renderCtx->createIndexBuffer(handle, mem); + uint8_t flags; + _cmdbuf.read(flags); + + m_renderCtx->createIndexBuffer(handle, mem, flags); release(mem); } @@ -2062,11 +2065,11 @@ again: s_ctx->dbgTextImage(_x, _y, _width, _height, _data, _pitch); } - IndexBufferHandle createIndexBuffer(const Memory* _mem) + IndexBufferHandle createIndexBuffer(const Memory* _mem, uint8_t _flags) { BGFX_CHECK_MAIN_THREAD(); BX_CHECK(NULL != _mem, "_mem can't be NULL"); - return s_ctx->createIndexBuffer(_mem); + return s_ctx->createIndexBuffer(_mem, _flags); } void destroyIndexBuffer(IndexBufferHandle _handle) diff --git a/src/bgfx_p.h b/src/bgfx_p.h index 1def6948e..d7305c253 100644 --- a/src/bgfx_p.h +++ b/src/bgfx_p.h @@ -1784,7 +1784,7 @@ namespace bgfx virtual RendererType::Enum getRendererType() const = 0; virtual const char* getRendererName() const = 0; virtual void flip() = 0; - virtual void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem) = 0; + virtual void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint8_t _flags) = 0; virtual void destroyIndexBuffer(IndexBufferHandle _handle) = 0; virtual void createVertexDecl(VertexDeclHandle _handle, const VertexDecl& _decl) = 0; virtual void destroyVertexDecl(VertexDeclHandle _handle) = 0; @@ -1914,7 +1914,7 @@ namespace bgfx return NULL; } - BGFX_API_FUNC(IndexBufferHandle createIndexBuffer(const Memory* _mem) ) + BGFX_API_FUNC(IndexBufferHandle createIndexBuffer(const Memory* _mem, uint8_t _flags) ) { IndexBufferHandle handle = { m_indexBufferHandle.alloc() }; @@ -1924,6 +1924,7 @@ namespace bgfx CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateIndexBuffer); cmdbuf.write(handle); cmdbuf.write(_mem); + cmdbuf.write(_flags); } return handle; @@ -2215,7 +2216,7 @@ namespace bgfx CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::CreateDynamicIndexBuffer); cmdbuf.write(handle); cmdbuf.write(_size); - cmdbuf.write(BGFX_BUFFER_COMPUTE_NONE); + cmdbuf.write(uint8_t(BGFX_BUFFER_COMPUTE_NONE) ); ib = (TransientIndexBuffer*)BX_ALLOC(g_allocator, sizeof(TransientIndexBuffer)+_size); ib->data = (uint8_t*)&ib[1]; diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp index 923a6876a..bc7ac6554 100644 --- a/src/renderer_d3d11.cpp +++ b/src/renderer_d3d11.cpp @@ -762,9 +762,9 @@ namespace bgfx return BGFX_RENDERER_DIRECT3D11_NAME; } - void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem) BX_OVERRIDE + void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint8_t _flags) BX_OVERRIDE { - m_indexBuffers[_handle.idx].create(_mem->size, _mem->data, BGFX_BUFFER_COMPUTE_NONE); + m_indexBuffers[_handle.idx].create(_mem->size, _mem->data, _flags); } void destroyIndexBuffer(IndexBufferHandle _handle) BX_OVERRIDE diff --git a/src/renderer_d3d9.cpp b/src/renderer_d3d9.cpp index f434369da..af3942418 100644 --- a/src/renderer_d3d9.cpp +++ b/src/renderer_d3d9.cpp @@ -640,7 +640,7 @@ namespace bgfx return BGFX_RENDERER_DIRECT3D9_NAME; } - void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem) BX_OVERRIDE + void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint8_t /*_flags*/) BX_OVERRIDE { m_indexBuffers[_handle.idx].create(_mem->size, _mem->data); } diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 1858b91e1..d8aa2650f 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -1438,7 +1438,7 @@ namespace bgfx } } - void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem) BX_OVERRIDE + void createIndexBuffer(IndexBufferHandle _handle, Memory* _mem, uint8_t /*_flags*/) BX_OVERRIDE { m_indexBuffers[_handle.idx].create(_mem->size, _mem->data); } diff --git a/src/renderer_null.cpp b/src/renderer_null.cpp index ae86835c2..cde647bf9 100644 --- a/src/renderer_null.cpp +++ b/src/renderer_null.cpp @@ -33,7 +33,7 @@ namespace bgfx { } - void createIndexBuffer(IndexBufferHandle /*_handle*/, Memory* /*_mem*/) BX_OVERRIDE + void createIndexBuffer(IndexBufferHandle /*_handle*/, Memory* /*_mem*/, uint8_t /*_flags*/) BX_OVERRIDE { }