From e4c9e10ca914aaaa032cab384f619e449bf43092 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Thu, 1 Oct 2026 21:52:42 -0700 Subject: [PATCH] Replaced per-view sequence counter with render item index. (#4013) --- src/bgfx.cpp | 14 ++++++-------- src/bgfx_p.h | 7 +------ src/config.h | 2 +- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/bgfx.cpp b/src/bgfx.cpp index 0aa581208..cb8d6b0ed 100644 --- a/src/bgfx.cpp +++ b/src/bgfx.cpp @@ -1591,15 +1591,15 @@ namespace bgfx SortKey::Enum type; switch (s_ctx->m_view[_id].m_mode) { - case ViewMode::Sequential: m_key.m_seq = s_ctx->getSeqIncr(_id); type = SortKey::SortSequence; break; - case ViewMode::DepthAscending: m_key.m_depth = _depth; type = SortKey::SortDepth; break; - case ViewMode::DepthDescending: m_key.m_depth = UINT32_MAX-_depth; type = SortKey::SortDepth; break; - default: m_key.m_depth = _depth; type = SortKey::SortProgram; break; + case ViewMode::Sequential: m_key.m_seq = renderItemIdx; type = SortKey::SortSequence; break; + case ViewMode::DepthAscending: m_key.m_depth = _depth; type = SortKey::SortDepth; break; + case ViewMode::DepthDescending: m_key.m_depth = UINT32_MAX-_depth; type = SortKey::SortDepth; break; + default: m_key.m_depth = _depth; type = SortKey::SortProgram; break; } uint64_t key = m_key.encodeDraw(type); - m_frame->m_sortKeys[renderItemIdx] = key; + m_frame->m_sortKeys [renderItemIdx] = key; m_frame->m_sortValues[renderItemIdx] = RenderItemCount(renderItemIdx); m_draw.m_uniformIdx = m_uniformIdx; @@ -1675,7 +1675,7 @@ namespace bgfx m_key.m_program = _handle; m_key.m_depth = 0; m_key.m_view = _id; - m_key.m_seq = s_ctx->getSeqIncr(_id); + m_key.m_seq = renderItemIdx; uint64_t key = m_key.encodeCompute(); m_frame->m_sortKeys[renderItemIdx] = key; @@ -2948,8 +2948,6 @@ namespace bgfx uint32_t nextFrameNum = m_render->m_frameNum + 1; m_submit->start(nextFrameNum); - bx::memSet(m_seq, 0, sizeof(m_seq) ); - if (BX_ENABLED(BGFX_CONFIG_DEBUG_TEXT) ) { m_submit->m_textVideoMem->resize( diff --git a/src/bgfx_p.h b/src/bgfx_p.h index d8e2318a6..d71aeb28d 100644 --- a/src/bgfx_p.h +++ b/src/bgfx_p.h @@ -1391,6 +1391,7 @@ namespace bgfx static constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRAMS-1)<(&m_seq[_id], 1); - } - void dumpViewStats(); void freeDynamicBuffers(); void freeAllHandles(Frame* _frame); @@ -8002,7 +7998,6 @@ namespace bgfx VertexLayoutRef m_vertexLayoutRef; ViewId m_viewRemap[BGFX_CONFIG_MAX_VIEWS]; - uint32_t m_seq[BGFX_CONFIG_MAX_VIEWS]; View m_view[BGFX_CONFIG_MAX_VIEWS]; UniformCache m_uniformCache; diff --git a/src/config.h b/src/config.h index 796afd414..82b76313f 100644 --- a/src/config.h +++ b/src/config.h @@ -370,7 +370,7 @@ #endif // BGFX_CONFIG_SORT_KEY_NUM_BITS_DEPTH /// Number of bits used for sequence number in the sort key. Default is 20. -/// Determines maximum draw calls per view in sequential mode (2^20 = ~1M). +/// Determines maximum BGFX_CONFIG_MAX_DRAW_CALLS (2^20 = ~1M). #ifndef BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ # define BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ 20 #endif // BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ