summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/bgfx/src/renderer.h
diff options
context:
space:
mode:
author Julian Sikorski <belegdol+github@gmail.com>2019-10-13 13:50:38 +0200
committer R. Belmont <rb6502@users.noreply.github.com>2019-10-13 07:50:38 -0400
commit0837e7451a84f95c29dbdb9bd6b8b931fee1635d (patch)
tree626bcbd250a7fbebdf5958a288d2f438d4f9fb5a /3rdparty/bgfx/src/renderer.h
parentc913ccb59d713ce0b91135520719ac5385e54358 (diff)
WIP: sync bgfx, bx and bimg with latest upstream (#5723)
* Sync with bgfx upstream revision b91d0b6 * Sync with bx upstream revision d60912b * Sync with bimg upstream revision bd81f60 * Add astc-codec decoder * Rename VertexDecl to VertexLayout * Rename UniformType enum Int1 to Sampler. * Add NVN stub * Fix unused-const-variable error on macOS * Drop redundant explicit language parameters buildoptions_cpp are only applied to c++ files and buildoptions_objcpp are only applied to objective c++ files. As such, hardcoding -x offers no benefit while preventing overrides (such as one needed by 3rdparty/bgfx/src/renderer_vk.cpp on macOS) from working. * Re-introduce -x c++ in places where C code is compiled as C++ to prevent clang from throwing a warning * Build bgfx as Objective-C++ on macOS It is needed due to included headers * Enable Direct3D12 and Vulkan bgfx rendering backends * Enable building of spirv shaders * Properly escape /c in cmd call * Comment out dx12 bgfx renderer * Honor VERBOSE setting during shaders build * Only invert hlsl shader XYZ_TO_sRGB matrix for opengl * Add spirv shaders * OpenGL ES needs transposed matrix too * Metal needs transposed matrix as well
Diffstat (limited to '3rdparty/bgfx/src/renderer.h')
-rw-r--r--3rdparty/bgfx/src/renderer.h121
1 files changed, 49 insertions, 72 deletions
diff --git a/3rdparty/bgfx/src/renderer.h b/3rdparty/bgfx/src/renderer.h
index ef45002a7a0..025c6f7e927 100644
--- a/3rdparty/bgfx/src/renderer.h
+++ b/3rdparty/bgfx/src/renderer.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2011-2018 Branimir Karadzic. All rights reserved.
+ * Copyright 2011-2019 Branimir Karadzic. All rights reserved.
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
@@ -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,74 +64,36 @@ 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;
@@ -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
);
}
@@ -258,7 +234,7 @@ namespace bgfx
const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix];
bx::float4x4_mul(&modelView.un.f4x4
, &model.un.f4x4
- , &m_view[_eye][_view].un.f4x4
+ , &m_view[_view].un.f4x4
);
_renderer->setShaderUniform4x4f(flags
, predefined.m_loc
@@ -274,7 +250,7 @@ namespace bgfx
const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix];
bx::float4x4_mul(&modelViewProj.un.f4x4
, &model.un.f4x4
- , &m_viewProj[_eye][_view].un.f4x4
+ , &m_viewProj[_view].un.f4x4
);
_renderer->setShaderUniform4x4f(flags
, predefined.m_loc
@@ -301,9 +277,9 @@ namespace bgfx
}
}
- 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;
@@ -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;