From 28e18393420e1a4adbd41c80045961502f7cf3ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Wed, 18 Apr 2018 16:35:57 -0700 Subject: [PATCH] Added transient buffer stats. --- include/bgfx/bgfx.h | 8 +++++++- include/bgfx/c99/bgfx.h | 6 ++++++ include/bgfx/defines.h | 2 +- src/bgfx.cpp | 16 +++++++++++----- src/bgfx_p.h | 7 +++++-- tools/texturev/texturev.cpp | 2 ++ 6 files changed, 32 insertions(+), 9 deletions(-) diff --git a/include/bgfx/bgfx.h b/include/bgfx/bgfx.h index 334fccdfb..db16c7f34 100644 --- a/include/bgfx/bgfx.h +++ b/include/bgfx/bgfx.h @@ -600,7 +600,9 @@ namespace bgfx struct Limits { - uint16_t maxEncoders; //!< Maximum number of encoder threads. + uint16_t maxEncoders; //!< Maximum number of encoder threads. + uint32_t transientVbSize; //!< + uint32_t transientIbSize; //!< }; Limits limits; @@ -689,6 +691,8 @@ namespace bgfx uint32_t maxUniforms; //!< Maximum number of uniform handles. uint32_t maxOcclusionQueries; //!< Maximum number of occlusion query handles. uint32_t maxEncoders; //!< Maximum number of encoder threads. + uint32_t transientVbSize; //!< + uint32_t transientIbSize; //!< }; Limits limits; @@ -898,6 +902,8 @@ namespace bgfx int64_t textureMemoryUsed; //!< int64_t rtMemoryUsed; //!< + int32_t transientVbUsed; //!< + int32_t transientIbUsed; //!< int64_t gpuMemoryMax; //!< Maximum available GPU memory for application. int64_t gpuMemoryUsed; //!< Amount of GPU memory used by the application. diff --git a/include/bgfx/c99/bgfx.h b/include/bgfx/c99/bgfx.h index 67d7abf0a..623e26888 100644 --- a/include/bgfx/c99/bgfx.h +++ b/include/bgfx/c99/bgfx.h @@ -388,6 +388,8 @@ typedef struct bgfx_stats_s int64_t textureMemoryUsed; int64_t rtMemoryUsed; + int32_t transientVbUsed; + int32_t transientIbUsed; int64_t gpuMemoryMax; int64_t gpuMemoryUsed; @@ -512,6 +514,8 @@ typedef struct bgfx_caps_limits_s uint32_t maxUniforms; uint32_t maxOcclusionQueries; uint32_t maxEncoders; + uint32_t transientVbSize; + uint32_t transientIbSize; } bgfx_caps_limits_t; @@ -600,6 +604,8 @@ typedef struct bgfx_resolution_s typedef struct bgfx_init_limits_s { uint16_t maxEncoders; + uint32_t transientVbSize; + uint32_t transientIbSize; } bgfx_init_limits_t; diff --git a/include/bgfx/defines.h b/include/bgfx/defines.h index c0c67fdf9..ffe6a7cc6 100644 --- a/include/bgfx/defines.h +++ b/include/bgfx/defines.h @@ -6,7 +6,7 @@ #ifndef BGFX_DEFINES_H_HEADER_GUARD #define BGFX_DEFINES_H_HEADER_GUARD -#define BGFX_API_VERSION UINT32_C(66) +#define BGFX_API_VERSION UINT32_C(67) /// Color RGB/alpha/depth write. When it's not specified write will be disabled. #define BGFX_STATE_WRITE_R UINT64_C(0x0000000000000001) //!< Enable R write. diff --git a/src/bgfx.cpp b/src/bgfx.cpp index 30ca9a78b..a63ce42b8 100644 --- a/src/bgfx.cpp +++ b/src/bgfx.cpp @@ -1268,6 +1268,8 @@ namespace bgfx LIMITS(maxUniforms); LIMITS(maxOcclusionQueries); LIMITS(maxEncoders); + LIMITS(transientVbSize); + LIMITS(transientIbSize); #undef LIMITS BX_TRACE(""); @@ -1508,14 +1510,14 @@ namespace bgfx m_textVideoMemBlitter.init(); m_clearQuad.init(); - m_submit->m_transientVb = createTransientVertexBuffer(BGFX_CONFIG_TRANSIENT_VERTEX_BUFFER_SIZE); - m_submit->m_transientIb = createTransientIndexBuffer(BGFX_CONFIG_TRANSIENT_INDEX_BUFFER_SIZE); + m_submit->m_transientVb = createTransientVertexBuffer(_init.limits.transientVbSize); + m_submit->m_transientIb = createTransientIndexBuffer(_init.limits.transientIbSize); frame(); if (BX_ENABLED(BGFX_CONFIG_MULTITHREADED) ) { - m_submit->m_transientVb = createTransientVertexBuffer(BGFX_CONFIG_TRANSIENT_VERTEX_BUFFER_SIZE); - m_submit->m_transientIb = createTransientIndexBuffer(BGFX_CONFIG_TRANSIENT_INDEX_BUFFER_SIZE); + m_submit->m_transientVb = createTransientVertexBuffer(_init.limits.transientVbSize); + m_submit->m_transientIb = createTransientIndexBuffer(_init.limits.transientIbSize); frame(); } @@ -2777,7 +2779,9 @@ namespace bgfx , callback(NULL) , allocator(NULL) { - limits.maxEncoders = BGFX_CONFIG_DEFAULT_MAX_ENCODERS; + limits.maxEncoders = BGFX_CONFIG_DEFAULT_MAX_ENCODERS; + limits.transientVbSize = BGFX_CONFIG_TRANSIENT_VERTEX_BUFFER_SIZE; + limits.transientIbSize = BGFX_CONFIG_TRANSIENT_INDEX_BUFFER_SIZE; } bool init(const Init& _init) @@ -2855,6 +2859,8 @@ namespace bgfx g_caps.limits.maxOcclusionQueries = BGFX_CONFIG_MAX_OCCLUSION_QUERIES; g_caps.limits.maxFBAttachments = 1; g_caps.limits.maxEncoders = (0 != BGFX_CONFIG_MULTITHREADED) ? _init.limits.maxEncoders : 1; + g_caps.limits.transientVbSize = _init.limits.transientVbSize; + g_caps.limits.transientIbSize = _init.limits.transientIbSize; g_caps.vendorId = _init.vendorId; g_caps.deviceId = _init.deviceId; diff --git a/src/bgfx_p.h b/src/bgfx_p.h index fb444f737..52c0187d4 100644 --- a/src/bgfx_p.h +++ b/src/bgfx_p.h @@ -1835,6 +1835,9 @@ namespace bgfx void start() { + m_perfStats.transientVbUsed = m_vboffset; + m_perfStats.transientIbUsed = m_iboffset; + m_frameCache.reset(); m_numRenderItems = 0; m_numBlitItems = 0; @@ -1866,7 +1869,7 @@ namespace bgfx { uint32_t offset = bx::strideAlign(m_iboffset, sizeof(uint16_t) ); uint32_t iboffset = offset + _num*sizeof(uint16_t); - iboffset = bx::min(iboffset, BGFX_CONFIG_TRANSIENT_INDEX_BUFFER_SIZE); + iboffset = bx::min(iboffset, g_caps.limits.transientIbSize); uint32_t num = (iboffset-offset)/sizeof(uint16_t); return num; } @@ -1885,7 +1888,7 @@ namespace bgfx { uint32_t offset = bx::strideAlign(m_vboffset, _stride); uint32_t vboffset = offset + _num * _stride; - vboffset = bx::min(vboffset, BGFX_CONFIG_TRANSIENT_VERTEX_BUFFER_SIZE); + vboffset = bx::min(vboffset, g_caps.limits.transientVbSize); uint32_t num = (vboffset-offset)/_stride; return num; } diff --git a/tools/texturev/texturev.cpp b/tools/texturev/texturev.cpp index 4409f18d0..f51f09d10 100644 --- a/tools/texturev/texturev.cpp +++ b/tools/texturev/texturev.cpp @@ -236,6 +236,8 @@ struct View , m_inLinear(false) { load(); + + m_textureInfo.format = bgfx::TextureFormat::Count; } ~View()