This commit is contained in:
Branimir Karadžić
2026-10-20 05:40:40 +00:00
committed by GitHub
parent 1a1e3113d3
commit d8d6acd94b
9 changed files with 53 additions and 80 deletions
+13 -11
View File
@@ -1637,9 +1637,9 @@ namespace bgfx
if (UINT32_MAX != m_draw.m_streamMask)
{
uint32_t numVertices = UINT32_MAX;
for (BitMaskToIndexIteratorT it(m_draw.m_streamMask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT it(m_draw.m_streamMask); !it.isDone(); it.next() )
{
numVertices = bx::min(numVertices, m_numVertices[it.idx]);
numVertices = bx::min(numVertices, m_numVertices[it.getIndex()]);
}
m_draw.m_numVertices = numVertices;
@@ -1664,11 +1664,12 @@ namespace bgfx
if (0 != (m_dynamicMask & kDynamicStreamMask) )
{
numVertices = UINT32_MAX;
for (BitMaskToIndexIteratorT it(m_draw.m_streamMask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT it(m_draw.m_streamMask); !it.isDone(); it.next() )
{
const uint32_t tmp0 = 0 != (m_dynamicMask & (UINT32_C(1)<<it.idx) )
? m_dynamicNumVertices[it.idx]
: m_numVertices[it.idx]
const uint8_t idx = it.getIndex();
const uint32_t tmp0 = 0 != (m_dynamicMask & (UINT32_C(1)<<idx) )
? m_dynamicNumVertices[idx]
: m_numVertices[idx]
;
numVertices = bx::min(numVertices, tmp0);
}
@@ -3142,13 +3143,14 @@ namespace bgfx
{
uint32_t numVertices = ref.numVertices;
for (BitMaskToIndexIteratorT it(ref.mask & kDynamicStreamMask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT it(ref.mask & kDynamicStreamMask); !it.isDone(); it.next() )
{
const DynamicVertexBuffer& dvb = m_dynamicVertexBuffers[ref.handle[it.idx] ];
Stream& stream = draw.m_stream[it.idx];
stream.m_startVertex = dvb.m_startVertex + ref.start[it.idx];
const uint8_t idx = it.getIndex();
const DynamicVertexBuffer& dvb = m_dynamicVertexBuffers[ref.handle[idx] ];
Stream& stream = draw.m_stream[idx];
stream.m_startVertex = dvb.m_startVertex + ref.start[idx];
stream.m_handle = dvb.m_handle;
numVertices = bx::min(numVertices, bx::satSub(dvb.m_numVertices, ref.start[it.idx]) );
numVertices = bx::min(numVertices, bx::satSub(dvb.m_numVertices, ref.start[idx]) );
}
draw.m_numVertices = numVertices;
+8 -37
View File
@@ -975,37 +975,6 @@ namespace bgfx
uint32_t m_values[maxKeys];
};
template<typename MaskT>
struct BitMaskToIndexIteratorT
{
BitMaskToIndexIteratorT(MaskT _mask)
: mask(0)
, idx(0)
{
const uint8_t ntz = bx::countTrailingZeros<MaskT>(_mask);
mask = 0 == _mask ? MaskT(0) : MaskT(_mask >> ntz);
idx = ntz;
}
void next()
{
mask = MaskT(mask >> 1);
idx += 1;
const uint8_t ntz = bx::countTrailingZeros<MaskT>(mask);
mask = 0 == mask ? MaskT(0) : MaskT(mask >> ntz);
idx += ntz;
}
bool isDone() const
{
return 0 == mask;
}
MaskT mask;
uint8_t idx;
};
struct ClearQuad
{
ClearQuad()
@@ -2632,9 +2601,9 @@ namespace bgfx
murmur.add(_mask);
for (BitMaskToIndexIteratorT<uint32_t> it(_mask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT<uint32_t> it(_mask); !it.isDone(); it.next() )
{
murmur.add(_bind[it.idx]);
murmur.add(_bind[it.getIndex()]);
}
return murmur.end();
@@ -2657,9 +2626,11 @@ namespace bgfx
return false;
}
for (BitMaskToIndexIteratorT<uint32_t> it(mask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT<uint32_t> it(mask); !it.isDone(); it.next() )
{
if (0 != bx::memCmp(&_lhs[it.idx], &_rhs[it.idx], sizeof(Binding) ) )
const uint8_t idx = it.getIndex();
if (0 != bx::memCmp(&_lhs[idx], &_rhs[idx], sizeof(Binding) ) )
{
return false;
}
@@ -2700,9 +2671,9 @@ namespace bgfx
{
if (0 != (_flags & BGFX_DISCARD_BINDINGS) )
{
for (BitMaskToIndexIteratorT<uint32_t> it(_mask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT<uint32_t> it(_mask); !it.isDone(); it.next() )
{
Binding& bind = m_bind[it.idx];
Binding& bind = m_bind[it.getIndex()];
bind.reset();
}
}
+2 -2
View File
@@ -1005,9 +1005,9 @@ namespace bgfx
if (UINT32_MAX != _new.m_streamMask)
{
for (BitMaskToIndexIteratorT it(_new.m_streamMask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT it(_new.m_streamMask); !it.isDone(); it.next() )
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
if (_current.m_stream[idx].m_handle.idx != _new.m_stream[idx].m_handle.idx
|| _current.m_stream[idx].m_startVertex != _new.m_stream[idx].m_startVertex
+2 -2
View File
@@ -7832,12 +7832,12 @@ namespace bgfx { namespace d3d11
if (UINT32_MAX != draw.m_streamMask)
{
for (BitMaskToIndexIteratorT it(draw.m_streamMask)
for (bx::BitMaskToIndexIteratorT it(draw.m_streamMask)
; !it.isDone()
; it.next(), numStreams++
)
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
currentState.m_stream[idx].m_layoutHandle = draw.m_stream[idx].m_layoutHandle;
currentState.m_stream[idx].m_handle = draw.m_stream[idx].m_handle;
+4 -4
View File
@@ -5979,12 +5979,12 @@ namespace bgfx { namespace d3d12
if (UINT32_MAX != _draw.m_streamMask)
{
for (BitMaskToIndexIteratorT it(_draw.m_streamMask)
for (bx::BitMaskToIndexIteratorT it(_draw.m_streamMask)
; !it.isDone()
; it.next(), numStreams++
)
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
const Stream& stream = _draw.m_stream[idx];
uint16_t handle = stream.m_handle.idx;
@@ -10441,12 +10441,12 @@ namespace bgfx { namespace d3d12
uint8_t numStreams = 0;
if (UINT32_MAX != draw.m_streamMask)
{
for (BitMaskToIndexIteratorT it(draw.m_streamMask)
for (bx::BitMaskToIndexIteratorT it(draw.m_streamMask)
; !it.isDone()
; it.next(), numStreams++
)
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
currentState.m_stream[idx].m_layoutHandle = draw.m_stream[idx].m_layoutHandle;
currentState.m_stream[idx].m_handle = draw.m_stream[idx].m_handle;
+6 -6
View File
@@ -9976,9 +9976,9 @@ namespace bgfx { namespace gl
{
if (UINT32_MAX != draw.m_streamMask)
{
for (BitMaskToIndexIteratorT it(draw.m_streamMask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT it(draw.m_streamMask); !it.isDone(); it.next() )
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
if (currentState.m_stream[idx].m_handle.idx != draw.m_stream[idx].m_handle.idx)
{
@@ -10052,9 +10052,9 @@ namespace bgfx { namespace gl
{
const uint8_t lastStream = uint8_t(31 - bx::countLeadingZeros<uint32_t>(draw.m_streamMask) );
for (BitMaskToIndexIteratorT it(draw.m_streamMask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT it(draw.m_streamMask); !it.isDone(); it.next() )
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
const VertexBufferGL& vb = m_vertexBuffers[draw.m_stream[idx].m_handle.idx];
const uint16_t decl = isValid(draw.m_stream[idx].m_layoutHandle)
@@ -10082,9 +10082,9 @@ namespace bgfx { namespace gl
if (UINT32_MAX == numVertices)
{
for (BitMaskToIndexIteratorT it(draw.m_streamMask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT it(draw.m_streamMask); !it.isDone(); it.next() )
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
const VertexBufferGL& vb = m_vertexBuffers[draw.m_stream[idx].m_handle.idx];
uint16_t decl = isValid(draw.m_stream[idx].m_layoutHandle) ? draw.m_stream[idx].m_layoutHandle.idx : vb.m_layoutHandle.idx;
+4 -4
View File
@@ -7078,12 +7078,12 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames
if (UINT32_MAX != draw.m_streamMask)
{
for (BitMaskToIndexIteratorT it(draw.m_streamMask)
for (bx::BitMaskToIndexIteratorT it(draw.m_streamMask)
; !it.isDone()
; it.next(), numStreams++
)
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
currentState.m_stream[idx].m_layoutHandle = draw.m_stream[idx].m_layoutHandle;
currentState.m_stream[idx].m_handle = draw.m_stream[idx].m_handle;
@@ -7295,9 +7295,9 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames
if (UINT32_MAX == numVertices)
{
for (BitMaskToIndexIteratorT it(currentState.m_streamMask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT it(currentState.m_streamMask); !it.isDone(); it.next() )
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
const VertexBufferMtl& vb = m_vertexBuffers[currentState.m_stream[idx].m_handle.idx];
const uint16_t decl = isValid(draw.m_stream[idx].m_layoutHandle) ? draw.m_stream[idx].m_layoutHandle.idx : vb.m_layoutHandle.idx;
const VertexLayout& layout = m_vertexLayouts[decl];
+4 -4
View File
@@ -5599,9 +5599,9 @@ VK_IMPORT_DEVICE
{
const uint8_t colorMask = uint8_t(~_clear.getColorSkipMask(numMrt) & ( (1<<numMrt)-1) );
for (BitMaskToIndexIteratorT it(colorMask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT it(colorMask); !it.isDone(); it.next() )
{
const uint32_t ii = it.idx;
const uint32_t ii = it.getIndex();
attachments[mrt].colorAttachment = ii;
attachments[mrt].aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
@@ -11969,12 +11969,12 @@ VK_DESTROY
uint32_t numVertices = draw.m_numVertices;
if (UINT32_MAX != draw.m_streamMask)
{
for (BitMaskToIndexIteratorT it(draw.m_streamMask)
for (bx::BitMaskToIndexIteratorT it(draw.m_streamMask)
; !it.isDone()
; it.next(), numStreams++
)
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
currentState.m_stream[idx] = draw.m_stream[idx];
+10 -10
View File
@@ -3490,8 +3490,8 @@ WGPU_IMPORT
if (0 < numVertexStreams
&& UINT32_MAX != _streamMask)
{
const uint8_t firstStream = BitMaskToIndexIteratorT(_streamMask).idx;
const uint16_t layoutIdx = isValid(_stream[firstStream].m_layoutHandle)
const uint8_t firstStream = bx::BitMaskToIndexIteratorT(_streamMask).getIndex();
const uint16_t layoutIdx = isValid(_stream[firstStream].m_layoutHandle)
? _stream[firstStream].m_layoutHandle.idx
: m_vertexBuffers[_stream[firstStream].m_handle.idx].m_layoutHandle.idx
;
@@ -3533,9 +3533,9 @@ WGPU_IMPORT
if (UINT32_MAX != _streamMask)
{
for (BitMaskToIndexIteratorT it(_streamMask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT it(_streamMask); !it.isDone(); it.next() )
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
uint16_t handle = _stream[idx].m_handle.idx;
const VertexBufferWGPU& vb = m_vertexBuffers[handle];
@@ -3590,12 +3590,12 @@ WGPU_IMPORT
if (UINT32_MAX != _streamMask)
{
for (BitMaskToIndexIteratorT it(_streamMask)
for (bx::BitMaskToIndexIteratorT it(_streamMask)
; !it.isDone()
; it.next(), numStreams++
)
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
const uint16_t handle = _stream[idx].m_handle.idx;
const VertexBufferWGPU& vb = m_vertexBuffers[handle];
@@ -8003,12 +8003,12 @@ WGPU_IMPORT
if (UINT32_MAX != draw.m_streamMask)
{
for (BitMaskToIndexIteratorT it(draw.m_streamMask)
for (bx::BitMaskToIndexIteratorT it(draw.m_streamMask)
; !it.isDone()
; it.next(), numStreams++
)
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
currentState.m_stream[idx].m_layoutHandle = draw.m_stream[idx].m_layoutHandle;
currentState.m_stream[idx].m_handle = draw.m_stream[idx].m_handle;
@@ -8078,9 +8078,9 @@ WGPU_IMPORT
if (UINT32_MAX == numVertices)
{
for (BitMaskToIndexIteratorT it(currentState.m_streamMask); !it.isDone(); it.next() )
for (bx::BitMaskToIndexIteratorT it(currentState.m_streamMask); !it.isDone(); it.next() )
{
const uint8_t idx = it.idx;
const uint8_t idx = it.getIndex();
const VertexBufferWGPU& vb = m_vertexBuffers[currentState.m_stream[idx].m_handle.idx];
const uint16_t decl = isValid(draw.m_stream[idx].m_layoutHandle) ? draw.m_stream[idx].m_layoutHandle.idx : vb.m_layoutHandle.idx;
const VertexLayout& layout = m_vertexLayouts[decl];