StateWrapper: Save contiguous FIFOQueue bytes in one memcpy()

Faster, yay.
pull/3781/head
Stenzek 2 months ago
parent f3d0e84b0d
commit 865fd9e577
No known key found for this signature in database

@ -146,10 +146,30 @@ public:
}
else
{
for (u32 i = 0; i < size; i++)
if (size == 0)
return;
if ((m_error = (m_error || ((m_size - m_pos) < (size * sizeof(T)))))) [[unlikely]]
return;
if constexpr (std::is_standard_layout_v<T> && std::is_trivial_v<T>)
{
const u32 contig_size = data->GetContiguousSize();
if (contig_size > 0)
{
const u32 contig_bytes = contig_size * sizeof(T);
std::memcpy(&m_data[m_pos], data->GetReadPointer(), contig_bytes);
m_pos += contig_bytes;
}
for (u32 i = contig_size; i < size; i++)
{
std::memcpy(&m_data[m_pos], &data->Peek(i), sizeof(T));
m_pos += sizeof(T);
}
}
else
{
T temp(data->Peek(i));
Do(&temp);
for (u32 i = 0; i < size; i++)
Do(const_cast<T*>(&data->Peek(i)));
}
}
}

Loading…
Cancel
Save