diff options
Diffstat (limited to '3rdparty/bgfx/src/bgfx_p.h')
-rw-r--r-- | 3rdparty/bgfx/src/bgfx_p.h | 362 |
1 files changed, 190 insertions, 172 deletions
diff --git a/3rdparty/bgfx/src/bgfx_p.h b/3rdparty/bgfx/src/bgfx_p.h index ea6e4331ca6..2da498f243a 100644 --- a/3rdparty/bgfx/src/bgfx_p.h +++ b/3rdparty/bgfx/src/bgfx_p.h @@ -1,5 +1,5 @@ /* - * Copyright 2011-2016 Branimir Karadzic. All rights reserved. + * Copyright 2011-2017 Branimir Karadzic. All rights reserved. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause */ @@ -139,7 +139,7 @@ namespace bgfx #include <bx/os.h> #include <bx/maputil.h> -#include <bgfx/bgfxplatform.h> +#include <bgfx/platform.h> #include "image.h" #include "shader.h" @@ -178,11 +178,7 @@ namespace stl = tinystl; # include <unordered_map> # include <unordered_set> # include <vector> -namespace stl -{ - using namespace std; - using namespace std::tr1; -} +namespace stl = std; #endif // BGFX_CONFIG_USE_TINYSTL #if BX_PLATFORM_ANDROID @@ -437,23 +433,7 @@ namespace bgfx } } - void printfVargs(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, va_list _argList) - { - if (_x < m_width && _y < m_height) - { - char* temp = (char*)alloca(m_width); - - uint32_t num = bx::vsnprintf(temp, m_width, _format, _argList); - - uint8_t* mem = &m_mem[(_y*m_width+_x)*2]; - for (uint32_t ii = 0, xx = _x; ii < num && xx < m_width; ++ii, ++xx) - { - mem[0] = temp[ii]; - mem[1] = _attr; - mem += 2; - } - } - } + void printfVargs(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, va_list _argList); void printf(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, ...) { @@ -819,11 +799,11 @@ namespace bgfx return key; } - /// Returns true if item is command. - bool decode(uint64_t _key) + /// Returns true if item is compute command. + bool decode(uint64_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS]) { m_seq = uint32_t( (_key & SORT_KEY_SEQ_MASK ) >> SORT_KEY_SEQ_SHIFT); - m_view = uint8_t( (_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_SHIFT); + m_view = _viewRemap[(_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_SHIFT]; if (_key & SORT_KEY_DRAW_BIT) { m_depth = uint32_t( (_key & SORT_KEY_DRAW_DEPTH_MASK ) >> SORT_KEY_DRAW_DEPTH_SHIFT); @@ -836,11 +816,9 @@ namespace bgfx return true; // compute } - bool decode(uint64_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS]) + static uint8_t decodeView(uint64_t _key) { - bool compute = decode(_key); - m_view = _viewRemap[m_view]; - return compute; + return uint8_t( (_key & SORT_KEY_VIEW_MASK) >> SORT_KEY_VIEW_SHIFT); } static uint64_t remapView(uint64_t _key, uint8_t _viewRemap[BGFX_CONFIG_MAX_VIEWS]) @@ -929,7 +907,10 @@ namespace bgfx uint32_t num = *_num; BX_WARN(m_num+num < BGFX_CONFIG_MAX_MATRIX_CACHE, "Matrix cache overflow. %d (max: %d)", m_num+num, BGFX_CONFIG_MAX_MATRIX_CACHE); num = bx::uint32_min(num, BGFX_CONFIG_MAX_MATRIX_CACHE-m_num); - uint32_t first = m_num; + uint32_t first = m_num < BGFX_CONFIG_MAX_MATRIX_CACHE + ? m_num + : BGFX_CONFIG_MAX_MATRIX_CACHE - 1 + ; m_num += num; *_num = (uint16_t)num; return first; @@ -1132,7 +1113,7 @@ namespace bgfx char m_buffer[8]; }; - struct UniformInfo + struct UniformRegInfo { const void* m_data; UniformHandle m_handle; @@ -1149,7 +1130,7 @@ namespace bgfx { } - const UniformInfo* find(const char* _name) const + const UniformRegInfo* find(const char* _name) const { uint16_t handle = m_uniforms.find(bx::hashMurmur2A(_name) ); if (UniformHashMap::invalid != handle) @@ -1160,14 +1141,14 @@ namespace bgfx return NULL; } - const UniformInfo& add(UniformHandle _handle, const char* _name, const void* _data) + const UniformRegInfo& add(UniformHandle _handle, const char* _name, const void* _data) { BX_CHECK(isValid(_handle), "Uniform handle is invalid (name: %s)!", _name); const uint32_t key = bx::hashMurmur2A(_name); m_uniforms.removeByKey(key); m_uniforms.insert(key, _handle.idx); - UniformInfo& info = m_info[_handle.idx]; + UniformRegInfo& info = m_info[_handle.idx]; info.m_data = _data; info.m_handle = _handle; @@ -1182,7 +1163,7 @@ namespace bgfx private: typedef bx::HandleHashMapT<BGFX_CONFIG_MAX_UNIFORMS*2> UniformHashMap; UniformHashMap m_uniforms; - UniformInfo m_info[BGFX_CONFIG_MAX_UNIFORMS]; + UniformRegInfo m_info[BGFX_CONFIG_MAX_UNIFORMS]; }; struct Binding @@ -1720,39 +1701,41 @@ namespace bgfx void sort(); - bool checkAvailTransientIndexBuffer(uint32_t _num) + uint32_t getAvailTransientIndexBuffer(uint32_t _num) { - uint32_t offset = m_iboffset; + uint32_t offset = bx::strideAlign(m_iboffset, sizeof(uint16_t) ); uint32_t iboffset = offset + _num*sizeof(uint16_t); iboffset = bx::uint32_min(iboffset, BGFX_CONFIG_TRANSIENT_INDEX_BUFFER_SIZE); uint32_t num = (iboffset-offset)/sizeof(uint16_t); - return num == _num; + return num; } uint32_t allocTransientIndexBuffer(uint32_t& _num) { uint32_t offset = bx::strideAlign(m_iboffset, sizeof(uint16_t) ); - m_iboffset = offset + _num*sizeof(uint16_t); - m_iboffset = bx::uint32_min(m_iboffset, BGFX_CONFIG_TRANSIENT_INDEX_BUFFER_SIZE); - _num = (m_iboffset-offset)/sizeof(uint16_t); + uint32_t num = getAvailTransientIndexBuffer(_num); + m_iboffset = offset + num*sizeof(uint16_t); + _num = num; + return offset; } - bool checkAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride) + uint32_t getAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride) { - uint32_t offset = bx::strideAlign(m_vboffset, _stride); + uint32_t offset = bx::strideAlign(m_vboffset, _stride); uint32_t vboffset = offset + _num * _stride; vboffset = bx::uint32_min(vboffset, BGFX_CONFIG_TRANSIENT_VERTEX_BUFFER_SIZE); uint32_t num = (vboffset-offset)/_stride; - return num == _num; + return num; } uint32_t allocTransientVertexBuffer(uint32_t& _num, uint16_t _stride) { uint32_t offset = bx::strideAlign(m_vboffset, _stride); - m_vboffset = offset + _num * _stride; - m_vboffset = bx::uint32_min(m_vboffset, BGFX_CONFIG_TRANSIENT_VERTEX_BUFFER_SIZE); - _num = (m_vboffset-offset)/_stride; + uint32_t num = getAvailTransientVertexBuffer(_num, _stride); + m_vboffset = offset + num * _stride; + _num = num; + return offset; } @@ -1762,64 +1745,56 @@ namespace bgfx m_uniformBuffer->writeUniform(_type, _handle.idx, _value, _num); } - void free(IndexBufferHandle _handle) + bool free(IndexBufferHandle _handle) { - m_freeIndexBufferHandle[m_numFreeIndexBufferHandles] = _handle; - ++m_numFreeIndexBufferHandles; + return m_freeIndexBuffer.queue(_handle); } - void free(VertexDeclHandle _handle) + bool free(VertexDeclHandle _handle) { - m_freeVertexDeclHandle[m_numFreeVertexDeclHandles] = _handle; - ++m_numFreeVertexDeclHandles; + return m_freeVertexDecl.queue(_handle); } - void free(VertexBufferHandle _handle) + bool free(VertexBufferHandle _handle) { - m_freeVertexBufferHandle[m_numFreeVertexBufferHandles] = _handle; - ++m_numFreeVertexBufferHandles; + return m_freeVertexBuffer.queue(_handle); } - void free(ShaderHandle _handle) + bool free(ShaderHandle _handle) { - m_freeShaderHandle[m_numFreeShaderHandles] = _handle; - ++m_numFreeShaderHandles; + return m_freeShader.queue(_handle); } - void free(ProgramHandle _handle) + bool free(ProgramHandle _handle) { - m_freeProgramHandle[m_numFreeProgramHandles] = _handle; - ++m_numFreeProgramHandles; + return m_freeProgram.queue(_handle); } - void free(TextureHandle _handle) + bool free(TextureHandle _handle) { - m_freeTextureHandle[m_numFreeTextureHandles] = _handle; - ++m_numFreeTextureHandles; + return m_freeTexture.queue(_handle); } - void free(FrameBufferHandle _handle) + bool free(FrameBufferHandle _handle) { - m_freeFrameBufferHandle[m_numFreeFrameBufferHandles] = _handle; - ++m_numFreeFrameBufferHandles; + return m_freeFrameBuffer.queue(_handle); } - void free(UniformHandle _handle) + bool free(UniformHandle _handle) { - m_freeUniformHandle[m_numFreeUniformHandles] = _handle; - ++m_numFreeUniformHandles; + return m_freeUniform.queue(_handle); } void resetFreeHandles() { - m_numFreeIndexBufferHandles = 0; - m_numFreeVertexDeclHandles = 0; - m_numFreeVertexBufferHandles = 0; - m_numFreeShaderHandles = 0; - m_numFreeProgramHandles = 0; - m_numFreeTextureHandles = 0; - m_numFreeFrameBufferHandles = 0; - m_numFreeUniformHandles = 0; + m_freeIndexBuffer.reset(); + m_freeVertexDecl.reset(); + m_freeVertexBuffer.reset(); + m_freeShader.reset(); + m_freeProgram.reset(); + m_freeTexture.reset(); + m_freeFrameBuffer.reset(); + m_freeUniform.reset(); } SortKey m_key; @@ -1869,24 +1844,71 @@ namespace bgfx CommandBuffer m_cmdPre; CommandBuffer m_cmdPost; - uint16_t m_numFreeIndexBufferHandles; - uint16_t m_numFreeVertexDeclHandles; - uint16_t m_numFreeVertexBufferHandles; - uint16_t m_numFreeShaderHandles; - uint16_t m_numFreeProgramHandles; - uint16_t m_numFreeTextureHandles; - uint16_t m_numFreeFrameBufferHandles; - uint16_t m_numFreeUniformHandles; - uint16_t m_numFreeWindowHandles; - - IndexBufferHandle m_freeIndexBufferHandle[BGFX_CONFIG_MAX_INDEX_BUFFERS]; - VertexDeclHandle m_freeVertexDeclHandle[BGFX_CONFIG_MAX_VERTEX_DECLS]; - VertexBufferHandle m_freeVertexBufferHandle[BGFX_CONFIG_MAX_VERTEX_BUFFERS]; - ShaderHandle m_freeShaderHandle[BGFX_CONFIG_MAX_SHADERS]; - ProgramHandle m_freeProgramHandle[BGFX_CONFIG_MAX_PROGRAMS]; - TextureHandle m_freeTextureHandle[BGFX_CONFIG_MAX_TEXTURES]; - FrameBufferHandle m_freeFrameBufferHandle[BGFX_CONFIG_MAX_FRAME_BUFFERS]; - UniformHandle m_freeUniformHandle[BGFX_CONFIG_MAX_UNIFORMS]; + template<typename Ty, uint32_t Max> + struct FreeHandle + { + FreeHandle() + : m_num(0) + { + } + + bool isQueued(Ty _handle) + { + for (uint32_t ii = 0, num = m_num; ii < num; ++ii) + { + if (m_queue[ii].idx == _handle.idx) + { + return true; + } + } + + return false; + } + + bool queue(Ty _handle) + { + if (BX_ENABLED(BGFX_CONFIG_DEBUG) ) + { + if (isQueued(_handle) ) + { + return false; + } + } + + m_queue[m_num] = _handle; + ++m_num; + + return true; + } + + void reset() + { + m_num = 0; + } + + Ty get(uint16_t _idx) const + { + return m_queue[_idx]; + } + + uint16_t getNumQueued() const + { + return m_num; + } + + Ty m_queue[Max]; + uint16_t m_num; + }; + + FreeHandle<IndexBufferHandle, BGFX_CONFIG_MAX_INDEX_BUFFERS> m_freeIndexBuffer; + FreeHandle<VertexDeclHandle, BGFX_CONFIG_MAX_VERTEX_DECLS> m_freeVertexDecl; + FreeHandle<VertexBufferHandle, BGFX_CONFIG_MAX_VERTEX_BUFFERS> m_freeVertexBuffer; + FreeHandle<ShaderHandle, BGFX_CONFIG_MAX_SHADERS> m_freeShader; + FreeHandle<ProgramHandle, BGFX_CONFIG_MAX_PROGRAMS> m_freeProgram; + FreeHandle<TextureHandle, BGFX_CONFIG_MAX_TEXTURES> m_freeTexture; + FreeHandle<FrameBufferHandle, BGFX_CONFIG_MAX_FRAME_BUFFERS> m_freeFrameBuffer; + FreeHandle<UniformHandle, BGFX_CONFIG_MAX_UNIFORMS> m_freeUniform; + TextVideoMem* m_textVideoMem; HMD m_hmd; Stats m_perfStats; @@ -2187,14 +2209,15 @@ namespace bgfx BGFX_API_FUNC(void reset(uint32_t _width, uint32_t _height, uint32_t _flags) ) { - BX_WARN(1 <= int32_t(_width) - && 1 <= int32_t(_height) - , "Frame buffer resolution width or height cannot be 0 (width %d, height %d)." + BX_WARN(g_caps.limits.maxTextureSize >= _width + && g_caps.limits.maxTextureSize >= _height + , "Frame buffer resolution width or height can't be larger than limits.maxTextureSize %d (width %d, height %d)." + , g_caps.limits.maxTextureSize , _width , _height ); - m_resolution.m_width = bx::uint32_imax(1, _width); - m_resolution.m_height = bx::uint32_imax(1, _height); + m_resolution.m_width = bx::uint32_min(g_caps.limits.maxTextureSize, _width); + m_resolution.m_height = bx::uint32_min(g_caps.limits.maxTextureSize, _height); m_resolution.m_flags = 0 | _flags | (g_platformDataChangedSinceReset ? BGFX_RESET_INTERNAL_FORCE : 0) @@ -2255,7 +2278,14 @@ namespace bgfx BGFX_API_FUNC(const Stats* getPerfStats() ) { - return &m_submit->m_perfStats; + Stats& stats = m_submit->m_perfStats; + const Resolution& resolution = m_submit->m_resolution; + stats.width = uint16_t(resolution.m_width); + stats.height = uint16_t(resolution.m_height); + const TextVideoMem* tvm = m_submit->m_textVideoMem; + stats.textWidth = tvm->m_width; + stats.textHeight = tvm->m_height; + return &stats; } BGFX_API_FUNC(IndexBufferHandle createIndexBuffer(const Memory* _mem, uint16_t _flags) ) @@ -2277,10 +2307,11 @@ namespace bgfx BGFX_API_FUNC(void destroyIndexBuffer(IndexBufferHandle _handle) ) { BGFX_CHECK_HANDLE("destroyIndexBuffer", m_indexBufferHandle, _handle); + bool ok = m_submit->free(_handle); BX_UNUSED(ok); + BX_CHECK(ok, "Index buffer handle %d is already destroyed!", _handle.idx); CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::DestroyIndexBuffer); cmdbuf.write(_handle); - m_submit->free(_handle); } VertexDeclHandle findVertexDecl(const VertexDecl& _decl) @@ -2324,10 +2355,11 @@ namespace bgfx BGFX_API_FUNC(void destroyVertexBuffer(VertexBufferHandle _handle) ) { BGFX_CHECK_HANDLE("destroyVertexBuffer", m_vertexBufferHandle, _handle); + bool ok = m_submit->free(_handle); BX_UNUSED(ok); + BX_CHECK(ok, "Vertex buffer handle %d is already destroyed!", _handle.idx); CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::DestroyVertexBuffer); cmdbuf.write(_handle); - m_submit->free(_handle); } void destroyVertexBufferInternal(VertexBufferHandle _handle) @@ -2659,14 +2691,14 @@ namespace bgfx m_dynamicVertexBufferHandle.free(_handle.idx); } - BGFX_API_FUNC(bool checkAvailTransientIndexBuffer(uint32_t _num) const) + BGFX_API_FUNC(uint32_t getAvailTransientIndexBuffer(uint32_t _num) const) { - return m_submit->checkAvailTransientIndexBuffer(_num); + return m_submit->getAvailTransientIndexBuffer(_num); } - BGFX_API_FUNC(bool checkAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride) const) + BGFX_API_FUNC(uint32_t getAvailTransientVertexBuffer(uint32_t _num, uint16_t _stride) const) { - return m_submit->checkAvailTransientVertexBuffer(_num, _stride); + return m_submit->getAvailTransientVertexBuffer(_num, _stride); } TransientIndexBuffer* createTransientIndexBuffer(uint32_t _size) @@ -2983,9 +3015,11 @@ namespace bgfx int32_t refs = --sr.m_refCount; if (0 == refs) { + bool ok = m_submit->free(_handle); BX_UNUSED(ok); + BX_CHECK(ok, "Shader handle %d is already destroyed!", _handle.idx); + CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::DestroyShader); cmdbuf.write(_handle); - m_submit->free(_handle); if (0 != sr.m_num) { @@ -3065,7 +3099,7 @@ namespace bgfx { if (!isValid(_vsh) ) { - BX_WARN(false, "Vertex/fragment shader is invalid (vsh %d).", _vsh.idx); + BX_WARN(false, "Compute shader is invalid (vsh %d).", _vsh.idx); ProgramHandle invalid = BGFX_INVALID_HANDLE; return invalid; } @@ -3118,9 +3152,11 @@ namespace bgfx int32_t refs = --pr.m_refCount; if (0 == refs) { + bool ok = m_submit->free(_handle); BX_UNUSED(ok); + BX_CHECK(ok, "Program handle %d is already destroyed!", _handle.idx); + CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::DestroyProgram); cmdbuf.write(_handle); - m_submit->free(_handle); shaderDecRef(pr.m_vsh); uint32_t hash = pr.m_vsh.idx; @@ -3216,17 +3252,6 @@ namespace bgfx return m_frames + 2; } - BGFX_API_FUNC(uint32_t readTexture(FrameBufferHandle _handle, uint8_t _attachment, void* _data) ) - { - const FrameBufferRef& ref = m_frameBufferRef[_handle.idx]; - BX_CHECK(!ref.m_window, "Can't sample window frame buffer."); - - TextureHandle textureHandle = ref.un.m_th[_attachment]; - BGFX_CHECK_HANDLE("readTexture", m_textureHandle, textureHandle); - - return readTexture(textureHandle, _data,0); - } - void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips) { const TextureRef& textureRef = m_textureRef[_handle.idx]; @@ -3271,9 +3296,11 @@ namespace bgfx int32_t refs = --ref.m_refCount; if (0 == refs) { + bool ok = m_submit->free(_handle); BX_UNUSED(ok); + BX_CHECK(ok, "Texture handle %d is already destroyed!", _handle.idx); + CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::DestroyTexture); cmdbuf.write(_handle); - m_submit->free(_handle); } } @@ -3400,13 +3427,29 @@ namespace bgfx return handle; } + BGFX_API_FUNC(TextureHandle getTexture(FrameBufferHandle _handle, uint8_t _attachment) ) + { + BGFX_CHECK_HANDLE("getTexture", m_frameBufferHandle, _handle); + + const FrameBufferRef& ref = m_frameBufferRef[_handle.idx]; + if (!ref.m_window) + { + uint32_t attachment = bx::uint32_min(_attachment, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS); + return ref.un.m_th[attachment]; + } + + TextureHandle invalid = BGFX_INVALID_HANDLE; + return invalid; + } + BGFX_API_FUNC(void destroyFrameBuffer(FrameBufferHandle _handle) ) { BGFX_CHECK_HANDLE("destroyFrameBuffer", m_frameBufferHandle, _handle); + bool ok = m_submit->free(_handle); BX_UNUSED(ok); + BX_CHECK(ok, "Frame buffer handle %d is already destroyed!", _handle.idx); CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::DestroyFrameBuffer); cmdbuf.write(_handle); - m_submit->free(_handle); FrameBufferRef& ref = m_frameBufferRef[_handle.idx]; if (!ref.m_window) @@ -3495,6 +3538,16 @@ namespace bgfx return handle; } + BGFX_API_FUNC(void getUniformInfo(UniformHandle _handle, UniformInfo& _info) ) + { + BGFX_CHECK_HANDLE("getUniformInfo", m_uniformHandle, _handle); + + UniformRef& uniform = m_uniformRef[_handle.idx]; + bx::strlcpy(_info.name, uniform.m_name.getPtr(), sizeof(_info.name) ); + _info.type = uniform.m_type; + _info.num = uniform.m_num; + } + BGFX_API_FUNC(void destroyUniform(UniformHandle _handle) ) { BGFX_CHECK_HANDLE("destroyUniform", m_uniformHandle, _handle); @@ -3505,12 +3558,14 @@ namespace bgfx if (0 == refs) { + bool ok = m_submit->free(_handle); BX_UNUSED(ok); + BX_CHECK(ok, "Uniform handle %d is already destroyed!", _handle.idx); + uniform.m_name.clear(); m_uniformHashMap.removeByHandle(_handle.idx); CommandBuffer& cmdbuf = getCommandBuffer(CommandBuffer::DestroyUniform); cmdbuf.write(_handle); - m_submit->free(_handle); } } @@ -3668,15 +3723,15 @@ namespace bgfx setViewScissor(_id, 0, 0, 0, 0); setViewClear(_id, BGFX_CLEAR_NONE, 0, 0.0f, 0); setViewSeq(_id, false); - bgfx::FrameBufferHandle invalid = BGFX_INVALID_HANDLE; + FrameBufferHandle invalid = BGFX_INVALID_HANDLE; setViewFrameBuffer(_id, invalid); setViewTransform(_id, NULL, NULL, BGFX_VIEW_NONE, NULL); } - BGFX_API_FUNC(void setViewRemap(uint8_t _id, uint8_t _num, const void* _remap) ) + BGFX_API_FUNC(void setViewOrder(uint8_t _id, uint8_t _num, const void* _order) ) { const uint32_t num = bx::uint32_min(_id + _num, BGFX_CONFIG_MAX_VIEWS) - _id; - if (NULL == _remap) + if (NULL == _order) { for (uint32_t ii = 0; ii < num; ++ii) { @@ -3686,7 +3741,7 @@ namespace bgfx } else { - memcpy(&m_viewRemap[_id], _remap, num); + memcpy(&m_viewRemap[_id], _order, num); } } @@ -3823,21 +3878,6 @@ namespace bgfx m_submit->setTexture(_stage, _sampler, _handle, _flags); } - BGFX_API_FUNC(void setTexture(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, uint32_t _flags) ) - { - BGFX_CHECK_HANDLE_INVALID_OK("setTexture/FrameBufferHandle", m_frameBufferHandle, _handle); - TextureHandle textureHandle = BGFX_INVALID_HANDLE; - if (isValid(_handle) ) - { - const FrameBufferRef& ref = m_frameBufferRef[_handle.idx]; - BX_CHECK(!ref.m_window, "Can't sample window frame buffer."); - textureHandle = ref.un.m_th[_attachment]; - BX_CHECK(isValid(textureHandle), "Frame buffer texture %d is invalid.", _attachment); - } - - m_submit->setTexture(_stage, _sampler, textureHandle, _flags); - } - BGFX_API_FUNC(uint32_t submit(uint8_t _id, ProgramHandle _program, OcclusionQueryHandle _occlusionQuery, int32_t _depth, bool _preserveState) ) { BGFX_CHECK_HANDLE_INVALID_OK("submit", m_programHandle, _program); @@ -3915,20 +3955,6 @@ namespace bgfx m_submit->setImage(_stage, _sampler, _handle, _mip, _access, _format); } - BGFX_API_FUNC(void setImage(uint8_t _stage, UniformHandle _sampler, FrameBufferHandle _handle, uint8_t _attachment, Access::Enum _access, TextureFormat::Enum _format) ) - { - TextureHandle textureHandle = BGFX_INVALID_HANDLE; - if (isValid(_handle) ) - { - const FrameBufferRef& ref = m_frameBufferRef[_handle.idx]; - BX_CHECK(!ref.m_window, "Can't sample window frame buffer."); - textureHandle = ref.un.m_th[_attachment]; - BX_CHECK(isValid(textureHandle), "Frame buffer texture %d is invalid.", _attachment); - } - - setImage(_stage, _sampler, textureHandle, 0, _access, _format); - } - BGFX_API_FUNC(uint32_t dispatch(uint8_t _id, ProgramHandle _handle, uint16_t _numX, uint16_t _numY, uint16_t _numZ, uint8_t _flags) ) { if (BX_ENABLED(BGFX_CONFIG_DEBUG_UNIFORM) ) @@ -3969,15 +3995,6 @@ namespace bgfx m_submit->blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, _src, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth); } - BGFX_API_FUNC(void blit(uint8_t _id, TextureHandle _dst, uint8_t _dstMip, uint16_t _dstX, uint16_t _dstY, uint16_t _dstZ, FrameBufferHandle _src, uint8_t _attachment, uint8_t _srcMip, uint16_t _srcX, uint16_t _srcY, uint16_t _srcZ, uint16_t _width, uint16_t _height, uint16_t _depth) ) - { - const FrameBufferRef& ref = m_frameBufferRef[_src.idx]; - BX_CHECK(!ref.m_window, "Can't sample window frame buffer."); - TextureHandle textureHandle = ref.un.m_th[_attachment]; - BX_CHECK(isValid(textureHandle), "Frame buffer texture %d is invalid.", _attachment); - blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, textureHandle, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth); - } - BGFX_API_FUNC(uint32_t frame(bool _capture = false) ); void dumpViewStats(); @@ -3993,7 +4010,7 @@ namespace bgfx void rendererExecCommands(CommandBuffer& _cmdbuf); #if BGFX_CONFIG_MULTITHREADED - void gameSemPost() + void apiSemPost() { if (!m_singleThreaded) { @@ -4046,7 +4063,7 @@ namespace bgfx bx::Semaphore m_apiSem; bx::Thread m_thread; #else - void gameSemPost() + void apiSemPost() { } @@ -4188,6 +4205,7 @@ namespace bgfx bool m_exit; bool m_flipAfterRender; bool m_singleThreaded; + bool m_flipped; typedef UpdateBatchT<256> TextureUpdateBatch; BX_ALIGN_DECL_CACHE_LINE(TextureUpdateBatch m_textureUpdateBatch); |