Skip to content

Commit b083751

Browse files
committed
use draw data to get total idx & vtx count to calc total bytes to fill, clean code a bit
1 parent aa2cf2b commit b083751

File tree

1 file changed

+9
-12
lines changed

1 file changed

+9
-12
lines changed

src/nbl/ext/ImGui/ImGui.cpp

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,13 +1003,11 @@ namespace nbl::ext::imgui
10031003
for (uint32_t i = 0; i < drawData->CmdListsCount; i++)
10041004
{
10051005
const ImDrawList* commandList = drawData->CmdLists[i];
1006-
1007-
// calculate upper bound byte size for each mdi's content
10081006
params.bytesToFill[MDI::EBC_DRAW_INDIRECT_STRUCTURES] += commandList->CmdBuffer.Size * sizeof(VkDrawIndexedIndirectCommand);
10091007
params.bytesToFill[MDI::EBC_ELEMENT_STRUCTURES] += commandList->CmdBuffer.Size * sizeof(PerObjectData);
1010-
params.bytesToFill[MDI::EBC_INDEX_BUFFERS] += commandList->IdxBuffer.Size * sizeof(ImDrawIdx);
1011-
params.bytesToFill[MDI::EBC_VERTEX_BUFFERS] += commandList->VtxBuffer.Size * sizeof(ImDrawVert);
10121008
}
1009+
params.bytesToFill[MDI::EBC_VERTEX_BUFFERS] = drawData->TotalVtxCount * sizeof(ImDrawVert);
1010+
params.bytesToFill[MDI::EBC_INDEX_BUFFERS] = drawData->TotalIdxCount * sizeof(ImDrawIdx);
10131011

10141012
// calculate upper bound byte size limit for mdi buffer
10151013
params.totalByteSizeRequest = std::reduce(std::begin(params.bytesToFill), std::end(params.bytesToFill));
@@ -1033,7 +1031,6 @@ namespace nbl::ext::imgui
10331031
struct
10341032
{
10351033
typename MDI::ALLOCATOR_TRAITS_T::size_type offset = MDI::ALLOCATOR_TRAITS_T::allocator_type::invalid_address,
1036-
alignment = MDI_MAX_ALIGNMENT,
10371034
multiAllocationSize = {};
10381035
} requestState;
10391036

@@ -1052,7 +1049,7 @@ namespace nbl::ext::imgui
10521049
const auto leftSizeToUpload = mdiParams.totalByteSizeRequest - uploadedSize,
10531050
maxTotalFreeBlockSizeToAlloc = m_mdi.allocator.max_size();
10541051

1055-
MDI::ALLOCATOR_TRAITS_T::multi_alloc_addr(m_mdi.allocator, 1u, &requestState.offset, &requestState.multiAllocationSize, &requestState.alignment);
1052+
MDI::ALLOCATOR_TRAITS_T::multi_alloc_addr(m_mdi.allocator, 1u, &requestState.offset, &requestState.multiAllocationSize, &MDI_MAX_ALIGNMENT);
10561053

10571054
if (requestState.offset == MDI::ALLOCATOR_TRAITS_T::allocator_type::invalid_address)
10581055
{
@@ -1089,15 +1086,15 @@ namespace nbl::ext::imgui
10891086

10901087
if constexpr (type == MDI::EBC_INDEX_BUFFERS)
10911088
{
1092-
const auto localInputBlockOffset = cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx);
1093-
::memcpy(data, cmd_list->IdxBuffer.Data, localInputBlockOffset);
1094-
data += localInputBlockOffset;
1089+
const auto blockStrideToFill = cmd_list->IdxBuffer.Size * sizeof(ImDrawIdx);
1090+
::memcpy(data, cmd_list->IdxBuffer.Data, blockStrideToFill);
1091+
data += blockStrideToFill;
10951092
}
10961093
else if (type == MDI::EBC_VERTEX_BUFFERS)
10971094
{
1098-
const auto localInputBlockOffset = cmd_list->VtxBuffer.Size * sizeof(ImDrawVert);
1099-
::memcpy(data, cmd_list->VtxBuffer.Data, localInputBlockOffset);
1100-
data += localInputBlockOffset;
1095+
const auto blockStrideToFill = cmd_list->VtxBuffer.Size * sizeof(ImDrawVert);
1096+
::memcpy(data, cmd_list->VtxBuffer.Data, blockStrideToFill);
1097+
data += blockStrideToFill;
11011098
}
11021099
}
11031100

0 commit comments

Comments
 (0)