Replaced per-view sequence counter with render item index. (#4013)

This commit is contained in:
Branimir Karadžić
2026-10-01 21:52:42 -07:00
committed by GitHub
parent 8d4af17207
commit e4c9e10ca9
3 changed files with 8 additions and 15 deletions

View File

@@ -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(

View File

@@ -1391,6 +1391,7 @@ namespace bgfx
static constexpr uint64_t kSortKeyComputeProgramMask = uint64_t(BGFX_CONFIG_MAX_PROGRAMS-1)<<kSortKeyComputeProgramShift;
static_assert(BGFX_CONFIG_MAX_VIEWS <= (1<<kSortKeyViewNumBits) );
static_assert(BGFX_CONFIG_MAX_DRAW_CALLS <= (1<<BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ), "BGFX_CONFIG_MAX_DRAW_CALLS must fit into BGFX_CONFIG_SORT_KEY_NUM_BITS_SEQ bits.");
static_assert( (BGFX_CONFIG_MAX_PROGRAMS & (BGFX_CONFIG_MAX_PROGRAMS-1) ) == 0); // Must be power of 2.
static_assert( (0 // Render key mask shouldn't overlap.
| kSortKeyViewMask
@@ -7801,11 +7802,6 @@ namespace bgfx
BGFX_API_FUNC(uint32_t frame(uint8_t _flags = BGFX_FRAME_NONE) );
uint32_t getSeqIncr(ViewId _id)
{
return bx::atomicFetchAndAdd<uint32_t>(&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;

View File

@@ -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