diff options
Diffstat (limited to '3rdparty/bgfx/src/renderer.h')
-rw-r--r-- | 3rdparty/bgfx/src/renderer.h | 149 |
1 files changed, 64 insertions, 85 deletions
diff --git a/3rdparty/bgfx/src/renderer.h b/3rdparty/bgfx/src/renderer.h index ef45002a7a0..b62c485bc20 100644 --- a/3rdparty/bgfx/src/renderer.h +++ b/3rdparty/bgfx/src/renderer.h @@ -1,6 +1,6 @@ /* - * Copyright 2011-2018 Branimir Karadzic. All rights reserved. - * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause + * Copyright 2011-2022 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE */ #ifndef BGFX_RENDERER_H_HEADER_GUARD @@ -10,6 +10,23 @@ namespace bgfx { + inline constexpr uint32_t toAbgr8(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t _a = 0xff) + { + return 0 + | (uint32_t(_r)<<24) + | (uint32_t(_g)<<16) + | (uint32_t(_b)<< 8) + | (uint32_t(_a) ) + ; + } + + constexpr uint32_t kColorFrame = toAbgr8(0xff, 0xd7, 0xc9); + constexpr uint32_t kColorView = toAbgr8(0xe4, 0xb4, 0x8e); + constexpr uint32_t kColorDraw = toAbgr8(0xc6, 0xe5, 0xb9); + constexpr uint32_t kColorCompute = toAbgr8(0xa7, 0xdb, 0xd8); + constexpr uint32_t kColorMarker = toAbgr8(0xff, 0x00, 0x00); + constexpr uint32_t kColorResource = toAbgr8(0xff, 0x40, 0x20); + struct BlitState { BlitState(const Frame* _frame) @@ -47,82 +64,44 @@ namespace bgfx { } - ViewState(Frame* _frame, bool _stereo) + ViewState(Frame* _frame) { - reset(_frame, _stereo); + reset(_frame); } - void reset(Frame* _frame, bool _stereo) + void reset(Frame* _frame) { m_alphaRef = 0.0f; m_invViewCached = UINT16_MAX; m_invProjCached = UINT16_MAX; m_invViewProjCached = UINT16_MAX; - m_view[0] = m_viewTmp[0]; - m_view[1] = m_viewTmp[1]; - - if (_stereo) - { - m_view[0] = m_viewTmp[0]; - Matrix4 viewAdjust; - bx::mtxIdentity(viewAdjust.un.val); - - for (uint32_t eye = 0; eye < 2; ++eye) - { -/* - const HMD::Eye& hmdEye = hmd.eye[eye]; - viewAdjust.un.val[12] = hmdEye.viewOffset[0]; - viewAdjust.un.val[13] = hmdEye.viewOffset[1]; - viewAdjust.un.val[14] = hmdEye.viewOffset[2]; + m_view = m_viewTmp; - for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) - { - if (BGFX_VIEW_STEREO == (_frame->m_view[ii].m_flags & BGFX_VIEW_STEREO) ) - { - bx::float4x4_mul(&m_view[eye][ii].un.f4x4 - , &_frame->m_view[ii].m_view.un.f4x4 - , &viewAdjust.un.f4x4 - ); - } - else - { - bx::memCopy(&m_view[0][ii].un.f4x4, &_frame->m_view[ii].m_view.un.f4x4, sizeof(Matrix4) ); - } - } -*/ - } - } - else + for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) { - for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) - { - bx::memCopy(&m_view[0][ii].un.f4x4, &_frame->m_view[ii].m_view.un.f4x4, sizeof(Matrix4) ); - } + bx::memCopy(&m_view[ii].un.f4x4, &_frame->m_view[ii].m_view.un.f4x4, sizeof(Matrix4) ); } for (uint32_t ii = 0; ii < BGFX_CONFIG_MAX_VIEWS; ++ii) { - for (uint32_t eye = 0; eye < uint32_t(_stereo)+1; ++eye) - { - bx::float4x4_mul(&m_viewProj[eye][ii].un.f4x4 - , &m_view[eye][ii].un.f4x4 - , &_frame->m_view[ii].m_proj[eye].un.f4x4 - ); - } + bx::float4x4_mul(&m_viewProj[ii].un.f4x4 + , &m_view[ii].un.f4x4 + , &_frame->m_view[ii].m_proj.un.f4x4 + ); } } template<uint16_t mtxRegs, typename RendererContext, typename Program, typename Draw> - void setPredefined(RendererContext* _renderer, uint16_t _view, uint8_t _eye, const Program& _program, const Frame* _frame, const Draw& _draw) + void setPredefined(RendererContext* _renderer, uint16_t _view, const Program& _program, const Frame* _frame, const Draw& _draw) { const FrameCache& frameCache = _frame->m_frameCache; for (uint32_t ii = 0, num = _program.m_numPredefined; ii < num; ++ii) { const PredefinedUniform& predefined = _program.m_predefined[ii]; - uint8_t flags = predefined.m_type&BGFX_UNIFORM_FRAGMENTBIT; - switch (predefined.m_type&(~BGFX_UNIFORM_FRAGMENTBIT) ) + uint8_t flags = predefined.m_type&kUniformFragmentBit; + switch (predefined.m_type&(~kUniformFragmentBit) ) { case PredefinedUniform::ViewRect: { @@ -158,7 +137,7 @@ namespace bgfx { _renderer->setShaderUniform4x4f(flags , predefined.m_loc - , m_view[_eye][_view].un.val + , m_view[_view].un.val , bx::uint32_min(mtxRegs, predefined.m_count) ); } @@ -166,12 +145,11 @@ namespace bgfx case PredefinedUniform::InvView: { - uint16_t viewEye = (_view << 1) | _eye; - if (viewEye != m_invViewCached) + if (_view != m_invViewCached) { - m_invViewCached = viewEye; + m_invViewCached = _view; bx::float4x4_inverse(&m_invView.un.f4x4 - , &m_view[_eye][_view].un.f4x4 + , &m_view[_view].un.f4x4 ); } @@ -187,7 +165,7 @@ namespace bgfx { _renderer->setShaderUniform4x4f(flags , predefined.m_loc - , _frame->m_view[_view].m_proj[_eye].un.val + , _frame->m_view[_view].m_proj.un.val , bx::uint32_min(mtxRegs, predefined.m_count) ); } @@ -195,12 +173,11 @@ namespace bgfx case PredefinedUniform::InvProj: { - uint16_t viewEye = (_view << 1) | _eye; - if (viewEye != m_invProjCached) + if (_view != m_invProjCached) { - m_invProjCached = viewEye; + m_invProjCached = _view; bx::float4x4_inverse(&m_invProj.un.f4x4 - , &_frame->m_view[_view].m_proj[_eye].un.f4x4 + , &_frame->m_view[_view].m_proj.un.f4x4 ); } @@ -216,7 +193,7 @@ namespace bgfx { _renderer->setShaderUniform4x4f(flags , predefined.m_loc - , m_viewProj[_eye][_view].un.val + , m_viewProj[_view].un.val , bx::uint32_min(mtxRegs, predefined.m_count) ); } @@ -224,12 +201,11 @@ namespace bgfx case PredefinedUniform::InvViewProj: { - uint16_t viewEye = (_view << 1) | _eye; - if (viewEye != m_invViewProjCached) + if (_view != m_invViewProjCached) { - m_invViewProjCached = viewEye; + m_invViewProjCached = _view; bx::float4x4_inverse(&m_invViewProj.un.f4x4 - , &m_viewProj[_eye][_view].un.f4x4 + , &m_viewProj[_view].un.f4x4 ); } @@ -256,9 +232,9 @@ namespace bgfx { Matrix4 modelView; const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix]; - bx::float4x4_mul(&modelView.un.f4x4 + bx::model4x4_mul(&modelView.un.f4x4 , &model.un.f4x4 - , &m_view[_eye][_view].un.f4x4 + , &m_view[_view].un.f4x4 ); _renderer->setShaderUniform4x4f(flags , predefined.m_loc @@ -272,9 +248,9 @@ namespace bgfx { Matrix4 modelViewProj; const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix]; - bx::float4x4_mul(&modelViewProj.un.f4x4 + bx::model4x4_mul_viewproj4x4(&modelViewProj.un.f4x4 , &model.un.f4x4 - , &m_viewProj[_eye][_view].un.f4x4 + , &m_viewProj[_view].un.f4x4 ); _renderer->setShaderUniform4x4f(flags , predefined.m_loc @@ -295,15 +271,15 @@ namespace bgfx break; default: - BX_CHECK(false, "predefined %d not handled", predefined.m_type); + BX_ASSERT(false, "predefined %d not handled", predefined.m_type); break; } } } - Matrix4 m_viewTmp[2][BGFX_CONFIG_MAX_VIEWS]; - Matrix4 m_viewProj[2][BGFX_CONFIG_MAX_VIEWS]; - Matrix4* m_view[2]; + Matrix4 m_viewTmp[BGFX_CONFIG_MAX_VIEWS]; + Matrix4 m_viewProj[BGFX_CONFIG_MAX_VIEWS]; + Matrix4* m_view; Rect m_rect; Matrix4 m_invView; Matrix4 m_invProj; @@ -328,7 +304,7 @@ namespace bgfx handle = m_alloc.alloc(); } - BX_CHECK(UINT16_MAX != handle, "Failed to find handle."); + BX_ASSERT(UINT16_MAX != handle, "Failed to find handle."); Data& data = m_data[handle]; data.m_hash = _key; @@ -336,7 +312,7 @@ namespace bgfx data.m_parent = _parent; m_hashMap.insert(stl::make_pair(_key, handle) ); - return &m_data[handle].m_value; + return bx::addressOf(m_data[handle].m_value); } Ty* find(uint64_t _key) @@ -346,7 +322,7 @@ namespace bgfx { uint16_t handle = it->second; m_alloc.touch(handle); - return &m_data[handle].m_value; + return bx::addressOf(m_data[handle].m_value); } return NULL; @@ -481,11 +457,12 @@ namespace bgfx return true; } - for (uint32_t idx = 0, streamMask = _new.m_streamMask, ntz = bx::uint32_cnttz(streamMask) + for (uint32_t idx = 0, streamMask = _new.m_streamMask ; 0 != streamMask - ; streamMask >>= 1, idx += 1, ntz = bx::uint32_cnttz(streamMask) + ; streamMask >>= 1, idx += 1 ) { + const uint32_t ntz = bx::uint32_cnttz(streamMask); streamMask >>= ntz; idx += ntz; @@ -522,9 +499,9 @@ namespace bgfx if (m_enabled) { ViewStats& viewStats = m_frame->m_perfStats.viewStats[m_numViews]; - viewStats.cpuTimeElapsed = -bx::getHPCounter(); + viewStats.cpuTimeBegin = bx::getHPCounter(); - m_queryIdx = m_gpuTimer.begin(_view); + m_queryIdx = m_gpuTimer.begin(_view, m_frame->m_frameNum); viewStats.view = ViewId(_view); bx::strCopy(viewStats.name @@ -544,8 +521,10 @@ namespace bgfx ViewStats& viewStats = m_frame->m_perfStats.viewStats[m_numViews]; const typename Ty::Result& result = m_gpuTimer.m_result[viewStats.view]; - viewStats.cpuTimeElapsed += bx::getHPCounter(); - viewStats.gpuTimeElapsed = result.m_end - result.m_begin; + viewStats.cpuTimeEnd = bx::getHPCounter(); + viewStats.gpuTimeBegin = result.m_begin; + viewStats.gpuTimeEnd = result.m_end; + viewStats.gpuFrameNum = result.m_frameNum; ++m_numViews; m_queryIdx = UINT32_MAX; |